EC2: GlusterFS in AWS
GlusterFS on AWSといえば、 #ヤマン のスライドですね。(後述)
こちらの記事では、実際の設定手順等が書かれてある。
GlusterFS in AWS | Celingest Blog – Feel the Cloud
---以下、拾い訳--
事前の考慮点
アベイラビリティゾーン(AZ)を跨いだ2台のサーバで ext4なEBSボリュームを複製する、といった検証(PoC)に入る前に、GlusterFSを使うべきではない場合を列挙した。
- 複数同時にシーケンシャルにファイル書き込みをする場合: ログのように複数のサーバから書き込まれる、というようにGlusterFSにログを保存する場合、ロック機構( locking system) が、深刻な問題を引き起こす可能性がある。理想的な解決方法は、ローカルのログに追記書き込みし、S3にアーカイブする方法。必要であれば、S3にログを保存する前か後に複数のサーバログを統合することも出来る。
- 継続的に変更されるファイル: PHPセッションファイルやキャッシュなどは、性能に影響する。セッションを統合管理したいのであれば、データベース( RDS, DynamoDB, SimpleDB)や memcached( ElastiCache) を使うべきで、GlusterFSのレプリケーション層に負担をかけることはない。アプリケーションのセッション保持の部分に手を入れられない場合、ローカルフォルダか共有メモリ( shm)を使い、 ELBの stickyセッションで振り分ければ、アプリケーションは透過的になる
- キャッシュ無しの複雑なPHP: アプリのコードをリポジトリに保存すれば、複数台のサーバに簡単にデプロイしてバージョンコントロールできる。GlusterFS上にコードを設置するのが避けられないなら、APCやXCacheといったキャッシュを使って stat()による性能劣化を避けるようにする必要がある。
インストール
Amazon LinuxのメインリポジトリにはGlusterFSパッケージがあるので、外部リポジトリを使う必要はない。各ノードで以下の手順でインストールできる。
yum install fuse fuse-libs glusterfs-server glusterfs-fuse nfs-utils chkconfig glusterd on chkconfig glusterfsd on chkconfig rpcbind on service glusterd start service rpcbind start
Fuseとnfsパッケージは GlusterFSのボリュームをマウントするために必要となる。我々は互換性のためNFSモードをオススメしている。
設定
EBSボリューム(エフェメラルストレージでも可)にPOSIXファイルシステム互換のext4パーティションを用意し、各ノードで以下を実行する。
mkfs.ext4 -m 1 -L gluster /dev/sdg echo -e "LABEL=gluster\t/export\text4\tnoatime\t0\t2" >> /etc/fstab mkdir /export mount /export
GlusterFSボリュームを作成するコマンドを実行するために、複数のノードから1台を選ぶ。インスタンス間の通信はフルアクセスであること。firewallや Security Groupの制限をなくしておく。
gluster peer probe $SERVIDOR2 gluster volume create webs replica 2 transport tcp $SERVIDOR1:/export $SERVIDOR2:/export gluster volume start webs gluster volume set webs auth.allow '*' gluster volume set webs performance.cache-size 256MB
$SERVER1と$SERVER2はインスタンスのDNS名に置き換える。
2つの非標準のオプションを設定する。1つめは、 auth.allowで、全てのIPからのアクセスを受け付けるようにしておく。替わりに、Security Groupでアクセス制御する。2つめは、 performance.cache-sizeで、性能向上のため キャッシュメモリの一部を使えるようにする。
mkdir -p /home/webs mount -t nfs -o _netdev,noatime,vers=3 localhost:/webs /home/webs # If we want to mount it automatically, we need to modify /etc/fstab echo -e "localhost:/webs\t/home/webs\tnfs\t_netdev,noatime,vers=3\t0\t0" >> /etc/fstab chkconfig netfs on
これで、 /home/webs にコンテンツを保存出来るようになった。保存したコンテンツは自動的にもう片方のインスタンスに複製される。stat() がGlusterFSのヘルスチェックを矯正するので、ls -l をフォルダで実行することで複製を強制実行できる。
--以下、 #ヤマン によるGlusterFS on AWSのスライド--
--