今回も引き続き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の耐障害性向上を成し遂げたいと思います。