この記事は、Samba、NFSプロトコルを使用してアクセスされる、スケーラブルなフォールトトレラントファイルストレージを構築するための段階的なガイドです。 ファイルボールの保存とスケーリングを直接行うファイルシステムとして、GlusterFSを使用します。GlusterFS
は habrasociety
によってすでにかなり
記述されています。 GlusterFSは
Red Hat Storageの一部であるため、チュートリアルはRHに似たシステム向けに書かれています。

これらのサービスはどのように相互作用しますか?
GlusterFS
公式サイトからダウンロードしたバージョン3.3.1、rpm-kiを使用します。 ボリュームを作成した後、クライアントはいくつかの方法でそれにアクセスできます。
# mount.glusterfs# mount -o mountproto=tcp,async -t nfs# mount.cifs
最初のオプションを使用します。この場合、クライアントはすべてのサーバーとの接続を確立し、マウントされたサーバーに障害が発生すると、実稼働サーバーからデータを受信するためです。

CTDB
この投稿では、優れたメカニズムについて説明し
ています。 ドキュメンテーションのLVSを使用したクラスターの負荷分散はNATネットワークに対してのみ規定されているため、ラウンドロビンDNSを使用します。 SMB、NFSと同様に、標準のリポジトリがあります。
# yum install ctdb samba nfs-utils cifs-utilsさあ始めましょう
2つのノードがあるとします。
gluster1, 192.168.122.100gluster2, 192.168.122.101フォールトトレランスを実装するIPがまだ必要です-サーバー間で移行します。
192.168.122.200192.168.122.201データドメインのRR DNSは次のようになります。
; zone file fragmentdata. 86400 IN A 192.168.122.200data. 86400 IN A 192.168.122.201GlusterFS用のボリュームの作成は行いません。 分散レプリケーションパーティション(分散+複製ボリューム)が必要だと言います。 それを
smbと呼びましょう。 開始するには、
各ノードでローカルにマウントします。
# mount.glusterfs gluster1:smb /mnt/glustersmb各サーバーは、独自の
ホスト名をオプションとして使用します。 / etc / fstabにエントリを書くことを忘れないでください。
(各サーバーの) Samba構成を編集し
ます 。
# vim /etc/samba/smb.conf...
[global]#主なパラメーターは、クラスタリングを担当します。
clustering = yes#ユーザーリクエストを保存するデータベースとの通信(作業の仕組みに関するリンクを参照)
idmap backend = tdb2#構成ファイルのあるフォルダー
private dir = /mnt/glustersmb/lockそして、ボール自体のセクションを追加します。
[pub]path = /mnt/glustersmb/lockbrowseable = YESforce user = smbcliforce group = smbcliwritable = yesguest ok = yesguest account = smbcliguest only = yesこのフォルダーは、一般的な使用、許可なしのsmbcliユーザーからのアクセス用です。 後で作成し、権利を割り当てます。
サーバーの
1つに、いくつかのCTDB構成ファイルを配置するフォルダーを作成します
# mkdir /mnt/glustersmb/lockそして、ファイルを追加します。
# touch /mnt/glustersmb/lock/lockfile各サーバーのCTDB構成ファイルは、次のように縮小されます。
# vim /etc/sysconfig/ctdbCTDB_RECOVERY_LOCK=/mnt/glustersmb/lock/lockfileCTDB_PUBLIC_ADDRESSES=/etc/ctdb/public_addressesCTDB_MANAGES_SAMBA=yesCTDB_NODES=/etc/ctdb/nodesCTDB_MANAGES_NFS=yes#CTDBクラスターノードのステータスが変更されるたびに実行されるファイル(レターの送信など)
CTDB_NOTIFY_SCRIPT=/etc/ctdb/notify.shパブリックアドレスを示します
(各サーバー上) :
# vim /etc/ctdb/public_addesses192.168.122.200/24 eth0192.168.122.201/24 eth0CTDBクラスターのノード
(各サーバー上)を指定し
ます 。
# vim /etc/ctdb/nodes192.168.122.100192.168.122.101SElinuxを無効にすると、IPtablesは次のようになります(もちろん、サーバー
ごとに )。
# vim /etc/sysconfig/iptables-A INPUT -p tcp --dport 4379 -j ctdb-A INPUT -p udp --dport 4379 -j ctdb-A INPUT -p tcp -m multiport --ports 137:139,445 -m comment --comment "SAMBA" -j SMB-A INPUT -p udp -m multiport --ports 137:139,445 -m comment --comment "SAMBA" -j SMB-A INPUT -p tcp -m multiport --ports 111,2049,595:599 -j NFS-A INPUT -p udp -m multiport --ports 111,2049,595:599 -j NFS-A INPUT -p tcp -m tcp --dport 24007:24220 -m comment --comment "Gluster daemon" -j ACCEPT-A INPUT -p tcp -m tcp --dport 38465:38667 -m comment --comment "Gluster daemon(nfs ports)" -j ACCEPT#チェーンの名前の代わりに、単にACCEPTを指定できます。
Sambaとsmbcliユーザー
(各サーバー)に戻ります。
# useradd smbcli# chown -R smbcli.smbcli /mnt/glustersmb/pub最後から2番目のタッチ:
# chkconfig smbd off# chkconfig ctdb on# service ctdb start今、あなたは観察することができます
# ctdb statusNumber of nodes:2pnn:0 192.168.122.100 OK (THIS NODE)pnn:1 192.168.122.101 OKGeneration:1112747960Size:2hash:0 lmaster:0hash:1 lmaster:1Recovery mode:NORMAL (0)Recovery master:0パブリック移行IPとサーバーに属するIPのリストは、次のコマンドによって取得されます
# ctdb ipPublic IPs on node 0192.168.122.200 node[1] active[] available[eth0] configured[eth0]192.168.122.201 node[0] active[eth0] available[eth0] configured[eth0]SMBまたはNFSプロトコルを使用して、次のコマンドでクライアントをマウントします。
# mount.cifs data:smb /mnt# mount -o mountproto=tcp,async -t nfs data:smb /mnt個人的な経験から、私はまだネットワークのドロップをテストしていると言いますが、結果は非常に許容範囲です。 接続の切断はほとんど目立ちません。 すべてが
アンドレイキロフを説明する
教育プログラム別のIPアドレスを引き継いだノードは、古いTCP接続に関する情報のみを知っており、接続の「TCPシーケンス番号」を知りません。 したがって、継続できません。 クライアントと同様に、接続が別のノードに確立されたことを知りません。
接続の切り替えに関連する遅延を回避するために、次の手法が使用されます。 この手法を理解するには、TCPプロトコルの機能の基本原則を理解する必要があります。
IPアドレスを受信すると、新しいノードはACKフラグと明らかに間違った「シーケンス番号」がゼロに等しいパケットをクライアントに送信します。 応答として、クライアントは、TCPプロトコルの規則に従って、正しい「シーケンス番号」でACK応答パケットを送り返します。 正しい「シーケンス番号」を受信すると、ノードはRSTフラグとこの「シーケンス番号」でパケットを形成します。 受信すると、クライアントはすぐに接続を再開します。
素敵なコーディングを!