11/01/2012

AWSでGlusterを動かす


AWSでGlusterを動かしてみます。EBSだと高くつくので、Instance Storeで。まずは、Amazon Linux(ami-5a6cd35b)にInstance Store Volumesを2つくっつけて起動します。

●なにはともあれ、yumアップデート。
[ec2-user@ip-10-156-59-42 ~]$ sudo yum update

●Glusterのソースをダウンロード。

[ec2-user@ip-10-156-59-42 ~]$ wget
http://download.gluster.org/pub/gluster/glusterfs/3.3/3.3.1/glusterfs-3.3.1.tar.gz
--2012-10-29 03:05:13--
http://download.gluster.org/pub/gluster/glusterfs/3.3/3.3.1/glusterfs-3.3.1.tar.gz
Resolving download.gluster.org... 50.57.69.89
Connecting to download.gluster.org|50.57.69.89|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 2636698 (2.5M) [application/x-gzip]
Saving to: “glusterfs-3.3.1.tar.gz”

100%[======================================>] 2,636,698   1.13M/s   in 2.2s

2012-10-29 03:05:16 (1.13 MB/s) - “glusterfs-3.3.1.tar.gz” saved
[2636698/2636698]

●Glusterのコンパイルに必要なパッケージをインストール。
[ec2-user@ip-10-156-59-42 ~]$ sudo yum install make gcc flex bison
openssl-static readline-static

●Glusterをコンパイルしてインストール
[ec2-user@ip-10-156-59-42 ~]$ tar zxvf glusterfs-3.3.1.tar.gz
[ec2-user@ip-10-156-59-42 ~]$ cd glusterfs-3.3.1
[ec2-user@ip-10-156-59-42 glusterfs-3.3.1]$ ./configure
(略)
GlusterFS configure summary
===========================
FUSE client        : yes
Infiniband verbs   : no
epoll IO multiplex : yes
argp-standalone    : no
fusermount         : no
readline           : yes
georeplication     : yes
Linux-AIO          : no

[ec2-user@ip-10-156-59-42 glusterfs-3.3.1]$ make
(略)
[ec2-user@ip-10-156-59-42 glusterfs-3.3.1]$ sudo make install
(略)

●起動スクリプトをコピーして、使えるか確認。
[ec2-user@ip-10-156-59-42 glusterfs-3.3.1]$ sudo cp
extras/init.d/glusterd-Redhat /etc/init.d/glusterd
[ec2-user@ip-10-156-59-42 glusterfs-3.3.1]$ sudo chmod a+x
/etc/init.d/glusterd
[ec2-user@ip-10-156-59-42 glusterfs-3.3.1]$ sudo /sbin/service glusterd
start
Starting glusterd:                                         [  OK  ]
[ec2-user@ip-10-156-59-42 glusterfs-3.3.1]$ sudo /sbin/service glusterd
restart
Stopping glusterd:                                         [  OK  ]
Starting glusterd:                                         [  OK  ]
[ec2-user@ip-10-156-59-42 glusterfs-3.3.1]$ sudo /sbin/service glusterd stop
Stopping glusterd:                                         [  OK  ]

●ここまでで一旦、AMIを作る
※scpなどでX.509証明書と秘密鍵を転送する必要あり。

[ec2-user@ip-10-156-59-42 ~]$ sudo su -
[root@ip-10-156-59-42 ~]# ec2-bundle-vol -d /media/ephemeral0 --privatekey
~ec2-user/PrivateKey.pem --cert ~ec2-user/X509Certificate.pem --user
XXXX-XXXX-XXXX --fstab /etc/fstab
Please specify a value for arch [x86_64]:
(略)
[root@ip-10-156-59-42 ~]# ec2-upload-bundle -r ap-northeast-1 --bucket
My_Bucket/Gluster_Node_Base --manifest /media/ephemeral0/image.manifest.xml
--access-key XXXXXXXXXXXXXXXXXXXX --secret-key
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
(略)
[root@ip-10-156-59-42 ~]# ec2-register --region ap-northeast-1
--aws-access-key XXXXXXXXXXXXXXXXXXXX --aws-secret-key
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX --name gluster_node_base
My_Bucket/Gluster_Node_Base/image.manifest.xml
IMAGE   ami-xxxxxxxx


●作成したAMIからインスタンスを作って3台起動。
1台目(ap-northeast-1a)
ec2-46-51-226-247.ap-northeast-1.compute.amazonaws.com

2台目(ap-northeast-1b)
ec2-176-32-64-146.ap-northeast-1.compute.amazonaws.com

