web-dev-qa-db-ja.com

単純なレプリケーションにGlusterFSを使用する

初心者の質問。私はこれを構築する必要があります:

  • /sharedフォルダ最大500GBのファイル、各ファイル最大1MB。
  • 1Gbs LANで接続された2つのボックス(server1とserver2)
  • すべてのボックスはファイルへのr/wアクセスを取得する必要があるため、両方ともクライアントです
  • ファイルが両方のボックスに複製されるようにしたいのですが、一方のサーバーにファイルが書き込まれるたびに、もう一方のサーバーにも同じファイルが存在する必要があります。

GlusterFSに関する私の質問:

  • 同じボックスにファイルを複製しますか?たとえば、ファイルは/sharedにあり、マウントは/mnt/sharedにあります。すべてのサーバーで1GBのスペースが必要ですか?
  • 代わりに、ファイルシステムを直接使用して、ローカルで/sharedに書き込む必要がありますか?クライアントをマウントしなくても、レプリケーションはこのように機能しますか?

また、この設定を完了する他の方法を誰かが知っているなら、私は非常に感謝します。前もって感謝します。

4
k7k0

実際、Glusterはこのシナリオに最適です。双方向レプリケーションといずれかのマシンからファイルシステムをマウントする機能を利用できるため、(理論的には)NFSの2倍の有効I/O容量と、ボックスの1つに障害が発生した場合のアクティブフェイルオーバーが可能になります。

この方法でアクティブなrsyncを実行する場合の問題は、ファイルロックが原因でI/Oがブロックされることです。アプリケーションとデータの変更に応じて、これは無関係または悲惨な場合があります。分散ファイルシステムには、これが発生しないようにする非常に特殊なロックセマンティクスがあります。最近、inotifyの方がロックが優れていても(最後に試したときはそうではありませんでした)、ネットワークが変更に対応できるかどうかによっては、ファイルアクセスがブロックされる可能性があります。これらはすべて理論上の警告ですが、アプリの機能に応じて検討する価値があります。

5
Jeff

私はついに両方のボックスでGlusterFSを使用してこれを解決することができました。その過程で学んだこと:

  • 最初に、一般的なRAID1セットアップを試しました。これに関する主な問題は、サーバーの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/sharedglusterfsのデフォルト00

代わりに、ファイルシステムを直接使用して、ローカルで/ sharedに書き込む必要がありますか?クライアントをマウントしなくても、レプリケーションはこのように機能しますか?

いいえ、常にマウントされたボリュームを使用して読み取り/書き込みを行います。ファイルシステムを直接使用すると、不整合が発生する可能性があります。

8
k7k0

セットアップ アクティブミラーリングを行うためのrsync 、または単にnfs共有をセットアップし、両方を同じ実際のドライブからプルさせる方がはるかに簡単です。

0
Chris S