High Availableな環境構築
これまでStackStormの使い方や機能拡張の方法など、開発寄りの内容について解説してきましたが、ここからはStackStormの運用のポイントについて解説します。
本稿の冒頭でStackStormがScalableでHigh Availableなアーキテクチャであることを説明しました。ここでは、冗長構成なStackStormにおける運用に焦点を移して解説します。
冗長構成なStackStormの構築
まずは冗長構成なStackStormを構築します。
StackStormのドキュメントに、以下の構成での構築方法が解説されていますが、ここでは簡単のために別の方法を紹介します。
StackStorm HA reference deployment
(出典:『High availability deployment | StackStorm 2.0.1 documentation』)
ここでは、最初に構築したノード(プライマリノード)に加えて、もう一台のノード(セカンダリノード)を追加することで、冗長なStackStorm環境を構築します。最終的に、以下のような環境を構築します(なお以降ではMistralを利用しないためPostgreSQLについての設定は省略します)。
上記の構成でStackStormの各サービスは冗長化しますが「プライマリノードが単一障害点になるじゃないか!」と思う鋭い読者もいるかもしれません。
確かに現状はそのとおりですが、MongoDBのレプリケーションやRabbitMQのクラスタ設定を利用することで、完全に単一障害点をなくす構成のStackStorm環境を構築することもできます(本章の最後で単一障害点をなくしたDMM.comラボにおける構成を紹介します)。ただ、これらの内容については本稿の趣旨を超えるためここでは割愛します。ただしRabbitMQのクラスタ設定については、StackStormにおけるRabbitMQのクラスタ指定の説明の都合上、簡単に解説します。
プライマリノードの設定変更
冗長構成の環境を構築する上で、プライマリノードに対して、セカンダリノードからMongoDBへアクセスを許可する設定、およびRabbitMQのクラスタ設定、さらにNFSの設定を行います。それぞれの設定方法について順に解説します。
MongoDBの設定
まずMongoDBにセカンダリノードからアクセスできるよう設定ファイル(/etc/mongodb.conf)ファイルを以下のとおり修正し、サービスを再起動させます。
--- etc/mongod.conf.orig 2016-11-28 07:18:22.490265432 +0000 +++ /etc/mongod.conf 2016-11-28 07:18:44.938264718 +0000 @@ -21,7 +21,7 @@ # network interfaces net: port: 27017 - bindIp: 127.0.0.1 + bindIp: 192.168.0.100 #processManagement:
vagrant@st2-node:~$ sudo service mongod restart
RabbitMQの設定
続いてRabbitMQのクラスタ環境を構築するために、ノード間で共通の[Erlang Cookie]を設定します。Erlang CookieはRabbitMQの実装言語Erlangの言語機能で、複数ノード間での相互接続を許可するためのセキュリティ機構です。Cookieを指定した場合、Erlangインタプリタは同一の設定値を持つノード同士でのみ接続することができます。
ここでは、以下のとおりRabbitMQのErlang Cookieを再設定し、RabbitMQを再起動させます。
vagrant@st2-node:~$ sudo service rabbitmq-server stop vagrant@st2-node:~$ sudo bash -c 'echo stackstorm-mq-cluster > /var/lib/rabbitmq/.erlang.cookie' vagrant@st2-node:~$ sudo service rabbitmq-server start
また、お互いのノードでホスト名の名前解決ができるよう/etc/hostsに以下の2行を追加します。2行目はこのあと構築するセカンダリノードの設定値になります。
vagrant@st2-node:~$ sudo bash -c 'cat <<EOS >> /etc/hosts 192.168.0.100 st2-node 192.168.0.101 st2-secondary EOS '
クラスタ設定の方法については、セカンダリノードを構築する際に解説します。
NFSの設定
StackStormで冗長構成を組む場合、StackStormが参照するコンテンツディレクトリ(/opt/stackstorm/ディレクトリ配下のpacksとvirtualenvsの2つ)をノード間で共有させる必要があります。ここではプライマリノードにNFSサーバを構築し、セカンダリノードからコンテンツディレクトリがマウントできるようにします。
まずはNFSサーバをパッケージからインストールします。
vagrant@st2-node:~$ sudo apt-get install nfs-kernel-server
続いて、設定ファイル/etc/exportsにセカンダリノードに対して公開するディレクトリを指定します。以下に、追加した設定を示します。
--- etc/exports.orig 2016-11-28 07:44:03.014216487 +0000 +++ /etc/exports 2016-11-28 07:48:33.258207901 +0000 @@ -8,3 +8,5 @@ # /srv/nfs4 gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check) # /srv/nfs4/homes gss/krb5i(rw,sync,no_subtree_check) # +/opt/stackstorm/packs 192.168.0.101(rw,sync,no_subtree_check,anonuid=0,anongid=999) +/opt/stackstorm/virtualenvs 192.168.0.101(rw,sync,no_subtree_check,anonuid=0,anongid=999)
StackStormをオールインワンインストールをした場合、コンテンツディレクトリの所有者(ユーザ・グループ)はroot/st2packsに設定されます。マウント先でも同様に扱えるようにするためanonuidとanongidオプションに、それぞれrootのuidとst2packsのgidを設定します。なおst2packsのgidは以下の方法で確認できます。
最後にNFSサーバを再起動させれば完了です。
vagrant@st2-node:~$ sudo service nfs-kernel-server restart
