SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

StackStorm入門

StackStormで始める運用自動化 ~応用編~

StackStorm入門(2)

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 HA reference deployment
(出典:『High availability deployment | StackStorm 2.0.1 documentation』)

 ここでは、最初に構築したノード(プライマリノード)に加えて、もう一台のノード(セカンダリノード)を追加することで、冗長なStackStorm環境を構築します。最終的に、以下のような環境を構築します(なお以降ではMistralを利用しないためPostgreSQLについての設定は省略します)。

StackStorm冗長構成
StackStorm冗長構成

 上記の構成で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/ディレクトリ配下のpacksvirtualenvsの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に設定されます。マウント先でも同様に扱えるようにするためanonuidanongidオプションに、それぞれrootのuidとst2packsのgidを設定します。なおst2packsのgidは以下の方法で確認できます。

グループ'st2packs'のIDを確認
グループ'st2packs'のIDを確認

 最後にNFSサーバを再起動させれば完了です。

vagrant@st2-node:~$ sudo service nfs-kernel-server restart

次のページ
セカンダリノードの構築

この記事は参考になりましたか?

StackStorm入門連載記事一覧
この記事の著者

大山 裕泰(株式会社DMM.comラボ)(オオヤマ ヒロヤス)

DMM.com ラボ所属ソフトウェアエンジニア。アリエル・ネットワーク株式会社、グリー株式会社を経て現在に至る。最近は主にインフラ基盤の構築、運用、機能開発を行う。共著書に「次世代ネットワーク制御技術 OpenFlow入門」がある。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/9885 2017/01/06 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー