23 Sambaクラスタリング #
クラスタ対応のSambaサーバは、異種混合ネットワークにHigh Availabilityソリューションを提供します。この章では、背景情報とクラスタ対応Sambaサーバの設定方法を説明します。
23.1 概念の概要 #
TDB (Trivial Database)は、長年にわたって、Sambaによって使用されてきました。TDBでは、複数のアプリケーションが同時に書き込むことができます。すべての書き込み操作を正常に実行し、互いに衝突させないため、TDBは、内部ロッキングメカニズムを使用しています。
CTDB (Cluster Trivial Database)は、既存のTDBの小規模な拡張です。CTDBは、プロジェクトによって、「一時データの保存のために、Sambaなどのプロジェクトによって使用されるTDBデータベースのクラスタ実装」として説明されています。
各クラスタノードは、ローカルCTDBデーモンを実行します。Sambaは、そのTDBに直接書き込むのではなく、そのローカルCTDBデーモンと通信します。それらのデーモンは、ネットワークを介してメタデータを交換しますが、実際の読み取り/書き込み操作は、高速ストレージでローカルコピー上で行われます。CTDBの概念は、図23.1「CTDBクラスタの構造」に表示されています。
CTDBリソースエージェントの現在の実装では、Sambaの管理のためだけにCTDBを設定します。他の機能(IPフェールオーバーなど)はすべて、Pacemakerで設定する必要があります。
CTDBは、完全に同種のクラスタに関してのみサポートされます。たとえば、クラスタのすべてのノードが同じアーキテクチャを持つ必要があります。x86とAMD64を混合することはできません。
クラスタ対応Sambaサーバは、一定のデータを共有する必要があります。
UnixのユーザとグループIDをWindowsのユーザとグループに関連付けるマッピングテーブル。
ユーザデータベースをすべてのノード間で同期する必要があります。
Windowsドメイン内のメンバーサーバの参加情報をすべてのノードで利用できる必要があります。
メタデータをすべてのノードで利用できる必要があります(アクティブSMBセッション、共有接続、各ロックなど)。
クラスタ対応SambaサーバがN+1ノードを持っている場合、Nノードだけのサーバより高速になることを目的としています。1つのノードは、クラスタ非対応のSambaサーバより遅くなることはありません。
23.2 基本的な設定 #
CTDBリソースエージェントは、自動的に/etc/sysconfig/ctdb
を変更します。crm ra
info CTDB
を使用して、CTDBリソースに指定できるすべてのパラメータを一覧表示してください。
クラスタ対応Sambaサーバをセットアップするには、次の手順に従います。
クラスタを準備します。
次のパッケージがインストールされていることを確認してから進んでください: ctdb, tdb-tools、および samba (
smb
およびnmb
リソースに必要)。このガイドのパートII「設定および管理」で説明されているように、クラスタ(Pacemaker、OCFS2)を設定します。
OCFS2などの共有ファイルシステムを設定し、マウントします(たとえば、
/srv/clusterfs
にマウント)。詳細については、第18章 「OCFS2」を参照してください。POSIX ACLをオンにする場合は、それを有効にします。
新しいOCFS2ファイルシステムの場合は、次のコマンドを使用します。
root #
mkfs.ocfs2
--fs-features=xattr ...既存のOCFS2ファイルシステムの場合は、次のコマンドを使用します。
root #
tunefs.ocfs2
--fs-feature=xattr DEVICEファイルシステムリソースには、必ず、
acl
オプションを指定します。次のように、crm
シェルを使用します。crm(live)configure#
primitive
ocfs2-3 ocf:heartbeat:Filesystem params options="acl" ...
ctdb
、smb
、nmb
の各サービスが無効になるようにします。root #
systemctl
disable ctdbroot #
systemctl
disable smbroot #
systemctl
disable 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 #
crm
configurecrm(live)configure#
primitive
ctdb ocf:heartbeat: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#
primitive
nmb systemd:nmb \ op start timeout="60" interval="0" \ op stop timeout="60" interval="0" \ op monitor interval="60" timeout="60"crm(live)configure#
primitive
smb systemd:smb \ op start timeout="60" interval="0" \ op stop timeout="60" interval="0" \ op monitor interval="60" timeout="60"crm(live)configure#
group
g-ctdb ctdb nmb smbcrm(live)configure#
clone
cl-ctdb g-ctdb meta interleave="true"crm(live)configure#
colocation
col-ctdb-with-clusterfs Mandatory: cl-ctdb cl-clusterfscrm(live)configure#
order
o-clusterfs-then-ctdb Mandatory: cl-clusterfs cl-ctdbcrm(live)configure#
commit
クラスタ対応のIPアドレスを追加します。
crm(live)configure#
primitive
ip ocf:heartbeat:IPaddr2 params ip=192.168.2.222 \ unique_clone_address="true" \ op monitor interval="60" \ meta resource-stickiness="0"crm(live)configure#
clone
cl-ip ip \ meta interleave="true" clone-node-max="2" globally-unique="true"crm(live)configure#
colocation
col-ip-with-ctdb 0: cl-ip cl-ctdbcrm(live)configure#
order
o-ip-then-ctdb 0: cl-ip cl-ctdbcrm(live)configure#
commit
unique_clone_address
がtrue
に設定されている場合、IPaddr2リソースエージェントはクローンIDを指定のアドレスに追加し、3つの異なるIPアドレスを設定します。これらは通常必要とされませんが、負荷分散に役立ちます。この項目の詳細については、14.2項 「Linux仮想サーバによる負荷分散の設定」を参照してください。変更をコミットします。
crm(live)configure#
commit
結果を確認します。
root #
crm
status 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
23.3 Active Directoryドメインへの追加 #
Active Directory (AD)は、Windowsサーバシステムのディレクトリサービスです。
次の手順は、CTDBクラスタをActive Directoryドメインに追加する方法を概説しています。
手順23.1「クラスタ対応Sambaサーバの基本セットアップ」の説明に従って、CTDBリソースを作成します。
次のようにして samba-winbind パッケージで利用できます。
winbind
サービスを無効にします。root #
systemctl
disable winbindwinbindクラスタリソースを定義します。
root #
crm
configurecrm(live)configure#
primitive
winbind systemd:winbind \ op start timeout="60" interval="0" \ op stop timeout="60" interval="0" \ op monitor interval="60" timeout="60"crm(live)configure#
commit
g-ctdb
グループを編集して、nmb
とsmb
リソースの間にwinbind
を挿入します。crm(live)configure#
edit
g-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を実行し、
エントリから モジュールを開きます。ドメインまたはワークグループの設定を入力して、
をクリックして終了します。
23.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_pong
ping_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テーブルの更新のみが必要であるのかをテストします。詳細については、http://wiki.wireshark.org/Gratuitous_ARPを参照してください。
クラスタファイルシステムの特定の側面をテストするには、次の手順に従います。
1つのノードで
ping_pong
コマンドを開始します。プレースホルダNはノード数+1で置き換えます。共有ストレージではABSPATH/data.txt
ファイルが使用可能で、すべてのノード上でアクセスできます(ABSPATHは絶対パスを示しています)。ping_pong
ABSPATH/data.txt N1つのノードでだけ実行しているので、ロッキングレートは非常に高いと予想してください。プログラムがロッキングレートを出力しない場合は、クラスタファイルシステムを置き換えます。
同じパラメータを使用して、別のノードで
ping_pong
の2つ目のコピーを開始します。ロッキングレートが大幅に下がることを予想できます。使用しているクラスタファイルシステムに次のどれかが当てはまる場合は、クラスタファイルシステムを置き換えます。
ping_pong
がロッキングレート(秒単位)を出力しない。2つのインスタンスのロッキングレートがほぼ同じではない。
2つ目のインスタンスの開始後にロッキングレートが下がらなかった。
ping_pong
の3つ目のコピーを開始します。もう1つノードを追加し、ロッキングレートの変化に注目します。ping_pong
コマンドを1つずつ終了させます。単一ノードの状態に戻るまで、ロッキングレートの増加が観察されるはずです。予想したような振る舞いが見られなかった場合には、第18章 「OCFS2」に記されている詳細を参照してください。