web-dev-qa-db-ja.com

複製された共有ファイルシステム

AWS(EC2)インフラストラクチャ上に共有ファイルシステム/ファイルサーバーをセットアップして、レプリケーションと非常に簡単なフェイルオーバーを提供することを検討しています。このファイルシステムは、サイズが数メガバイトの数百万のファイルをホストする可能性があります。これらのファイルは、複数のクライアントVMからアクセス(読み取り/書き込み)されます。プライマリファイルサーバーに障害が発生した場合、クライアントがファイルを失うことなくレプリカファイルサーバーにフェイルオーバーできるようにしたい(つまり、レプリケーションをリアルタイムにしたい)。私はいくつかのオプションを見てきました:

  • S3fsでS3を使用します。何千ものファイルに対して操作を実行する場合(たとえば、ファイルをコピー/移動する場合)、各リクエストのレイテンシが問題になるのではないかと心配しています。また、s3fsの安定性に疑問を投げかける報告もいくつか聞いていますが、それがまだ当てはまるかどうかはわかりません。
  • Drbdを使用して2つのインスタンス間でブロックを複製し、EC2インスタンスにNFSサーバーをセットアップします。欠点:
    1. 過去にdrbdで信頼性の問題が発生しました。特に、待ち時間の長いリンクで問題が発生しました。
    2. プライマリNFSサーバーがダウンすると、クライアントもダウンし、システム管理者の介入や再起動が必要になり、セカンダリサーバーに再接続します。自動フェイルオーバーはありません。

より良い解決策はありますか?

5
Alex

いくつかの更新された情報。あなたが私のようで、この機能を非常に長い間望んでいた場合は、Amazon Elastic File System(EFS)を使用してください。これは、複数のアベイラビリティーゾーンに複製されたNFSマウントです。

(問題をぶつけて申し訳ありませんが、この回答のグーグルランクは十分に高いので、おそらく少数の人々がこの解決策を探しています。)

1
Sam Caldwell

簡単ではありませんが、同期レプリケーションにDRBDを使用し、NFSサービスのフェイルオーバーとノード間のエクスポートを自動化するためにPacemaker + Corosyncを使用して(クライアントアクセスを中断することなく)AmazonEC2でNFSクラスターをセットアップすることができます。

同期(「リアルタイム」)での複製を計画している場合は、両方のEC2インスタンスを同じゾーンに配置して、それらの間のレイテンシを制限する必要があります。そうしないと、そのネットワーク遅延がディスク遅延に変換されます。

また、AmazonEC2インスタンスでIPアドレスを簡単に割り当て/割り当て解除することはできません。 IPアドレスを再割り当てするには、APIを使用する(またはWeb GUIを使用する)必要があります。クライアントがアクティブノードへの接続に使用するフローティングIPアドレスには、IPアドレスの移動が必要です。これを機能させるには、「IPaddr2」ペースメーカーリソースエージェントの変更が必要になります。これはbashスクリプトです。

4
Matt Kereczman

複製されたNFSサーバーのセットアップは複雑であるため、S3を選択します。 s3fs-fuze のパフォーマンスはひどいものでした(1,000を超えるファイルがあるディレクトリでlsを実行すると、各ファイルのメタデータをクエリし、キャッシュする必要があるため、1分近くかかります役に立たなかったようです)。しかし、それから私は RioFS を試してみました。これにより、ディレクトリ操作で即座に応答が得られ、全体的に非常に高速であると感じました。

私はまだいくつかの追加オプション(特に S3QL および YAS3FS )を調査することを計画していますが、これまでのところオプションは有望に見えます。

2
Alex