24 Sambaクラスタリング #
クラスタ対応のSambaサーバは、異種混合ネットワークにHigh Availabilityソリューションを提供します。この章では、背景情報とクラスタ対応Sambaサーバの設定方法を説明します。
24.1 概念の概要 #
TDB (Trivial Database)は、長年にわたって、Sambaによって使用されてきました。TDBでは、複数のアプリケーションが同時に書き込むことができます。すべての書き込み操作を正常に実行し、互いに衝突させないため、TDBは、内部ロッキングメカニズムを使用しています。
CTDB (Cluster Trivial Database)は、既存のTDBの小規模な拡張です。CTDBは、プロジェクトによって、「一時データの保存のために、Sambaなどのプロジェクトによって使用されるTDBデータベースのクラスタ実装」として説明されています。
各クラスタノードは、ローカルCTDBデーモンを実行します。Sambaは、そのTDBに直接書き込むのではなく、そのローカルCTDBデーモンと通信します。それらのデーモンは、ネットワークを介してメタデータを交換しますが、実際の読み取り/書き込み操作は、高速ストレージでローカルコピー上で行われます。CTDBの概念は、図24.1「CTDBクラスタの構造」に表示されています。
CTDBリソースエージェントの現在の実装では、Sambaの管理のためだけにCTDBを設定します。他の機能(IPフェールオーバーなど)はすべて、Pacemakerで設定する必要があります。
CTDBは、完全に同種のクラスタに関してのみサポートされます。たとえば、クラスタのすべてのノードが同じアーキテクチャを持つ必要があります。x86とAMD64を混合することはできません。
クラスタ対応Sambaサーバは、一定のデータを共有する必要があります。
UnixのユーザとグループIDをWindowsのユーザとグループに関連付けるマッピングテーブル。
ユーザデータベースをすべてのノード間で同期する必要があります。
Windowsドメイン内のメンバーサーバの参加情報をすべてのノードで利用できる必要があります。
メタデータをすべてのノードで利用できる必要があります(アクティブSMBセッション、共有接続、各ロックなど)。
クラスタ対応SambaサーバがN+1ノードを持っている場合、Nノードだけのサーバより高速になることを目的としています。1つのノードは、クラスタ非対応のSambaサーバより遅くなることはありません。
24.2 基本的な設定 #
CTDBリソースエージェントは、自動的に/etc/sysconfig/ctdbを変更します。crm ra info CTDBを使用して、CTDBリソースに指定できるすべてのパラメータを一覧表示してください。
クラスタ対応Sambaサーバをセットアップするには、次の手順に従います。
クラスタを準備します。
次のパッケージがインストールされていることを確認してから進んでください: ctdb、tdb-tools、およびsamba (
smbおよびnmbリソースに必要)。このガイドのパートII「設定および管理」で説明されているように、クラスタ(Pacemaker、OCFS2)を設定します。
OCFS2などの共有ファイルシステムを設定し、マウントします(たとえば、
/srv/clusterfsにマウント)。詳細については、第19章 「OCFS2」を参照してください。POSIX ACLをオンにする場合は、それを有効にします。
新しいOCFS2ファイルシステムの場合は、次のコマンドを使用します。
root #mkfs.ocfs2--fs-features=xattr ...既存のOCFS2ファイルシステムの場合は、次のコマンドを使用します。
root #tunefs.ocfs2--fs-feature=xattr DEVICEファイルシステムリソースには、必ず、
aclオプションを指定します。次のように、crmシェルを使用します。crm(live)configure#primitiveocfs2-3 ocf:heartbeat:Filesystem params options="acl" ...
ctdb、smb、nmbの各サービスが無効になるようにします。root #systemctldisable ctdbroot #systemctldisable smbroot #systemctldisable nmbすべてのノードのファイアウォールのポート
4379を開きます。これは、CTDBが他のクラスタノードと通信するために必要です。
共有ファイルシステムにCTDBロックのディレクトリを作成します。
root #mkdir-p /srv/clusterfs/samba//etc/ctdb/nodesに、クラスタ内の各ノードの全プライベートIPアドレスを含むすべてのノードを挿入します。192.168.1.10 192.168.1.11
Sambaを設定します。
/etc/samba/smb.confの[global]セクションに次の行を追加します。「CTDB-SERVER」の代わりに、選択したホスト名を使用します(クラスタ内のすべてのノードは、この名前を持つ1つの大きなノードとして表示されます)。[global] # ... # settings applicable for all CTDB deployments netbios name = CTDB-SERVER clustering = yes idmap config * : backend = tdb2 passdb backend = tdbsam ctdbd socket = /var/lib/ctdb/ctdb.socket # settings necessary for CTDB on OCFS2 fileid:algorithm = fsid vfs objects = fileid # ...csync2を使用して、設定ファイルをすべてのノードにコピーします。root #csync2-xv詳細については、手順4.6「Csync2による設定ファイルの同期」を参照してください。
CTDBリソースをクラスタに追加します。
root #crmconfigurecrm(live)configure#primitivectdb CTDB params \ ctdb_manages_winbind="false" \ ctdb_manages_samba="false" \ ctdb_recovery_lock="/srv/clusterfs/samba/ctdb.lock" \ ctdb_socket="/var/lib/ctdb/ctdb.socket" \ op monitor interval="10" timeout="20" \ op start interval="0" timeout="90" \ op stop interval="0" timeout="100"crm(live)configure#primitivenmb systemd:nmb \ op start timeout="60" interval="0" \ op stop timeout="60" interval="0" \ op monitor interval="60" timeout="60"crm(live)configure#primitivesmb systemd:smb \ op start timeout="60" interval="0" \ op stop timeout="60" interval="0" \ op monitor interval="60" timeout="60"crm(live)configure#groupg-ctdb ctdb nmb smbcrm(live)configure#clonecl-ctdb g-ctdb meta interleave="true"crm(live)configure#colocationcol-ctdb-with-clusterfs inf: cl-ctdb cl-clusterfscrm(live)configure#ordero-clusterfs-then-ctdb Mandatory: cl-clusterfs cl-ctdbcrm(live)configure#commitクラスタ対応のIPアドレスを追加します。
crm(live)configure#primitiveip IPaddr2 params ip=192.168.2.222 \ unique_clone_address="true" \ op monitor interval="60" \ meta resource-stickiness="0"crm(live)configure#clonecl-ip ip \ meta interleave="true" clone-node-max="2" globally-unique="true"crm(live)configure#colocationcol-ip-with-ctdb 0: cl-ip cl-ctdbcrm(live)configure#ordero-ip-then-ctdb 0: cl-ip cl-ctdbcrm(live)configure#commitunique_clone_addressがtrueに設定されている場合、IPaddr2リソースエージェントはクローンIDを指定のアドレスに追加し、3つの異なるIPアドレスを設定します。これらは通常必要とされませんが、負荷分散に役立ちます。この項目の詳細については、15.2項 「Linux仮想サーバによる負荷分散の設定」を参照してください。変更をコミットします。
crm(live)configure#commit結果を確認します。
root #crmstatus Clone Set: cl-storage [dlm] Started: [ factory-1 ] Stopped: [ factory-0 ] Clone Set: cl-clusterfs [clusterfs] Started: [ factory-1 ] Stopped: [ factory-0 ] Clone Set: cl-ctdb [g-ctdb] Started: [ factory-1 ] Started: [ factory-0 ] Clone Set: cl-ip [ip] (unique) ip:0 (ocf:heartbeat:IPaddr2): Started factory-0 ip:1 (ocf:heartbeat:IPaddr2): Started factory-1クライアントコンピュータからテストを行います。次のコマンドをLinuxクライアントで実行して、システムからファイルをコピーしたり、システムにファイルをコピーできるかどうか確認します。
root #smbclient//192.168.2.222/myshare
24.3 Active Directoryドメインへの追加 #
Active Directory (AD)は、Windowsサーバシステムのディレクトリサービスです。
次の手順は、CTDBクラスタをActive Directoryドメインに追加する方法を概説しています。
手順24.1「クラスタ対応Sambaサーバの基本セットアップ」の説明に従って、CTDBリソースを作成します。
samba-winbindパッケージをインストールします。
winbindサービスを無効にします。root #systemctldisable winbindwinbindクラスタリソースを定義します。
root #crmconfigurecrm(live)configure#primitivewinbind systemd:winbind \ op start timeout="60" interval="0" \ op stop timeout="60" interval="0" \ op monitor interval="60" timeout="60"crm(live)configure#commitg-ctdbグループを編集して、nmbとsmbリソースの間にwinbindを挿入します。crm(live)configure#editg-ctdb:–w (
vim)でエディタを保存して閉じます。Active Directoryドメインのセットアップ方法については、Windows Serverのマニュアルを参照してください。この例では、次のパラメータを使用します。
ADおよびDNSサーバ
win2k3.2k3test.example.com
ADドメイン
2k3test.example.com
クラスタADメンバーのNETBIOS名
CTDB-SERVER
最後に、クラスタをActive Directoryサーバに参加させます。
次のファイルが、すべてのクラスタホストにインストールされるように、Csync2設定に含まれていることを確認します。
/etc/samba/smb.conf /etc/security/pam_winbind.conf /etc/krb5.conf /etc/nsswitch.conf /etc/security/pam_mount.conf.xml /etc/pam.d/common-session
この作業には、YaSTのモジュールを使用することもできます。4.5項 「すべてのノードへの設定の転送」を参照してください。
YaSTを実行し、エントリからモジュールを開きます。
ドメインまたはワークグループの設定を入力して、をクリックして終了します。
24.4 クラスタ対応Sambaのデバッグとテスト #
クライアント対応Sambaサーバのデバッグには、次のツールを使用できます。これらのツールは、さまざまなレベルで動作します。
ctdb_diagnosticsこのツールを実行して、クラスタ対応Sambaサーバを診断します。詳細なデバッグメッセージが出力されるので、発生している問題を追跡するのに役立ちます。
ctdb_diagnosticsコマンドは、次のファイルを検索します。これらのファイルは、すべてのノードで利用できる必要があります。/etc/krb5.conf /etc/hosts /etc/ctdb/nodes /etc/sysconfig/ctdb /etc/resolv.conf /etc/nsswitch.conf /etc/sysctl.conf /etc/samba/smb.conf /etc/fstab /etc/multipath.conf /etc/pam.d/system-auth /etc/sysconfig/nfs /etc/exports /etc/vsftpd/vsftpd.conf
/etc/ctdb/public_addressesファイルと/etc/ctdb/static-routesファイルが存在する場合は、それらもチェックされます。ping_pongping_pongでは、ファイルシステムがCTDBに適合しているかどうかチェックできます。このコマンドは、クラスタファイルシステムの一定のテスト(コヒーレンスやパフォーマンスなどのテスト)を実行して(http://wiki.samba.org/index.php/Ping_pong参照)、高負荷の状況下におけるクラスタの動作を示す情報を提供します。send_arpツールおよびSendArpリソースエージェントSendArpリソースエージェントは、/usr/lib/heartbeat/send_arp(または/usr/lib64/heartbeat/send_arp)にあります。send_arpツールはGratuitous ARP (余計なアドレス解決プロトコル)パケットを送信し、他のマシンのARPテーブルを更新するために使用できます。これは、フェールオーバープロセス後の通信問題の識別に役立ちます。Sambaのクラスタ化されたIPアドレスを表示しているのにも関わらず、ノードに接続またはpingできない場合は、send_arpコマンドを使用して、ノードはARPテーブルの更新のみが必要であるのかをテストします。詳細については、https://gitlab.com/wireshark/wireshark/-/wikis/homeを参照してください。
クラスタファイルシステムの特定の側面をテストするには、次の手順に従います。
1つのノードで
ping_pongコマンドを開始します。プレースホルダNはノード数+1で置き換えます。共有ストレージではABSPATH/data.txtファイルが使用可能で、すべてのノード上でアクセスできます(ABSPATHは絶対パスを示しています)。ping_pongABSPATH/data.txt N1つのノードでだけ実行しているので、ロッキングレートは非常に高いと予想してください。プログラムがロッキングレートを出力しない場合は、クラスタファイルシステムを置き換えます。
同じパラメータを使用して、別のノードで
ping_pongの2つ目のコピーを開始します。ロッキングレートが大幅に下がることを予想できます。使用しているクラスタファイルシステムに次のどれかが当てはまる場合は、クラスタファイルシステムを置き換えます。
ping_pongがロッキングレート(秒単位)を出力しない,2つのインスタンスのロッキングレートがほぼ同じではない。
2つ目のインスタンスの開始後にロッキングレートが下がらなかった。
ping_pongの3つ目のコピーを開始します。もう1つノードを追加し、ロッキングレートの変化に注目します。ping_pongコマンドを1つずつ終了させます。単一ノードの状態に戻るまで、ロッキングレートの増加が観察されるはずです。予想したような振る舞いが見られなかった場合には、第19章 「OCFS2」に記されている詳細を参照してください。