3台目(ap-northeast-1c)
ec2-54-248-159-67.ap-northeast-1.compute.amazonaws.com

1台目と2台目のglusterのuuidを変えておく。
[ec2-user@ip-10-152-251-141 ~]$ cd /var/lib/glusterd/
[ec2-user@ip-10-152-251-141 glusterd]$ sudo cp -p glusterd.info
glusterd.info.back
[ec2-user@ip-10-152-251-141 glusterd]$ sudo vi glusterd.info
UUID=48a21eef-7789-45db-8f59-c5214297fbd2
[ec2-user@ip-10-152-251-141 ~]$ sudo /sbin/service glusterd restart
Stopping glusterd:                                         [  OK  ]
Starting glusterd:                                         [  OK  ]


この時点での各インスタンスのGlusterのUuidは、
1: UUID=48a21eef-7789-45db-8f59-c5214297fbd1
2: UUID=48a21eef-7789-45db-8f59-c5214297fbd2
3: UUID=48a21eef-7789-45db-8f59-c5214297fbd3

にしておいた。

●Glusterにノードを追加(Trusted Storage Poolを作る)
[ec2-user@ip-10-158-173-174 ~]$ sudo /usr/local/sbin/gluster
gluster> peer probe ec2-176-32-64-146.ap-northeast-1.compute.amazonaws.com
Probe successful
State: Peer in Cluster (Connected)
gluster> peer probe ec2-54-248-159-67.ap-northeast-1.compute.amazonaws.com
Probe successful
gluster> peer status
Number of Peers: 2

Hostname: ec2-176-32-64-146.ap-northeast-1.compute.amazonaws.com
Uuid: 48a21eef-7789-45db-8f59-c5214297fbd2
State: Peer in Cluster (Connected)

Hostname: ec2-54-248-159-67.ap-northeast-1.compute.amazonaws.com
Uuid: 48a21eef-7789-45db-8f59-c5214297fbd3
State: Peer in Cluster (Connected)


1台目のノードは、他のノードから追加してあげる。
[ec2-user@ip-10-152-251-141 ~]$ sudo /usr/local/sbin/gluster
gluster> peer probe ec2-46-51-226-247.ap-northeast-1.compute.amazonaws.com
Probe successful


●3つのレプリカを持つクラスタボリュームを作成して起動する。
gluster> volume create test-volume replica 3 transport tcp
ec2-46-51-226-247.ap-northeast-1.compute.amazonaws.com:/media/ephemeral0
ec2-176-32-64-146.ap-northeast-1.compute.amazonaws.com:/media/ephemeral0
ec2-54-248-159-67.ap-northeast-1.compute.amazonaws.com:/media/ephemeral0
Creation of volume test-volume has been successful. Please start the volume
to access data.
gluster> volume start test-volume
Starting volume test-volume has been successful


●マウントしてみる
[ec2-user@ip-10-158-173-174 ~]$ sudo mkdir /media/gluster0
[ec2-user@ip-10-158-173-174 ~]$ sudo mount -t glusterfs
ec2-46-51-226-247.ap-northeast-1.compute.amazonaws.com:/test-volume
/media/gluster0
[ec2-user@ip-10-158-173-174 ~]$ df
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/xvda1            10321208   1349420   8447500  14% /
tmpfs                   848480         0    848480   0% /dev/shm
/dev/xvdb            153899044    192084 145889336   1% /media/ephemeral0
ec2-46-51-226-247.ap-northeast-1.compute.amazonaws.com:/test-volume
                    153899008    192128 145889280   1% /media/gluster0


