aws memo

AWS関連の備忘録 (※本ブログの内容は個人的見解であり、所属組織及び企業の意見を代弁するものではありません。1年以上古いエントリは疑ってかかってください)

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のスライド--

 

--