初心者の質問です。これを構築する必要があります:
/shared
フォルダーには約 500 GB のファイルがあり、各ファイルは約 1 MB です。- 1Gbs LANで接続された2つのボックス(server1とserver2)
- すべてのボックスはファイルへの読み取り/書き込みアクセスを取得する必要があるため、クライアントと
- 両方のボックスでファイルを複製し、一方のサーバーにファイルが書き込まれるたびに、もう一方のサーバーにも同じファイルが存在するようにしたいです。
GlusterFS に関する質問:
- 同じボックス上のファイルを複製しますか? たとえば、ファイルは にあり
/shared
、マウントは です/mnt/shared
。各サーバーで 1 GB のスペースを占有しますか? - 代わりに、ファイルシステムを直接使用して、ローカルに書き込む必要がありますか
/shared
? クライアントをマウントせずに、このようにレプリケーションは機能しますか?
また、この設定を実現する他の方法をご存知の方がいらっしゃいましたら、大変ありがたく思います。よろしくお願いします。
答え1
実際、Gluster はこのシナリオに最適です。双方向のレプリケーションと、どちらのマシンからでもファイルシステムをマウントする機能により、NFS の 2 倍の有効 I/O 容量が (理論上) 得られ、ボックスの 1 つに障害が発生した場合でもアクティブなフェイルオーバーが実現します。
この方法でアクティブ rsync を実行すると、ファイル ロックによって I/O がブロックされるという問題があります。アプリケーションとデータの変更によっては、これが無関係になるか、悲惨な結果になる可能性があります。分散ファイル システムには、これを防ぐための非常に特殊なロック セマンティクスがあります。inotify のロックが改善されたとしても (最後に試したときは改善されていませんでした)、最近では、ネットワークが変更に対応できるかどうかによって、ファイル アクセスがブロックされる可能性があります。これらはすべて理論上の警告ですが、アプリの動作によっては検討する価値があります。
答え2
最終的に、両方のボックスで GlusterFS を使用してこの問題を解決することができました。このプロセスで学んだことは次のとおりです。
- まず、一般的な RAID 1 設定を試しました。これの主な問題は、クライアントが両方のサーバーに常に TCP を使用して接続することです。たとえサーバーが同じマシンにある場合でもです。そのため、クライアントの設定を変更して、TPC の「ローカル」ボリュームを直接アクセス (ストレージ/POSIX) ボリュームに置き換える必要があります。
- ネットワークリンクに負担をかけないように、すべてのクライアントはディレクティブを使用してローカルストレージを読み取ります
option read-subvolume
。もちろん、RAID1の整合性を維持するために、GlusterFSは常に他のボリュームもチェックしますが、実際のファイルはディスクから直接取得されます。 - パフォーマンスは良好ですが、クライアントプロセスがメモリを占有しているようです。これはクイックリードボリュームに関連していると思います。さらに調査する必要があります。
変更されたクライアント構成:
# Server1 configuration (RAID 1)
volume server2-tcp
type protocol/client
option transport-type tcp
option remote-host server2
option transport.socket.nodelay on
option transport.remote-port 6996
option remote-subvolume brick1
end-volume
volume posix-local
type storage/posix
option directory /shared
end-volume
volume locks-local
type features/posix-locks
subvolumes posix-local
end-volume
volume brick-local
type performance/io-threads
option thread-count 8
subvolumes locks-local
end-volume
volume mirror-0
type cluster/replicate
option read-subvolume brick-local
subvolumes brick-local server2-tcp
end-volume
.....
私の両方の質問に答えます:
同じボックス上のファイルが重複するのでしょうか?
いいえ、fs は FUSE を使用してマウントされています。現在の /etc/fstab 行:
/etc/glusterfs/client.vol /mnt/shared glusterfs デフォルト 0 0
代わりに、ファイルシステムを直接使用して、/shared にローカルに書き込む必要がありますか? クライアントをマウントせずに、このようにレプリケーションは機能しますか?
いいえ、読み取り/書き込みを行うには常にマウントされたボリュームを使用してください。ファイルシステムを直接使用すると、不整合が発生する可能性があります。
答え3
セットアップがずっと簡単になりますアクティブミラーリングを行うためのrsyncまたは、NFS 共有を設定し、両方を同じ実際のドライブから取得するようにします。