新たなクラウド監視ツールとして注目され始めている「Sensu」の活用方法を解説する本連載。今回は、Sensuを本番(プロダクション)環境で使うための冗長化について解説します。
前回は、「Sensu」でプラグインを使ってメトリクスを収集する方法と、その結果を「InfluxDB」に保存し、「Chronograf」で可視化するまでの流れを説明しました。
今回は、Sensuを本番(プロダクション)環境で使うための冗長化について解説します。「sensu-server」「Redis」「RabbitMQ」をそれぞれ2系統ずつ構築することで、耐障害性を高めます。ここでは、Sensu、Redis、RabbitMQをインストールしたホストを2台用意し、SensuとRabbitMQはアクティブ-アクティブ、Redisはマスター(Master)-スレーブ(Slave)として構成します(図1)。
なお、Sensu、Redis、RabbitMQをインストール方法については、以下の本連載の過去記事をご覧ください。
今回の構成では、Redisはマスター-スレーブ形式で冗長化されて、データがレプリケーションされるようになっています。スレーブはマスターから非同期でデータをコピーしており、マスターの“完全なコピー”となります。Redisのレプリケーションに関する細かい仕組みや設定は、以下の公式ドキュメントを参照してください。
今回は、以下のSensuの公式ドキュメントに従って、2台のRedisでマスター-スレーブを構成します。
まずは、マスター側(ここでは「sensu-one.hico.io」)の設定を行います。マスター側では複数のsensu-serverから接続できるように、ローカルホスト以外からの接続も受け入れるように設定します。併せて、接続時にはパスワード認証を行うようにします(「your_redis_password」は適宜ご自身の環境に置き換えてください)。
- # ローカルホスト以外からの接続を受け入れる
- $ sudo sed -i 's/^bind 127\.0\.0\.1$/# bind 127.0.0.1/g' /etc/redis/redis.conf
- # パスワード認証を有効化(your_redis_passwordは適宜置き換えてください)
- $ sudo sed -i 's/^# requirepass foobared$/requirepass your_redis_password/g' /etc/redis/redis.conf
- # Redisのサービス(デーモン)を起動
- $ sudo /etc/init.d/redis-server start
次に、スレーブ側(ここでは「sensu-two.hico.io」)の設定を行います。マスターと同様にローカルホスト以外からの接続の受け入れと、パスワード認証の設定を行います。自身が“マスターのスレーブであること”と、マスターのパスワードを設定すれば、スレーブとして動作します。
- # ローカルホスト以外からの接続を受け入れる
- $ sudo sed -i 's/^bind 127\.0\.0\.1$/# bind 127.0.0.1/g' /etc/redis/redis.conf
- # パスワード認証を有効化(your_redis_passwordは適宜置き換えてください)
- $ sudo sed -i 's/^# requirepass foobared$/requirepass your_redis_password/g' /etc/redis/redis.conf
- # Master(sensu-one.hico.io)のレプリケーションを設定
- $ sudo sed -i 's/^# slaveof <masterip> <masterport>$/slaveof sensu-one.hico.io 6379/g' /etc/redis/redis.conf
- # Masterのパスワード認証を設定(requirepassと対応)
- $ sudo sed -i 's/^# masterauth <master-password>$/masterauth your_redis_password/g' /etc/redis/redis.conf
- # Redisのサービス(デーモン)を起動
- $ sudo /etc/init.d/redis-server start
最後に、レプリケーションが構成されたことを「redis-cli」コマンドで確認します。マスターがスレーブに接続していること、スレーブがマスターに接続していることが確認できます。
- # Masterでconnected_slaves:1であることを確認
- $ redis-cli -h sensu-one.hico.io -a your_redis_password INFO | grep -A 2 role
- role:master
- connected_slaves:1
- slave0:ip=150.95.150.153,port=6379,state=online,offset=603,lag=0
- # Slaveでmaster_link_status:upであることを確認
- $ redis-cli -h sensu-two.hico.io -a your_redis_password INFO | grep -A 3 role
- role:slave
- master_host:sensu-one.hico.io
- master_port:6379
- master_link_status:up
ここまでの設定で、Redisのレプリケーション(マスターとスレーブのデータ同期)が設定できました。
ただ、この構成ではマスター側に障害が発生したときの「スレーブの昇格(フェイルオーバー)」まではサポートされていません。公式の監視およびフェイルオーバー用ツールとしては「Sentinel」が提供されています。SensuでもSentinelをサポートしているので、興味のある方は試してみてください。
他にも、「Consul」などのサービスディスカバリ系ツールを使っている事例もあります。筆者の職場ではConsulを使っており、マスターの監視に失敗すると、スレーブでスクリプトを実行してマスターに昇格させるといった運用を行っています。ConsulはDNS(Domain Name System)の機能を持っており、常にマスターのIPアドレスを引けるようになっているので便利です。
Copyright © ITmedia, Inc. All Rights Reserved.
Linux �ス�ス�ス�ス OSS 鬮ォ�ェ陋滂ソス�ス�コ闕オ譁溷クキ�ケ譎「�ス�ウ驛「�ァ�ス�ュ驛「譎「�ス�ウ驛「�ァ�ス�ー