●テスト
[ec2-user@ip-10-158-173-174 ~]$ sudo cp -rp ./* /media/gluster0/
[ec2-user@ip-10-152-251-141 ~]$ sudo du -a /media/ephemeral0 | wc -l
2346

これで、東京にあるAWSの3つのリージョンをまたぐ分散ファイルシステムの完成。容量は140GB。

ひとまず。

10/10/2012

隠れた能力を見つけよう!

最近ハマったというか、面白かったと思うのはこれですね↓


去年やったハーマンモデルを思い出しました。ハーマンモデルは右脳 or 左脳と、大脳新皮質 or 辺縁皮質をマトリックスにして4象限で「利き脳」をわかるように分類するものです。一方、この本に載っている方法は、偉い人にインタビューをしつつアンケートを採った結果に基づいている、とのこと。これがですね、結構当たるんですよ。

本を買うと「ストレングスファインダー」というWebの強み発見ツールが使えるパスコードがくっついていて、それを使ってポチポチやるだけで180個の34個の資質の中から5つの強みを出してくれます。チームでこれをやって、お互いの特性を一目で認識できるようにしておいて合宿とかすると面白いかもしれませんね。

ちなみに僕は、活発性、学習欲、目標志向、着想、親密性、でした。一緒の順番の人いるのかな?33,390,720通りあるので、地球上に180人ぐらい一緒な人がいますね。

9/17/2012

NASにあるiPhotoライブラリが開けなくなった

嫁さんのMacのローカルドライブがカツカツだったので、特に大きな写真たちをTime Capsuleへ移動して、とりあえずの容量を稼ぐことにしました。その容量、なんと90GB以上。いやぁ、スマホってやっぱデータ生産装置なんですよね。 恒久的には、写真はAdobe Revelなんぞに移行しますが、この話はまた機会があれば。

で、しばらくTime CapsuleにあるiPhotoライブラリを使ってましたが、さきほど我が家のチビがMacの電源長押しする事故があって、iPhotoを開けなくなりました。iPhotoを開くとこんなメッセージが出ます。


警告
iPhoto ライブラリがロックされているか、ロックされたディスク上にあるか、変更する権限がユーザにありません。

なにやら楽しそうなメッセージですね。電源プッチンされたために、ロックファイルか何かが残っちゃったんでしょう。まずはiPhotoを閉じて、と。

$ cd /Volumes/Time\ Capsule/iPhoto\ Library/
$ ls -la | grep -E '(l|L)ock'
-rwxrwxrwx  1 user  staff          1 Sep 17 15:10 iPhotoLock.data


あったね。誰が開いてるのか、一応チェック。

$ lsof -f -- ./iPhotoLock.data
COMMAND PID USER   FD   TYPE DEVICE SIZE/OFF   NODE NAME
iPhoto  515 user   10u   REG   46,3        1 264951 ./iPhotoLock.data

ん。間違いない。ではさようなら。

$ mv ./iPhotoLock.data ./iPhotoLock.data.back

無事、起動できましたー。これを書き終わっても、まだサムネールキャッシュを再構築してますね。


7/21/2012

port upgrade に失敗する

とある機会があって、久々にmac portsを触ってみたら、なんかエラーがでるようになっていた。
$ sudo port upgrade installed
---> Fetching ncurses
---> Attempting to fetch ncurses-5.9.tar.gz from ftp://ftp.dti.ad.jp/pub/GNU/ncurses
---> Attempting to fetch ncurses-5.9.tar.gz from http://ykf.ca.distfiles.macports.org/MacPorts/mpdistfiles/ncurses
---> Verifying checksum(s) for ncurses
---> Extracting ncurses
---> Applying patches to ncurses
---> Configuring ncurses
Error: Target org.macports.configure returned: configure failure: shell command failed (see log for details)
Log for ncurses is at: /opt/local/var/macports/logs/_opt_local_var_macports_sources_rsync.macports.org_release_ports_devel_ncurses/main.log
Error: Unable to upgrade port: 1
To report a bug, see <http://guide.macports.org/#project.tickets>
で、早速ログ(上のなかのmain.logね)を見てみると、
:info:configure checking for C compiler default output... configure: error: C compiler cannot create executables
なんでそんなことに・・・。
google先生に訊いてみると、ちゃんとXcodeがインストールされてるか確認せよ、とのこと。

https://trac.macports.org/wiki/FAQ#missingxcode

I get the error "C compiler cannot create executables" or "can't read "build.cmd": Failed to locate 'make' in path" when I try to install a port. Why?
You need to install Xcode. Ensure you include both System Tools and Unix Development. As of Xcode 4.3, you also need to install the separate Command Line Tools package.


なんかそういわれると自信なくなってきた。早速Xcodeを起動してみると、Version 3.2.4が入っていることが確認できた。古いなぁ・・・。とても昔にAppleのDeveloperサイトからダウンロードして入れた記憶があるんだけど、果たしてSystem ToolsやUnix Developmentを入れたかと言われると、とてつもなく自信がない。
よっさ、この際バージョンアップするべ。
ということで、App StoreへGo!

ところで、Command Line Toolsとやらはどこにあるのだろう?と探していたら、なんとPreferences > Downloads からインストールできるようになっていることを発見!あら簡単!
しかし、しばらく見ない間に、Xcodeのインタフェースが変わりましたね。なんかもう、何がどこにあるのやらよくわからんような状態。とかいってたら、Time Machineのバックアップが始まってしまった。ということで続きはまた後日。