今回も引き続きStashの高可用性(HA)クラスタを組むべく進めていきたいと思います。
回 ATLASSIAN STASHの耐障害性を高めよう その2 HAセットアップ編はHAクラスタをくんだものの、
IPアドレスの設定のみで終わってしまい、全くStashの可用性が高まらないまま終わってしまいました。
このままでは表題に偽りありと言われても反論出来ないので、今回こそは、Stashの可用性を高めていきたいと思います。
前回は、ノードが切り替わる際にIPアドレスが自動的にアクティブノードに付与されるように設定を行いました。
ただ、アクティブノードにIPアドレスが付与されるだけでは、Stashにアクセス出来ません。
というわけで今回は、ノードの切り替わり時に自動的にStashが起動する様にします。
前提条件
- 前回までの設定が終わっている
- Stashが各ノードにインストール済み&初期設定済み
- Stashの自動起動がOFFになっている
- StashのデータベースはStash以外のサーバーのものを使っている
ここまでの設定が終わっている前提で進めていきます。
Stashはインストーラーを利用しても、tar.gzを利用しても問題ありません。
なお、今回のStashはインストーラーを利用してセットアップしました。
リソース制御スクリプトの追加
今回クラスタの制御に使用しているPacemakerは、一般的なクラスタリソースの制御スクリプトが最初から用意されています。
また、クラスタリソース制御スクリプトが用意されていない場合、
Pacemakerの指定する形式に沿った自作のスクリプトを所定のディレクトリに配置すると、制御対象のクラスタリソースを追加することが出来ます。
Atlassian Stashも残念ながらPacemakerにスクリプトを用意されるほどにはメジャーになっていないようなので、自作のスクリプトを配置する必要があります。
このスクリプトを一から自作するとなかなか大変なのですが、Atlassian社がサンプルで用意しているリソース制御スクリプトがあるので、今回はそれを拝借します。
CentOS 7.1 + Pacemaker 1.1 の構成では
/usr/lib/ocf/resource.d/ 以下に
自作スクリプトを配置することによりクラスタリソースが追加されます。
ということで、このファイルを各ノードの /usr/lib/ocf/resource.d/heartbeat に配置します。
cd /usr/lib/ocf/resource.d/heartbeat curl -o stash https://bitbucket.org/atlassian/stash-ha-example/raw/1397712da2b11ab4894c91446009aacae94fcf3d/vagrant/scripts/heartbeat-stash chmod 755 /usr/lib/ocf/resource.d/heartbeat/stash
リソースが定義されているかの確認をします。
pcs resource list コマンドの結果に
ocf:heartbeat:stash が含まれていればOKです。
# pcs resource list --中略-- ocf:heartbeat:slapd - Manages a Stand-alone LDAP Daemon (slapd) instance ocf:heartbeat:stash - Manages a Stash instance ocf:heartbeat:symlink - Manages a symbolic link ocf:heartbeat:tomcat - Manages a Tomcat servlet environment instance --以下略--
Stashリソースの定義
リソースを定義する準備が整いましたので、クラスタにリソースを追加します。 下記コマンドを実行して、stashのリソースを定義します。
pcs resource create stash_res ocf:heartbeat:stash params stash_user=atlstash stash_home=/var/atlassian/application-data/stash stash_inst=/opt/atlassian/stash/3.11.3 op monitor interval=15s op start timeout=240s
次にstashが単一のノードでしか起動しないように設定します。
pcs resource meta stash_res migration-threshold=1
最後に、stashのプロセスと、VIPが同時に同じノードで起動するように設定します。
pcs constraint colocation add stash_vip with stash_res INFINITY
リソースを定義した後、クラスタの状態を確認しこのようにstashvipとstashresが同じノード上でStartedになっていればOKです。
# pcs status Cluster name: stash Last updated: Sun Sep 20 10:07:15 2015 Last change: Sun Sep 20 09:32:39 2015 by root via cibadmin on node01 Stack: corosync Current DC: node02 (version 1.1.13-a14efad) - partition with quorum 2 nodes and 2 resources configured Online: [ node01 node02 ] Full list of resources: stash_vip (ocf::heartbeat:IPaddr2): Started node01 stash_res (ocf::heartbeat:stash): Started node01 PCSD Status: node01: Online node02: Online Daemon Status: corosync: active/disabled pacemaker: active/disabled pcsd: active/enabled
ノード切り替えの確認
それでは、設定が出来たのでノード障害時に自動的に切り替わるか確認したいと思います。
まず現状を確認します。
諸事情で、node02がアクティブになっています。
# pcs status Cluster name: stash Last updated: Sun Sep 20 11:03:59 2015 Last change: Sun Sep 20 09:32:39 2015 by root via cibadmin on node01 Stack: corosync Current DC: node02 (version 1.1.13-a14efad) - partition with quorum 2 nodes and 2 resources configured Online: [ node01 node02 ] Full list of resources: stash_vip (ocf::heartbeat:IPaddr2): Started node02 stash_res (ocf::heartbeat:stash): Started node02 PCSD Status: node01: Online node02: Online Daemon Status: corosync: active/enabled pacemaker: active/enabled pcsd: active/enabled
では、ここでnode02の電源をOFFします。
# pcs status Cluster name: stash Last updated: Sun Sep 20 11:08:36 2015 Last change: Sun Sep 20 09:32:39 2015 by root via cibadmin on node01 Stack: corosync Current DC: node01 (version 1.1.13-a14efad) - partition with quorum 2 nodes and 2 resources configured Online: [ node01 ] OFFLINE: [ node02 ] Full list of resources: stash_vip (ocf::heartbeat:IPaddr2): Started node01 stash_res (ocf::heartbeat:stash): Started node01 PCSD Status: node01: Online node02: Offline Daemon Status: corosync: active/disabled pacemaker: active/disabled pcsd: active/enabled
しばらく後にクラスタの状態を確認したところ無事にnode01に切り替わっていることが確認出来ました。
さいごに
今回で、ようやくStashが切り替わる様になりました。これで可用性が高まって枕を高くして眠れるかと思いましたが、実はまだ設定が足りませんでした。
実は、Stashはハードディスク上にもデータを保存しているのです。
というわけで次回はディスクを冗長化して、こんどこそ真のStashの耐障害性向上を成し遂げたいと思います。