今回は 前回 「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
192.168.33.21 node01 192.168.33.22 node02
次にクラスタの通信に使用するポートを開放します
# firewall-cmd --permanent --add-service=high-availability # firewall-cmd --add-service=high-availability
ソフトウェアのインストール
それでは、必要なソフトウェアをインストールしていきます。
# yum install pcs fence-agents-all
コマンドを両方のノードで実行します。
これだけでHAクラスタに必要なソフト一式がインストールされます。
インストールが無事完了したら、クラスタの構成を行うコマンドのデーモンである pcsd を起動します。
また、再起動時に自動的に起動するように設定します。
# systemctl start pcsd # systemctl enable pcsd
クラスタの構築
次に、node01,node02をメンバーとして、HAクラスタを構築します。
hacluster ユーザーのパスワードを設定
ここでは、マニュアルの推奨に従って、両ノードともに同じパスワードを設定します。
# passwd hacluster
これも両ノードで実行します。
クラスタノードの認証
クラスタノード間の認証設定をします。
# pcs cluster auth node01 node02 -u hacluster -p hacluster
クラスタの作成
クラスタを作成します
pcs cluster setup --start --name stash node01 node02
クラスタ状態の確認
作成したクラスタの状況を確認します。
# pcs cluster status
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 を確認すると。
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といったエラーが発生しています。
この[ページ][0]によると STONITHと呼ばれるノードが不安定になった場合、自動的に再起動を行う機能が有効になっているものの、その機能を実現するためのリソースが無いためエラーとなってしまっているようです。 現時点ではSTONITHを使用しないため、
pcs property set stonith-enabled=false
を実行し、機能を無効化します。
リソースの作成
クラスタの設定が終わったところで、次にリソースを設定します。
クラスタでのリソースとは、特にクラスタノード間で共有するリソースのことを指します。
例えばアクティブノードが使用する仮想IPなどです。
今回は、ユーザーがアクセスする際に指定する、サービス用の仮想IPをリソースとして追加します。
どちらかのノードでコマンドを実行します。
# 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してみます。
実施前
# 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にします
# 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宛に行っていましたが、今回はpingが途切れる事なくノードが切り替わりました。
スタンバイノードの追加
では、次に稼働中のクラスタに、node01を追加します。
node01を起動し、node01でクラスタを起動します。
# pcs cluster start
正常に node01がクラスタに参加しました、ただアクティブノードはnode02のままです。
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
アクティブノードの手動切替
最後に、アクティブノードを切り替えます。
片系ずつ切り替えながらメンテナンスする際に威力を発揮しそうです。
アクティブノードをスタンバイ状態にし、強制的にきりかえます。
アクティブノード上で下記のコマンドを実行します。
# pcs cluster standby正常にノードが切り替わり、node01がアクティブになりました。
# 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のスタンバイ状態を解除します。
スタンバイ状態のノードで以下のコマンドを実行します。
# pcs cluster unstandby
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設定までが非常に丁寧にステップバイステップで解説されています。 最終的には、このエントリもほぼ似たような感じになってしまいました。