クラスタソフトウェアを設定して、各クラスタノードをクラスタのメンバーとして登録する必要があります。この環境設定の一環として、クラスタの整合性を確保するために、フェンシングとShoot The Other Node In The Head (STONITH)リソースを設定することもできます。
重要:このセクションで説明する手順には、rcopenaisおよびopenaisコマンド(SLES 11 SP4でのみ動作)を使用します。SLES 12 SP2以降の場合は、systemctl pacemaker.serviceコマンドを使用してください。
たとえば、/etc/rc.d/openais startコマンドについては、systemctl start pacemaker.serviceコマンドを使用します。
次の手順でクラスタの設定を行います。
このソリューションでは、内部クラスタ通信にプライベートIPアドレスを使用し、ネットワーク管理者に対するマルチキャストアドレスの要求が最小限で済むようにユニキャストを使用する必要があります。また、共有ストレージをホストしているのと同じSLES仮想マシンで、iSCSIターゲットをフェンシングのためのSBDデバイスとして機能するように設定して使用する必要もあります。
SBDのセットアップ
storage03に接続して、コンソールセッションを開始します。次のコマンドを実行して、希望する任意のサイズのブランクファイルを作成します。
dd if=/dev/zero of=/sbd count=<file size> bs=<bit size>
たとえば、次のコマンドを実行して、/dev/zero疑似デバイスからコピーしたゼロで埋めた1MBのファイルを作成します。
dd if=/dev/zero of=/sbd count=1024 bs=1024
コマンドラインまたはグラフィカルユーザインタフェースからYaSTを実行します: /sbin/yast
[ネットワークサービス]、[iSCSI ターゲット]の順に選択します。
[ターゲット]をクリックして、既存のターゲットを選択します。
[編集]を選択します。UIに使用可能なLUN(ドライブ)のリストが表示されます。
[追加]を選択して、新しいLUNを追加します。
LUN番号は2のままにしておきます。[パス]ダイアログを参照して、作成した/sbdファイルを選択します。
その他のオプションはデフォルトのままにしておき、[OK]を選択してから[次]を選択し、もう一度[次]をクリックしてデフォルト認証オプションを選択します。
[完了]をクリックして、設定を終了します。必要に応じてサービスを再起動します。YaSTを終了します。
メモ:以下のステップでは、各クラスタノードが他のすべてのクラスタノードのホスト名を解決できなければなりません(それができないと、ファイル同期サービスcsync2が失敗します)。DNSがセットアップされていないまたは使用できない場合は、各ホストのエントリを/etc/hostsファイルに追加します。このファイルには、hostnameコマンドを実行して返されるような各IPアドレスとそのホスト名がリストされています。また、ループバックIPアドレスにホスト名を割り当てることのないようにします。
次の手順を行うことにより、IPアドレス 10.0.0.3 (storage03)のサーバのSBDデバイスのiSCSI Targetが公開されます。
ノードの設定
クラスタノード(node01)に接続して、コンソールを開きます:
YaSTを実行します。
[ネットワークサービス]、[iSCSIイニシエータ]の順に開きます。
[Connected Targets(接続済みターゲット)]を選択してから、上記の手順で設定したiSCSI Targetを選択します。
[ログアウト]オプションを選択して、Targetをログアウトします。
[Discovered Targets(検出したターゲット)]タブに切り替えて、[Target(ターゲット)]を選択し、もう一度ログインし直して、デバイスのリストを更新します(自動起動オプションはそのままにし、[No Authentication(認証なし)]の選択は解除します)。
[OK]を選択して、iSCSIイニシエータツールを終了します。
[システム]、[Partitioner(パーティショナ)]の順に開いて、SBDデバイスを1MB IET-VIRTUAL-DISKとして特定します。このデバイスは/dev/sddまたは同様の形式でリストされます。どちらかを確認します。
YaSTを終了します。
コマンドls -l /dev/disk/by-id/を実行して、上記の手順で特定したデバイス名にリンクされているデバイスIDを確認します。
(条件による)次のコマンドのいずれかを実行します。
SLES 11 SP4を使用する場合:
sleha-init
SLES 12 SP1以降を使用する場合:
ha-cluster-init
バインド先のネットワークアドレスの入力を要求されたら、外部NIC IPアドレス(172.16.0.1)を指定します。
デフォルトのマルチキャストアドレスおよびポートを受け入れます。この設定は後で上書きします。
SBDの有効化に「y」と入力してから、/dev/disk/by-id/<device id>を指定します。<device id>は上記の手順で特定したIDです(Tabキーを使ってパスを自動補完することができます)。
(条件による)次のプロンプトが表示されたら、Nを入力します。
Do you wish to configure an administration IP? [y/N]
管理IPアドレスを設定するには、「リソースの環境設定」の際に仮想IPアドレスを指定します。
ウィザードを最後まで進めて、エラーの報告がないことを確認します。
YaSTを起動します。
[High Availability(高可用性)]、[Cluster(クラスタ)]の順に選択します(一部のシステムでは[Cluster(クラスタ)]を選択するだけです)。
左のボックスで、[Communication Channels(通信チャネル)]が選択されていることを確認します。
設定の最上部行に移動し、udpの選択をudpuに変更します(これで、マルチキャストを無効にし、ユニキャストを選択します)。
[Add a Member Address(メンバアドレスを追加)]を選択して、このノード(172.16.0.1)を指定してから、この手順を繰り返して他のクラスタノード(172.16.0.2)を追加します。
[完了]をクリックして設定を完了します。
YaSTを終了します。
コマンドの/etc/rc.d/openais restartを実行して、新しい同期プロトコルでクラスタサービスを再起動します。
各追加クラスタノード(node02)に接続して、コンソールを開きます:
YaSTを実行します。
[ネットワークサービス]、[iSCSIイニシエータ]の順に開きます。
[Connected Targets(接続済みターゲット)]を選択してから、上記の手順で設定したiSCSI Targetを選択します。
[ログアウト]オプションを選択して、Targetをログアウトします。
[Discovered Targets(検出したターゲット)]タブに切り替えて、[Target(ターゲット)]を選択し、もう一度ログインし直して、デバイスのリストを更新します(自動起動オプションはそのままにし、[No Authentication(認証なし)]の選択は解除します)。
[OK]を選択して、iSCSIイニシエータツールを終了します。
(条件による)次のコマンドのいずれかを実行します。
SLES 11 SP4を使用する場合:
sleha-join
SLES 12 SP1以降を使用する場合:
ha-cluster-join
最初のクラスタノードのIPアドレスを入力します。
(条件による)クラスタが正常に起動しない場合は、次の手順を実行します。
crm statusコマンドを実行して、ノードが結合されているかどうかを確認します。ノードが結合されていない場合、クラスタ内のすべてのノードを再起動します。
/etc/corosync/corosync.confファイルをnode01からnode02に手動でコピーするか、node01でcsync2 -x -vを実行するか、またはYaSTを使用してnode02上にクラスタを手動で設定します。
(条件による)手順1で実行したcsync2 -x -vコマンドですべてのファイルを同期できない場合、次の手順を実行します。
すべてのノードで、/var/lib/csync2ディレクトリのcsync2データベースをクリアします。
次のように、すべてのノード上でcsync2データベースがファイルシステムと一致するよう更新しますが、他のサーバとの同期が必要というマークは何にも付けません。
csync2 -cIr /
アクティブなノードで、次の手順に従います。
アクティブノードとパッシブノード間のすべての相違点を探し、それらの違いに同期のマークを付けます。
csync2 -TUXI
アクティブノードが衝突を強制的に上書きするため、データベースをリセットします。
csync2 -fr /
その他のすべてのノードで同期を開始します。
csync2 -xr /
すべてのノードで、すべてのファイルが同期されていることを検証します。
csync2 -T
このコマンドは、同期されていないファイルのみをリストします。
node02上で次のコマンドを実行します。
Sles 11 SP4の場合:
/etc/rc.d/openais start
SLES 12 SP1以降の場合:
systemctl start pacemaker.service
(条件による) xinetdサービスが新しいcsync2サービスを正しく追加しないと、スクリプトは正常に機能しません。もう一方のノードがクラスタ設定ファイルをこのノードに同期できるようにするためには、xinetdサービスが必須です。csync2 run failedのようなエラーが表示されるときは、この問題である可能性があります。
この問題を解決するには、kill -HUP `cat /var/run/xinetd.init.pidコマンドを実行してから、sleha-joinスクリプトを再実行します。
各クラスタノードでcrm_monを実行して、クラスタが正常に稼働しているかどうかを確認します。「hawk」というWebコンソールを使用して、クラスタを確認することもできます。デフォルトのログイン名はhaclusterで、パスワードはlinuxです。
(条件による)環境に応じて、次のタスクを実行してさらにパラメータを変更します。
2ノードクラスタの環境で起きた1つのノードの障害がクラスタ全体を予期せず停止させないように、グローバルクラスタオプションno-quorum-policyをignoreに設定します。
crm configure property no-quorum-policy=ignore
メモ:クラスタに3つ以上のノードがある場合は、このオプションを設定しないでください。
所定の場所でのリソースの実行およびリソースの移動がリソースマネージャで許可されるようにするには、グローバルクラスタオプションdefault-resource-stickinessを「1」に設定します。
crm configure property default-resource-stickiness=1