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のバックアップが始まってしまった。ということで続きはまた後日。


1/05/2011

ソーシャルアドレス帳

Posterousに投稿したけど、こっちにまとめとく。自分メモ。

ソーシャルアドレス帳っていうのは、僕の造語(だと思う)なんだけど、ユーザ主導で構築された、世界でひとつの大きなアドレス帳のこと。 

これまでのアドレス帳は、その所有者がメモってたり、あるいはタウンページみたいな電話帳だったわけです。最近では携帯電話の中に収まってたりしますが。でもこんなことしちゃうと、携帯電話買い換えたり、引っ越したり、メールアドレス変えたり、これまた最近だとTwitterやSNSのアカウント名変えたりすると、アドレス帳の情報は明示的に書き換えるまでずっと古いままになってしまうのです。そのため、そういうアドレス帳に記載されている情報に変更があった人が、それを教えたであろう人にお知らせするわけです。ぶっちゃけ、めんどくさい。 

もうひとつ云えば、一度手から離れた情報は、回収できないのです。アドレス帳に載せる情報なんてのは思いっきり個人情報なのに、セキュリティ管理のレベルがまちまちなお友達やご知人たちにそれを渡すのはどうかと思うし、一旦教えてしまったけど、後になって失敗したなぁとか思うこともあるかもしれないでしょう(笑)。 

そこで、ソーシャルアドレス帳です。じゃーん。自分の情報は自分でアップデートして、その情報にアクセスできる人を「設定」すればいい。もちろん、変更した情報は通知したりされたりする必要なんてなく、WebブラウザからとアプリからRESTなAPI経由で突っつけるようにしといて、常に最新の情報が取れるようにしとけばいい。SNSなどのプロフィールも、ここから取ってくればいい。利用者はいちいち複数のサイトのプロフィールを書き換える必要はない。各サイトで記載する情報を変えたい場合は、サイトに応じて出す情報を管理(設定)できるようにしておけばいい。 

そしてさらに、認証基盤としても動作させられるようにしたい。せっかくアイデンティティ情報を握ってるんだから、認証もここでやりたい。まずは普及してるOpen IDから対応させる。将来的には、是非、「事実上の」国民IDとして活用してもらいたいね。小国は国民IDとして採用するところも出てくるかもしれない。 

チャレンジなところは、普及の方法でしょう。現在広く使われている「サイロ」なやり方が競争相手。紙のやつに対してはPCからWebで見てもらうか、あるいは電子書籍版を出せばあとは時間が解決してくれそうだし、iPhoneやAndroidはアプリを作ってうまいこと電話やSNSアプリなどと連携させられれば素敵なんだけど、問題は旧式の携帯電話に入ってるやつでしょう。ネイティブの電話帳アプリしか使えないのも多い。ここは最後に手をつけるという作戦にするなら、もうちょっとスマートフォンが普及して「これいいじゃん」って言ってもらえる時代に出せるように、世の中に出すタイミングを図ることだな。 

僕の読みだと、そろそろ顔出しを初めてもいい頃合い。でなければ、僕が作ろうかな。だって、僕が一番使いたいもん。

マネタイズの話が抜けてたね。利用者は無料が当然でしょう。お金は、まずSNSなどのソーシャル系サービス運営会社からいただきます。彼らにとっては、ユーザを獲得する手段になるはず。

次に、企業向けサービスをやって、そこからもいただきます。ひとつは社員向け。企業からみたら、社員の情報を管理したいと思うはず。そういう企業向けの専用ポータルや専用グループの作成や、LDAPで管理されるような部署や役職の管理、パスワードポリシなんかの機能があれば、たぶん欲しいんじゃないかと思う。

ふたつめは、企業の顧客向け。例えばB2CのEコマースなんかだと、顧客の個人情報を管理するのは、はっきりいってリスク以外の何者でもない。なんだかんだいっても個人情報漏洩は嫌でしょう(笑)。そうは言っても、顧客の個人情報がなければ、商品を送れないし、連絡もできない。だから、ソーシャルアドレス帳から引っ張ってくれば、自社で管理する必要がなくなるというわけです。これもたぶん売れる。

各SNSや企業に個人情報を提供するか否かは、ソーシャルアドレス帳の利用者各々が管理(設定)すればいい。そしてもちろん、Default Deny(設定されていなければ提供しない)が、ネットワーク屋さんのルールですね。

そういえば去年の暮、Haas Schoolの先生に同じ話をしたら、同じようなことを考えている人がいると言ってたな。コンタクトするかどうかは迷うな。敵かな?味方かな?(エキセントリック少年ボウイ)