Atlassian Stashの耐障害性を高めよう その2 HAセットアップ編

今回は 前回 「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
passwd hacluster

これも両ノードで実行します。

クラスタノードの認証

クラスタノード間の認証設定をします。

1
pcs cluster auth node01 node02 -u hacluster -p hacluster

クラスタの作成

クラスタを作成します

1
pcs cluster setup --start --name stash node01 node02

クラスタ状態の確認

作成したクラスタの状況を確認します。

1
pcs cluster status

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でクラスタを起動します。

1
pcs cluster start

正常に 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

アクティブノードの手動切替

最後に、アクティブノードを切り替えます。
片系ずつ切り替えながらメンテナンスする際に威力を発揮しそうです。

アクティブノードをスタンバイ状態にし、強制的にきりかえます。
アクティブノード上で下記のコマンドを実行します。

1
pcs cluster standby

正常にノードが切り替わり、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
pcs cluster unstandby

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設定までが非常に丁寧にステップバイステップで解説されています。
最終的には、このエントリもほぼ似たような感じになってしまいました。