今回は 前回 「Atlassian Stashの耐障害性を高めよう その1 プランニング編」 の続きとして、
HAクラスタのセットアップを行いたいと思います。
手順はredhat向けのHIGH AVAILABILITY ADD-ON リファレンス を参考に行っていきます
今回の構成
今回は、LinuxのHAクラスタミドルウェアの定番であるPacemakerを使用してクラスタを構成します。
ソフトウェア |
バージョン |
CentOS |
7.1 |
Pacemaker |
1.1.12 |
Corosync |
2.3.4 |
pcs |
0.9.137 |
ノード設定
|ホスト名|IP|備考|
|—|—|—|
|node01|192,168.33.21|Stash node #1|
|node02|192,168.33.22|Stash node #2|
|stash|192,168.33.101|Stash VIP|
事前準備
クラスタ構成の際にお互いのノード名を解決出来ないとイケないので、 /etc/hosts にホストを追加しておきます。
/etc/hosts
1 2
| 192.168.33.21 node01 192.168.33.22 node02
|
次にクラスタの通信に使用するポートを開放します
1 2
| firewall-cmd --permanent --add-service=high-availability firewall-cmd --add-service=high-availability
|
ソフトウェアのインストール
それでは、必要なソフトウェアをインストールしていきます。
1
| # yum install pcs fence-agents-all
|
コマンドを両方のノードで実行します。
これだけでHAクラスタに必要なソフト一式がインストールされます。
インストールが無事完了したら、クラスタの構成を行うコマンドのデーモンである pcsd を起動します。
また、再起動時に自動的に起動するように設定します。
1 2
| systemctl start pcsd systemctl enable pcsd
|
クラスタの構築
次に、node01,node02をメンバーとして、HAクラスタを構築します。
hacluster ユーザーのパスワードを設定
ここでは、マニュアルの推奨に従って、両ノードともに同じパスワードを設定します。
これも両ノードで実行します。
クラスタノードの認証
クラスタノード間の認証設定をします。
1
| pcs cluster auth node01 node02 -u hacluster -p hacluster
|
クラスタの作成
クラスタを作成します
1
| pcs cluster setup --start --name stash node01 node02
|
クラスタ状態の確認
作成したクラスタの状況を確認します。
1 2 3 4 5 6 7 8 9 10
| Cluster Status: Last updated: Mon Sep 14 09:46:54 2015 Last change: Mon Sep 14 09:42:40 2015 by hacluster via crmd on node02 Stack: corosync Current DC: node02 (version 1.1.13-a14efad) - partition with quorum 2 nodes and 0 resources configured Online: [ node01 node02 ] PCSD Status: node01: Online node02: Online
|
両ノードがOnlineとなっていればOKです。
STONITH の無効化
ここで、/var/log/messages を確認すると。
1 2 3 4 5 6
| Sep 14 11:16:14 localhost pengine[4158]: error: Resource start-up disabled since no STONITH resources have been defined Sep 14 11:16:14 localhost pengine[4158]: error: Either configure some or disable STONITH with the ston ith-enabled option Sep 14 11:16:14 localhost pengine[4158]: error: NOTE: Clusters with shared data need STONITH to ensure data integrity
|
といったエラーが発生しています。
このページによると
STONITHと呼ばれるノードが不安定になった場合、自動的に再起動を行う機能を実現するためのリソースが無いためエラーとなってしまっているようです。
現時点ではSTONITHを使用しないため、
1
| pcs property set stonith-enabled=false
|
を実行し、機能を無効化します。
リソースの作成
クラスタの設定が終わったところで、次にリソースを設定します。
クラスタでのリソースとは特にクラスタノード間で共有するリソースのことを指します。例えばアクティブノードが使用する仮想IPなどです。
今回は、ユーザーがアクセスする際に指定する、サービス用の仮想IPをリソースとして追加します。
どちらかのノードでコマンドを実行します。
1
| pcs resource create stash_vip IPaddr2 ip=192.168.33.101 cidr_netmask=24 op monitor interval=6s
|
これで、6秒ごとに死活確認を行うIPアドレスの共有リソースが設定されました。
アクティブノードに 192.168.33.101 のIPエイリアスが設定される様になります。
ノード切り替えのテスト
サービス用の仮想IPが割り当てられることが確認出来ました。
アクティブノードの障害
アクティブノードの障害時に正常に切り替わるか確認してみましょう。
Active : node01
Standby: node02
の状態で、node01の電源をOFFしてみます。
実施前
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| # pcs status Cluster name: stash Last updated: Mon Sep 14 12:14:31 2015 Last change: Mon Sep 14 11:51:35 2015 by root via crm_attribute on node02 Stack: corosync Current DC: node02 (version 1.1.13-a14efad) - partition with quorum 2 nodes and 1 resource configured Online: [ node01 node02 ] Full list of resources: stash_vip (ocf::heartbeat:IPaddr2): Started node01 PCSD Status: node01: Online node02: Online Daemon Status: corosync: active/disabled pacemaker: active/disabled pcsd: active/enabled
|
2ノードともオンラインで、stash_vip は node01に割り当てられています。
ここで node01 の電源をOFFにします
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| # pcs status Cluster name: stash Last updated: Mon Sep 14 12:18:31 2015 Last change: Mon Sep 14 11:51:35 2015 by root via crm_attribute on node02 Stack: corosync Current DC: node02 (version 1.1.13-a14efad) - partition with quorum 2 nodes and 1 resource configured Online: [ node02 ] OFFLINE: [ node01 ] Full list of resources: stash_vip (ocf::heartbeat:IPaddr2): Started node02 PCSD Status: node01: Offline node02: Online Daemon Status: corosync: active/enabled pacemaker: active/enabled pcsd: active/enabled
|
正常に node02 にIPが切り替わりました。
この間pingを192.168.33.101宛に行っていましたが、途切れる事なくノードが切り替わりました。
スタンバイノードの追加
では、次に稼働中のクラスタに、node01を追加します。
node01を起動し、node01でクラスタを起動します。
正常に node01がクラスタに参加しました、ただアクティブノードはnode02のままです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| pcs status Cluster name: stash Last updated: Mon Sep 14 12:24:38 2015 Last change: Mon Sep 14 11:51:35 2015 by root via crm_attribute on node02 Stack: corosync Current DC: node02 (version 1.1.13-a14efad) - partition with quorum 2 nodes and 1 resource configured Online: [ node01 node02 ] Full list of resources: stash_vip (ocf::heartbeat:IPaddr2): Started node02 PCSD Status: node01: Online node02: Online Daemon Status: corosync: active/disabled pacemaker: active/disabled pcsd: active/enabled
|
アクティブノードの手動切替
最後に、アクティブノードを切り替えます。
片系ずつ切り替えながらメンテナンスする際に威力を発揮しそうです。
アクティブノードをスタンバイ状態にし、強制的にきりかえます。
アクティブノード上で下記のコマンドを実行します。
正常にノードが切り替わり、node01がアクティブになりました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| pcs status Cluster name: stash Last updated: Mon Sep 14 12:44:33 2015 Last change: Mon Sep 14 12:44:24 2015 by root via crm_attribute on node02 Stack: corosync Current DC: node02 (version 1.1.13-a14efad) - partition with quorum 2 nodes and 1 resource configured Node node02: standby Online: [ node01 ] Full list of resources: stash_vip (ocf::heartbeat:IPaddr2): Started node01 PCSD Status: node01: Online node02: Online Daemon Status: corosync: active/disabled pacemaker: active/disabled pcsd: active/enabled
|
ただ、このままですと node01に障害が発生した場合でもnode02に切り替わらないので、node02のスタンバイ状態を解除します。
スタンバイ状態のノードで以下のコマンドを実行します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| pcs status Cluster name: stash Last updated: Mon Sep 14 12:46:29 2015 Last change: Mon Sep 14 12:46:27 2015 by root via crm_attribute on node02 Stack: corosync Current DC: node02 (version 1.1.13-a14efad) - partition with quorum 2 nodes and 1 resource configured Online: [ node01 node02 ] Full list of resources: stash_vip (ocf::heartbeat:IPaddr2): Started node01 PCSD Status: node01: Online node02: Online Daemon Status: corosync: active/disabled pacemaker: active/disabled pcsd: active/enabled
|
node02がアクティブになりました。
今回はここまで
これでひと通りのクラスタ切り替えの動作の確認が出来ました。
しかしながら、IPの切り替えだけではStashの冗長化は出来ません。
次回は、ストレージの冗長化を設定しStashの冗長化を完成させたいと思います。
参考資料:
RED HAT ENTERPRISE LINUX 7 向け HIGH AVAILABILITY ADD-ON のリファレンスドキュメント
リファレンスなので、ひと通り情報は乗っているが、ステップバイステップで構築の手順となっていなく、コマンド例ももう一声ほしいところ。
総じて、読み解くのに読者の頑張りが必要なドキュメント。。。
CentOS7.1でPacemaker+corosyncによるクラスタを構成する(Part.1)
CentOS7 + Pacemaker でのクラスタ構築からVIP設定までが非常に丁寧にステップバイステップで解説されています。
最終的には、このエントリもほぼ似たような感じになってしまいました。