狠狠撸

狠狠撸Share a Scribd company logo
Copyright ? 2015 TIS Inc. All rights reserved.
Consulによる運用自律化体験ハンズオン
とConsul活用事例紹介
2015年7月26日
TIS株式会社
戦略技術センター
高橋 和也
July Tech Festa 2015
Copyright ? 2015 TIS Inc. All rights reserved.
目次
? Consulとは
? Consulハンズオン: 基本操作編
? Consulハンズオン: 応用編
? Consulの活用事例
? クラウドオーケストレーションツール 「CloudConductor」
2
Copyright ? 2015 TIS Inc. All rights reserved.
Consulとは?
3
Copyright ? 2015 TIS Inc. All rights reserved.
Consulとは
? Hashicorp社が提供するオーケストレーションツール
? インフラ運用の自動化?自律化に有用な多数の機能を提供
? ノードやサービスの死活管理
? 障害や環境構成の変化に応じた処理の自動実行
? その他KVSやDNSなど
? 既存のサーバ上で追加のサービスとして稼動させることで、
サーバ間の情報共有や運用作業の自動化の助けに
? Go言語で開発されており、OSを問わずどの環境でもバイナリを
一つ置くだけで実行可能なため、導入が簡単
? 2014年4月に提供開始
4
Copyright ? 2015 TIS Inc. All rights reserved.
Consulの特徴
? 公式サイトでは以下の4つの要素が挙げられています
? Service Discovery
? 各Nodeで動いているServiceをConsulに登録することで、他のNodeからその状
態を確認したり、DNS機能を通じてServiceを提供するIP一覧を取得できます
? Health Checking
? クラスタ内のNodeの障害やConsulに登録されたServiceの障害を検知し、自動
的にその状況に応じた処理を呼び出すことができます
? Key/Value Store
? Consulのクラスタ内でデータが同期されるため、特別な設定無しで各サーバが
簡単に高い可用性を持つKVSとしても利用可能になります
? Multi Datacenter
? 一つのデータセンター内でクラスタを自由にスケールさせられるだけでなく、
複数のデータセンターのクラスタを結合して管理することができます
5
Copyright ? 2015 TIS Inc. All rights reserved.
どういう用途に使えるのか
? 環境の変化に合わせた自律的な設定変更
? 従来の運用では、システム構成の変更や障害時の対応は人が対応
? クラウドの普及により、システム構成変更の頻度は増加
? 必要になったらサーバ数を増やし、必要なくなれば減らすことが当たり前に
? この増減の度に人が設定を変更すると品質が一定にならず、ボトルネックに
? ある程度の定型作業であれば、自動的に環境の変化を検出して
自律的に設定内容を変更して欲しい
? 監視サーバの監視対象を追加したり、ロードバランサーに登録したり
? Consulを使うと
? Service Discoveryにより、各サーバで稼動しているServiceを把握
? Health Checkingにより、各サーバの状態やServiceの死活状況を検出し、
自動的に設定更新用のスクリプトなどを実行可能
6
Copyright ? 2015 TIS Inc. All rights reserved.
どういう用途に使えるのか
? システム内の各サーバ間での情報共有
? 従来の運用では、他のサーバの情報は静的に与えられる
? APがDBに接続するためには、DBがどこにいるか設定しなければならない
? 設定した内容に変化があると、その都度設定を更新しなければならない
? 更新できなければ障害となる
? Consulを使うと
? DNS機能を利用すれば、目的のServiceを提供しているサーバのIPを動的に取得
できる
? ConsulのHealth Checkに失敗したサーバは自動的に除外可能
? Tagを活用すれば、DBのMasterだけを取得するといったことも可能
? KVS機能を利用すれば、複数のサーバ間で任意の情報の共有が可能
? 現在設定されているパラメータの情報など
7
Copyright ? 2015 TIS Inc. All rights reserved.
Consulの基本的な構成
公式サイトより引用 (https://www.consul.io/docs/internals/architecture.html)
? 各Node上でagentが稼動
? ServerとClientの2種類
? Serverの中からLeaderを1台選出
? agent同士はGossipプロトコルを
用いてクラスタを形成
? agent同士の通信網を確立し、
情報を共有
? ユーザは最寄のagentを窓口とし
て各種機能を利用
? どのagentに聞いても良い
? 単一障害点となるエンドポイントが無い
? agentがClientモードの場合、裏で
最寄のServerに取り次がれる
? WANをまたぐ別のクラスタとも
接続可能
? 今回のハンズオンでは対象外
8
Copyright ? 2015 TIS Inc. All rights reserved.
Consulハンズオン
基本操作編
9
Copyright ? 2015 TIS Inc. All rights reserved.
本日のハンズオンの範囲
? 本日のハンズオンでは以下の機能について紹介します
? 前半: 基本操作編
? インストール、起動
? 複数Nodeでのクラスタ形成
? Serviceの管理とヘルスチェック
? KVS(Key Value Store)機能
? DNS機能
? 後半: 応用編
? Consul Watch & Event
? Consul exec
? 他にもロック機構やACLによるアクセス制御など、細かい機能
が色々とあります
? 公式サイトのドキュメントは非常に丁寧に書かれているので、
是非目を通してみて下さい
? https://www.consul.io/
10
Copyright ? 2015 TIS Inc. All rights reserved.
本日のハンズオン環境について
? 操作端末
? 各席に備え付けのMacを利用していただけます
? SSHとブラウザが利用可能であれば、お持ちのPCを利用して頂い
ても構いません
? 構築対象となる環境
? AWS EC2の仮想マシンを一人一台ずつ用意しています
? OSはCentOS 7.1です
? SSHの接続先情報は各席のメモをご覧下さい
? ハンズオン手順
? 手順は以下の記事でも公開しています
? http://qiita.com/kz-takahashi/items/c413df2973accbdcb680
それでは実際に動かしてみましょう
11
Copyright ? 2015 TIS Inc. All rights reserved.
基本操作編: 事前準備
? 会場備え付けの端末(Mac)からTerminalを起動し、
各席の用紙に記載の接続先情報に従ってSSH接続してください
? もし接続できない方がおられれば、お近くのスタッフまで
お声掛け下さい
$ ssh jtf_handson@(SSH接続先)
12
Copyright ? 2015 TIS Inc. All rights reserved.
基本操作編: インストール
? Consulのインストールは非常に簡単です
? 必要なファイルは consul という実行ファイル一つだけです
? 環境にあったファイルを一つダウンロードして解凍するだけで動きます
? 今回は合わせてデータを置くディレクトリやConfigファイルを置
くディレクトリも作成しておきます
$ wget https://dl.bintray.com/mitchellh/consul/0.5.2_linux_amd64.zip
$ sudo unzip 0.5.2_linux_amd64.zip -d /usr/local/bin
$ sudo mkdir /opt/consul
$ sudo chown $(whoami) /opt/consul
$ sudo mkdir /etc/consul.d
13
Copyright ? 2015 TIS Inc. All rights reserved.
基本操作編: 起動
? consul agentコマンドを実行することでサービスが起動します
? 起動時に指定するオプションは色々とありますが、
まずは1台だけのクラスタを作ってみましょう
? -server: Serverモードで起動
? -bootstrap-expect 1: クラスタ内のノードが1台以上の時Leaderに立候補
? -data-dir: データの格納先ディレクトリを指定
? 起動したら、Consulに対してクラスタ内にいるメンバーを問い合
わせてみましょう
$ consul agent -server -bootstrap-expect 1 -data-dir /opt/consul/data >> /tmp/consul.log &
$ consul members
Node Address Status Type Build Protocol DC
ip-10-0-1-191 10.0.1.191:8301 alive server 0.5.2 2 dc1
14
Copyright ? 2015 TIS Inc. All rights reserved.
基本操作編: 他のノードへのJoin
? 次はもっと大きなクラスタを作ってみましょう
? クラスタ内には以下の3種類のノードが存在します
? Leader: クラスタ内のServerから選出された、データの原本を保持する代表
? Server: Leaderのデータを複製して保持し、データに対するリクエストに応答
またLeader不在時にServerの中から新Leaderが選出される
? Client: 自身はデータを保持せず、データに対するリクエストをクラスタ内の
Serverへと仲介
? 今稼動しているConsulを一度停止し、ハンズオン参加者全員で
一つのクラスタを形成します
? -joinオプションでこちらが用意したLeaderを指定します
? 以前のクラスタのデータが残っている場合、新しいクラスタに参
加すると様々なエラーが出るため注意が必要です
$ consul leave (現在のクラスタから離脱)
$ rm -rf /opt/consul/data (異なるクラスタに参加する前に以前のクラスタのデータを削除)
$ consul agent -data-dir /opt/consul/data -join leader.jtf.cloudconductor.jp >>
/tmp/consul.log &
15
Copyright ? 2015 TIS Inc. All rights reserved.
基本操作編: Configファイルの利用
? 起動時のオプションが増えると、都度指定するのは面倒です
? もちろんConsulもConfigファイルから設定を読み込んで起動す
ることができます
$ consul leave
$ sudo vi /etc/consul.d/client.json
{
"data_dir": "/opt/consul/data",
"start_join": ["leader.jtf.cloudconductor.jp"]
}
$ consul agent -config-dir /etc/consul.d >> /tmp/consul.log &
16
Copyright ? 2015 TIS Inc. All rights reserved.
基本操作編: Web-UIの利用
? ConsulにはWeb-UIも用意されています
? Web-UIに必要なファイルは同梱されていないので、
利用する場合は別途ダウンロードが必要です
? Web-UIを外部に公開するノードにだけ導入されていれば
クラスタ内の全ノードの情報が確認できます
? 標準設定の場合 http://(SSHホスト名):8500/ui でアクセス可能
です
? このポート番号は後で説明するREST APIと共用されています$ wget https://dl.bintray.com/mitchellh/consul/0.5.2_web_ui.zip
$ unzip 0.5.2_web_ui.zip -d /opt/consul
$ sudo vi /etc/consul.d/web_ui.json
{
"ui_dir": "/opt/consul/dist",
"addresses": { "http": "0.0.0.0" }
}
$ consul leave
$ consul agent -config-dir /etc/consul.d >> /tmp/consul.log &
17
Copyright ? 2015 TIS Inc. All rights reserved.
基本操作編: Serviceの管理とヘルスチェック
? Serviceの登録
? Configファイルにサービスの情報とヘルスチェックの条件を記載
することで、起動時にサービスの登録が行えます
? もしくはHTTP API経由で動的に登録することも可能です
? スクリプト等から動的に制御する場合に有用です
$ cat <<EOF | sudo tee /etc/consul.d/services.json > /dev/null
{
"services": [{
"id": "sshd-$(hostname)",
"name": "sshd",
"tags" : [],
"checks": [{
"script": "pgrep sshd",
"interval": "10s"
}]
}]
}
EOF
$ consul reload
18
Copyright ? 2015 TIS Inc. All rights reserved.
基本操作編: Serviceの管理とヘルスチェック
? Serviceの情報の確認
? 現在の状態はWeb-UIから確認できます
? もしくはHTTP API経由でも確認できます
$ curl -s http://localhost:8500/v1/catalog/services | jq .
$ curl -s http://localhost:8500/v1/catalog/service/sshd | jq .
19
Copyright ? 2015 TIS Inc. All rights reserved.
基本操作編: Key Value Store (KVS)
? KVSとは
? Keyとそれに対応するValueを管理するシンプルなデータストア
? RDBのようなテーブル構造やRelationは持たない
? 一般的にスケールアウトが容易
? Consulが提供するKVS
? Leaderがデータの原本を持ち、全てのServer Nodeに同期
? Leader Nodeに障害が発生しても、過半数のServer Nodeが残っていれば
自動的に新たなLeaderをServerから選出
? クラスタ内のLeaderが不在の場合は利用不可
? consul agentが提供するHTTP API経由で読み書き可能
? 特定のNodeがEndpointになるわけではなく、全てのAgentがEndpointになれ
るため、障害時も接続先を切り替える必要が無い
20
Copyright ? 2015 TIS Inc. All rights reserved.
基本操作編: Key Value Store (KVS)
? KVSに対する操作
? 人が参照?更新する場合は、Web-UIから操作するのが簡単です
このタブを選択
21
Copyright ? 2015 TIS Inc. All rights reserved.
基本操作編: Key Value Store (KVS)
? KVSに対する操作
? プログラムから制御する場合は、HTTP API経由で操作します
? またはコミュニティで作成されている各言語用のSDKを利用します
? https://www.consul.io/downloads_tools.html
? 手動でHTTP APIを試す場合は、以下の操作で確認可能です
# $(hostname)/test というKeyに"test_data" というValueを登録
$ curl -X PUT http://localhost:8500/v1/kv/$(hostname)/test -d "test_data"
# $(hostname)/test というKeyの情報を取得し、Valueの所だけ切り出してbase64デコード
$ curl -s http://localhost:8500/v1/kv/$(hostname)/test | jq .[].Value | tr -d '"' | base64 -d
22
Copyright ? 2015 TIS Inc. All rights reserved.
基本操作編: DNS
? Consulは分散型の内部DNSとしても利用可能です
? クラスタ内の特定Nodeや、特定Serviceを提供するNode群の
IPアドレスをDNSで取得できます
? 例: <node_name>.node.dc1.consul
? 例: <service_name>.service.dc1.consul
? Serviceの場合、HealthCheckに成功したノードのIPアドレスだけ
取得
? 障害が発生したノードを自動的にアクセス対象から外せる
? KVSと同様に、単一障害点がなく冗長化が可能
? configで再帰問い合わせ先を指定すれば、外部のドメイン名も
名前解決できます
? ちょっとした環境なら単体でDNSサーバとしても利用可能
? 本番環境では別途dnsmasq等と併用することが推奨されている
23
Copyright ? 2015 TIS Inc. All rights reserved.
基本操作編: DNS
? 設定
? 標準設定の状態で、TCP 8600でサービスが稼動
? 外部への再帰問い合わせを行う場合は、問い合わせ先を追加設定
? 確認
? 一時的に試す場合は、digコマンド等で 127.0.0.1:8600を指定
? 実際に利用する際には、dnsmasq等で.consulの問い合わせ先が
Consulになるように設定します
$ sudo vi /etc/consul.d/dns.json
{
"recursors": ["8.8.8.8", "8.8.4.4"]
}
$ consul leave
$ consul agent -config-dir /etc/consul.d >> /tmp/consul.log &
$ dig @127.0.0.1 -p 8600 $(hostname).node.dc1.consul
$ dig @127.0.0.1 -p 8600 sshd.service.dc1.consul
24
Copyright ? 2015 TIS Inc. All rights reserved.
基本操作編
? 以上でConsulの基本操作編を終わります
? 16:15まで質疑応答タイムとします
? 残りの時間で色々な操作を試してみて、わからない所があれば
スタッフに質問してみてください
? 一通り触ってみた方は休憩していただいて構いません
? 16:15から後半の応用編を開始します
25
Copyright ? 2015 TIS Inc. All rights reserved.
Consulハンズオン
応用編
26
Copyright ? 2015 TIS Inc. All rights reserved.
応用編: Consul watchを用いた自律的な運用
? Consul Watchはクラスタ内の変化を検出し、自動的に何らか
の処理を行わせることができる機能です
? 自律的な運用を行うためには、現在の環境の状態を把握して
適切な処理を自動的に実行する仕組みが必要です
? consul watchを用いることで、クラスタ内の様々な変化を検出し
てそれに応じたアクションを自動的に呼び出せます
? 例: 新しいノードがクラスタに参加した時に、監視サーバが自動的に新しい
ノードを監視対象に追加
27
Copyright ? 2015 TIS Inc. All rights reserved.
応用編: Consul watchを用いた自律的な運用
? シンプルな例として、sshdのServiceが稼動しているNodeの
情報を/etc/hostsに同期してみましょう
? sshdが稼動しているNodeの増減に応じて自動的に更新させます
? ConsulのDNS機能を使えば/etc/hostsを使う必要は無いですが、例として
? こうした処理を簡単に実現するconsul-templateという公式のツールもあります
$ sudo vi /etc/consul.d/watch_nodes.json
{
"watches": [{
"type": "service",
"service": "sshd",
"handler": "/bin/bash -e /opt/consul/update_hosts.sh"
}]
}
$ sudo chmod a+w /etc/hosts
$ sudo cp -a /etc/hosts /etc/hosts.org
$ sudo vi /opt/consul/update_hosts.sh
#!/bin/sh
cp /etc/hosts.org /etc/hosts
curl -s localhost:8500/v1/catalog/service/sshd | jq .[] | jq '.Address + " " + .Node' | tr -d '"' >> /etc/hosts
$ consul reload
28
Copyright ? 2015 TIS Inc. All rights reserved.
応用編: Consul watchを用いた自律的な運用
? 登録したWatchの動作確認
? 誰かのNodeが参加?離脱すると/etc/hostsも更新されます
? 試しに皆で参加?離脱してみてください
29
$ consul leave
$ consul agent -config-dir /etc/consul.d >> /tmp/consul.log &
Copyright ? 2015 TIS Inc. All rights reserved.
応用編: Consul eventを用いたイベント発行
? 運用には自律的な対応が望ましいものだけではなく、
ユーザが判断するタイミングで実行したいものも多数あります
? backup, restore, restart, etc.
? consul eventを使うと、事前にwatchに登録したスクリプトを
任意のタイミングで実行させることができます
? watchのtypeとしてeventを指定
30
Copyright ? 2015 TIS Inc. All rights reserved.
応用編: Consul eventを用いたイベント発行
? 例として、restartイベント受信時にcrondをrestartする
watchを登録してみましょう
? 登録方法は先ほどのwatchの場合と同様です
? watchを登録したら実際にイベントを送ってみましょう
? cronのログに再起動に関連するログが出ていると思います
$ sudo vi /etc/consul.d/watch_restart.json
{
"watches": [{
"type": "event",
"name": "restart",
"handler": "sudo systemctl restart crond"
}]
}
$ consul reload
$ consul event -name restart -node $(hostname)
$ less /var/log/cron
31
Copyright ? 2015 TIS Inc. All rights reserved.
応用編: Consul eventを用いたイベント発行
? 特定のevent名に対応する処理は同一でなくとも構いません
? 例: APサーバがrestartを受け取った場合はtomcatを再起動
? 例: DBサーバがrestartを受け取った場合はpostgresqlを再起動
? consul eventは対象のノードを限定することも可能です
? -node: 指定した名前のノードのみで実行
? -service: 指定した名前のサービスが稼動するノードでのみ実行
? -tag: -serviceと併用し、サービスが稼動するノードの内、指定し
たタグを持つノードでのみ実行
32
Copyright ? 2015 TIS Inc. All rights reserved.
応用編: Consul execによる任意のコマンド実行
? 管理対象のNodeが増えると、一つ一つのNodeにSSH接続して
管理を行うのは大変です
? consul execを使うと、クラスタ内のNodeに対して任意のコマ
ンドを実行し、その出力を得ることができます
? 例えば各NodeのOpenSSLのバージョンを確認する場合には
? また更新が必要な場合も、全ノードに一度に行えます
$ consul exec openssl version
node1: OpenSSL 1.0.1e-fips 11 Feb 2013
node1:
==> node1: finished with exit code 0
1 / 1 node(s) completed / acknowledged
$ consul exec sudo yum -y update openssl
node1: Updated:
node1: openssl.x86_64 1:1.0.1e-42.el7.9
(略)
==> node1: finished with exit code 0
1 / 1 node(s) completed / acknowledged
33
Copyright ? 2015 TIS Inc. All rights reserved.
応用編: Consul execによる任意のコマンド実行
? 一方で、任意のコマンドを遠隔から実行できるのは
セキュリティ上問題になる場合もあります。
? Configで、consul execの実行を無効にすることもできます
? またACLの機能を使って実行を制限することもできます
? 今回はACLの詳細については省略します
$ sudo vi /etc/consul.d/disable_exec.json
{
"disable_remote_exec": true
}
34
Copyright ? 2015 TIS Inc. All rights reserved.
Consul活用事例紹介
クラウドオーケストレーションツール
CloudConductor
35
Copyright ? 2015 TIS Inc. All rights reserved.
活用事例: CloudConductorとは
? アジャイルなシステム構築をサポートするツール
? システム構築のノウハウを込めたパターンから、いつでも誰でも
その時点で最適な非機能要件を持ったシステムを簡単に構築
詳しくは公式サイトをご覧下さい: http://cloudconductor.org/
GitHubでソースコードも公開しています: https://github.com/cloudconductor/
36
Copyright ? 2015 TIS Inc. All rights reserved.
活用事例: CloudConductorとは
? どんなツール?
? 一言で言えば、マルチクラウド対応のAWS OpsWorks
? CloudConductorの特徴
? 一定の形式に従って記述された「パターン」をもとに、システム
構築を自動化
? パターンの中にはシステム構成を表すCloudFormationのようなTemplateや、
各種ミドルウェアの導入?設定を自動化するChefなどのスクリプトを内包
? 構成管理ツールはChefに限定されず、任意のツールを利用可能
? 複数の「パターン」を組み合わせて一つのシステムを構築可能
? Javaアプリケーション用のTomcat Patternと、監視用のZabbix Patternを組み
合わせると、連動して自動的にサーバの監視を開始
? 複数のクラウドに対応
? とはいえ現在はまだAWSとOpenStackの2種類。今後さらに拡充予定
? Consulを用いてイベントに応じた処理の自動実行を実現
? AWS Opsworksと同様に、setup, configure, deploy等のイベントに対して処
理を行える機構をConsulを用いて実現
37
Copyright ? 2015 TIS Inc. All rights reserved.
活用事例: Consulを用いたオーケストレーションの概要
38
Users
指示
Pattern
Consul
Consul
Pattern
Consul
Consul
Pattern Pattern
KVSに
パラメータを登録し
指示に対応する
Eventを発行
Consul Cluster
自身のRoleとEventに
対応した処理を呼出
Consul
Pattern
サーバ増加時には
Watchが検知
サーバのRoleと
Eventに応じた
処理を行う
スクリプトを内包
Eventを伝播
? Consulの持つ以下の機能を用いて情報共有、イベント通知を実施
○ 分散KVSによる情報の共有 → パラメータ共有に利用
○ クラスタ内へのイベントの伝播 → 外部非公開のサーバへの通知に利用
○ イベントに対応したスクリプトの実行 → パターン内の処理呼出に利用
○ 稼動するサービスの管理とヘルスチェック → 稼動させるサービスの管理に利用
○ サービス管理と連動した内部DNS
Copyright ? 2015 TIS Inc. All rights reserved.
活用事例: 使用しているConsulの機能
? Consul Watch & Eventを用いた処理の呼び出し
? CloudConductorが構築したシステムに対してイベントを発行し、
各Nodeが自身に合った適切な処理を呼び出し
? 初期構築時のsetupイベント, configureイベント
? アプリケーションデプロイ時のdeployイベント
? その他ユーザから指示されたイベントの伝達 (backup, restore等)
? KVSによるシステム内の設定情報の共有
? ユーザから受け取ったパラメータや、各Nodeの役割などを格納
? Eventに応じて呼び出されるスクリプトがKVSの値を参照
? システム内で稼動するServiceの管理
? Serviceの状態をConsul経由で確認可能に
? Consulから監視情報を取得してZabbixに格納するパターンも
現在作成中
39
Copyright ? 2015 TIS Inc. All rights reserved.
活用事例: Consulを活用することで得られたメリット (1/2)
? 特定のノードに依存しない自律的な運用の実現
? 従来の運用では
? 監視サーバが障害を検出して特定のアクションを起こすことはできたが、どの
ノードで何を実行するかの設定が監視サーバに集中
? 各サーバの状態が共有されていないため、それぞれのノードが他のサーバの状
態を考慮してアクションを行うことが困難
? Consulを使うことで
? 特定の変化(Nodeの追加)などが起こった場合に、各ノードが自分が行うべき処
理を判断して自律的に動けるように
? 監視サーバであれば、新ノードを監視対象に追加
? ロードバランサーであれば、新ノードをロードバランスの対象に追加
? 他のノードの状態を把握した上で適切なアクションが可能に
? 現在どのDBサーバがMasterを判別してReplicationを実行
40
Copyright ? 2015 TIS Inc. All rights reserved.
活用事例: Consulを活用することで得られたメリット (2/2)
? 単一障害点の無いシステム内の情報共有基盤としての活用
? Consulを活用することで、情報を集約するサーバを持たずに
システム内で情報共有が可能に
? Consulの管理するNodeやServiceの情報の活用
? KVSにその他のパラメータ等を格納して活用
? クラスタ内でのイベント伝播による外部公開ポートの限定
? SSHを経由して各サーバを管理するツールの場合、外部に公開し
ていないサーバを外から運用しようとすると設定が複雑に
? 多段SSHを行うことで管理できないことは無いが、細かい設定が必要
? Consulの場合、外部に公開されているクラスタ内の1つのサーバ
にイベントを送れば、全てのノードにイベントを伝達可能
? 外部に公開されているサーバが複数あれば簡単に冗長化も可能
41
Copyright ? 2015 TIS Inc. All rights reserved.
まとめ
? Consulは運用に役立つ多様な機能を持っています
? クラスタ内のNodeやServiceの死活監視
? 分散KVSによる情報共有
? 分散DNSによるクラスタ内のNodeやServiceの名前解決
? Watch/Eventを用いた運用作業の自動化、自律化
? consul execによるちょっとした運用作業の効率化
? その他様々な機能
? OSを問わず簡単に導入できます
? バイナリ一つで動きます
? まずは手元の検証環境などに導入してみてはいかがでしょうか
42
Copyright ? 2015 TIS Inc. All rights reserved.
宣伝: 技術勉強会 TechCircle
? TechCircleという誰でも参加可能な勉強会を開催しています
? 色々な技術の勉強会やハンズオンを不定期に実施しています
? 過去のテーマ例
? OpenStack, Vagrant+Docker, SDS, Consul, 機械学習, Ansible, Pepper
? Connpassで情報公開と参加者の募集を行っています
? http://techcircle.connpass.com/
? 過去の勉強会の資料なども公開していますので是非ご覧下さい
43

More Related Content

颁辞苍蝉耻濒による运用自律化体験ハンズオンと颁辞苍蝉耻濒活用事例绍介

  • 1. Copyright ? 2015 TIS Inc. All rights reserved. Consulによる運用自律化体験ハンズオン とConsul活用事例紹介 2015年7月26日 TIS株式会社 戦略技術センター 高橋 和也 July Tech Festa 2015
  • 2. Copyright ? 2015 TIS Inc. All rights reserved. 目次 ? Consulとは ? Consulハンズオン: 基本操作編 ? Consulハンズオン: 応用編 ? Consulの活用事例 ? クラウドオーケストレーションツール 「CloudConductor」 2
  • 3. Copyright ? 2015 TIS Inc. All rights reserved. Consulとは? 3
  • 4. Copyright ? 2015 TIS Inc. All rights reserved. Consulとは ? Hashicorp社が提供するオーケストレーションツール ? インフラ運用の自動化?自律化に有用な多数の機能を提供 ? ノードやサービスの死活管理 ? 障害や環境構成の変化に応じた処理の自動実行 ? その他KVSやDNSなど ? 既存のサーバ上で追加のサービスとして稼動させることで、 サーバ間の情報共有や運用作業の自動化の助けに ? Go言語で開発されており、OSを問わずどの環境でもバイナリを 一つ置くだけで実行可能なため、導入が簡単 ? 2014年4月に提供開始 4
  • 5. Copyright ? 2015 TIS Inc. All rights reserved. Consulの特徴 ? 公式サイトでは以下の4つの要素が挙げられています ? Service Discovery ? 各Nodeで動いているServiceをConsulに登録することで、他のNodeからその状 態を確認したり、DNS機能を通じてServiceを提供するIP一覧を取得できます ? Health Checking ? クラスタ内のNodeの障害やConsulに登録されたServiceの障害を検知し、自動 的にその状況に応じた処理を呼び出すことができます ? Key/Value Store ? Consulのクラスタ内でデータが同期されるため、特別な設定無しで各サーバが 簡単に高い可用性を持つKVSとしても利用可能になります ? Multi Datacenter ? 一つのデータセンター内でクラスタを自由にスケールさせられるだけでなく、 複数のデータセンターのクラスタを結合して管理することができます 5
  • 6. Copyright ? 2015 TIS Inc. All rights reserved. どういう用途に使えるのか ? 環境の変化に合わせた自律的な設定変更 ? 従来の運用では、システム構成の変更や障害時の対応は人が対応 ? クラウドの普及により、システム構成変更の頻度は増加 ? 必要になったらサーバ数を増やし、必要なくなれば減らすことが当たり前に ? この増減の度に人が設定を変更すると品質が一定にならず、ボトルネックに ? ある程度の定型作業であれば、自動的に環境の変化を検出して 自律的に設定内容を変更して欲しい ? 監視サーバの監視対象を追加したり、ロードバランサーに登録したり ? Consulを使うと ? Service Discoveryにより、各サーバで稼動しているServiceを把握 ? Health Checkingにより、各サーバの状態やServiceの死活状況を検出し、 自動的に設定更新用のスクリプトなどを実行可能 6
  • 7. Copyright ? 2015 TIS Inc. All rights reserved. どういう用途に使えるのか ? システム内の各サーバ間での情報共有 ? 従来の運用では、他のサーバの情報は静的に与えられる ? APがDBに接続するためには、DBがどこにいるか設定しなければならない ? 設定した内容に変化があると、その都度設定を更新しなければならない ? 更新できなければ障害となる ? Consulを使うと ? DNS機能を利用すれば、目的のServiceを提供しているサーバのIPを動的に取得 できる ? ConsulのHealth Checkに失敗したサーバは自動的に除外可能 ? Tagを活用すれば、DBのMasterだけを取得するといったことも可能 ? KVS機能を利用すれば、複数のサーバ間で任意の情報の共有が可能 ? 現在設定されているパラメータの情報など 7
  • 8. Copyright ? 2015 TIS Inc. All rights reserved. Consulの基本的な構成 公式サイトより引用 (https://www.consul.io/docs/internals/architecture.html) ? 各Node上でagentが稼動 ? ServerとClientの2種類 ? Serverの中からLeaderを1台選出 ? agent同士はGossipプロトコルを 用いてクラスタを形成 ? agent同士の通信網を確立し、 情報を共有 ? ユーザは最寄のagentを窓口とし て各種機能を利用 ? どのagentに聞いても良い ? 単一障害点となるエンドポイントが無い ? agentがClientモードの場合、裏で 最寄のServerに取り次がれる ? WANをまたぐ別のクラスタとも 接続可能 ? 今回のハンズオンでは対象外 8
  • 9. Copyright ? 2015 TIS Inc. All rights reserved. Consulハンズオン 基本操作編 9
  • 10. Copyright ? 2015 TIS Inc. All rights reserved. 本日のハンズオンの範囲 ? 本日のハンズオンでは以下の機能について紹介します ? 前半: 基本操作編 ? インストール、起動 ? 複数Nodeでのクラスタ形成 ? Serviceの管理とヘルスチェック ? KVS(Key Value Store)機能 ? DNS機能 ? 後半: 応用編 ? Consul Watch & Event ? Consul exec ? 他にもロック機構やACLによるアクセス制御など、細かい機能 が色々とあります ? 公式サイトのドキュメントは非常に丁寧に書かれているので、 是非目を通してみて下さい ? https://www.consul.io/ 10
  • 11. Copyright ? 2015 TIS Inc. All rights reserved. 本日のハンズオン環境について ? 操作端末 ? 各席に備え付けのMacを利用していただけます ? SSHとブラウザが利用可能であれば、お持ちのPCを利用して頂い ても構いません ? 構築対象となる環境 ? AWS EC2の仮想マシンを一人一台ずつ用意しています ? OSはCentOS 7.1です ? SSHの接続先情報は各席のメモをご覧下さい ? ハンズオン手順 ? 手順は以下の記事でも公開しています ? http://qiita.com/kz-takahashi/items/c413df2973accbdcb680 それでは実際に動かしてみましょう 11
  • 12. Copyright ? 2015 TIS Inc. All rights reserved. 基本操作編: 事前準備 ? 会場備え付けの端末(Mac)からTerminalを起動し、 各席の用紙に記載の接続先情報に従ってSSH接続してください ? もし接続できない方がおられれば、お近くのスタッフまで お声掛け下さい $ ssh jtf_handson@(SSH接続先) 12
  • 13. Copyright ? 2015 TIS Inc. All rights reserved. 基本操作編: インストール ? Consulのインストールは非常に簡単です ? 必要なファイルは consul という実行ファイル一つだけです ? 環境にあったファイルを一つダウンロードして解凍するだけで動きます ? 今回は合わせてデータを置くディレクトリやConfigファイルを置 くディレクトリも作成しておきます $ wget https://dl.bintray.com/mitchellh/consul/0.5.2_linux_amd64.zip $ sudo unzip 0.5.2_linux_amd64.zip -d /usr/local/bin $ sudo mkdir /opt/consul $ sudo chown $(whoami) /opt/consul $ sudo mkdir /etc/consul.d 13
  • 14. Copyright ? 2015 TIS Inc. All rights reserved. 基本操作編: 起動 ? consul agentコマンドを実行することでサービスが起動します ? 起動時に指定するオプションは色々とありますが、 まずは1台だけのクラスタを作ってみましょう ? -server: Serverモードで起動 ? -bootstrap-expect 1: クラスタ内のノードが1台以上の時Leaderに立候補 ? -data-dir: データの格納先ディレクトリを指定 ? 起動したら、Consulに対してクラスタ内にいるメンバーを問い合 わせてみましょう $ consul agent -server -bootstrap-expect 1 -data-dir /opt/consul/data >> /tmp/consul.log & $ consul members Node Address Status Type Build Protocol DC ip-10-0-1-191 10.0.1.191:8301 alive server 0.5.2 2 dc1 14
  • 15. Copyright ? 2015 TIS Inc. All rights reserved. 基本操作編: 他のノードへのJoin ? 次はもっと大きなクラスタを作ってみましょう ? クラスタ内には以下の3種類のノードが存在します ? Leader: クラスタ内のServerから選出された、データの原本を保持する代表 ? Server: Leaderのデータを複製して保持し、データに対するリクエストに応答 またLeader不在時にServerの中から新Leaderが選出される ? Client: 自身はデータを保持せず、データに対するリクエストをクラスタ内の Serverへと仲介 ? 今稼動しているConsulを一度停止し、ハンズオン参加者全員で 一つのクラスタを形成します ? -joinオプションでこちらが用意したLeaderを指定します ? 以前のクラスタのデータが残っている場合、新しいクラスタに参 加すると様々なエラーが出るため注意が必要です $ consul leave (現在のクラスタから離脱) $ rm -rf /opt/consul/data (異なるクラスタに参加する前に以前のクラスタのデータを削除) $ consul agent -data-dir /opt/consul/data -join leader.jtf.cloudconductor.jp >> /tmp/consul.log & 15
  • 16. Copyright ? 2015 TIS Inc. All rights reserved. 基本操作編: Configファイルの利用 ? 起動時のオプションが増えると、都度指定するのは面倒です ? もちろんConsulもConfigファイルから設定を読み込んで起動す ることができます $ consul leave $ sudo vi /etc/consul.d/client.json { "data_dir": "/opt/consul/data", "start_join": ["leader.jtf.cloudconductor.jp"] } $ consul agent -config-dir /etc/consul.d >> /tmp/consul.log & 16
  • 17. Copyright ? 2015 TIS Inc. All rights reserved. 基本操作編: Web-UIの利用 ? ConsulにはWeb-UIも用意されています ? Web-UIに必要なファイルは同梱されていないので、 利用する場合は別途ダウンロードが必要です ? Web-UIを外部に公開するノードにだけ導入されていれば クラスタ内の全ノードの情報が確認できます ? 標準設定の場合 http://(SSHホスト名):8500/ui でアクセス可能 です ? このポート番号は後で説明するREST APIと共用されています$ wget https://dl.bintray.com/mitchellh/consul/0.5.2_web_ui.zip $ unzip 0.5.2_web_ui.zip -d /opt/consul $ sudo vi /etc/consul.d/web_ui.json { "ui_dir": "/opt/consul/dist", "addresses": { "http": "0.0.0.0" } } $ consul leave $ consul agent -config-dir /etc/consul.d >> /tmp/consul.log & 17
  • 18. Copyright ? 2015 TIS Inc. All rights reserved. 基本操作編: Serviceの管理とヘルスチェック ? Serviceの登録 ? Configファイルにサービスの情報とヘルスチェックの条件を記載 することで、起動時にサービスの登録が行えます ? もしくはHTTP API経由で動的に登録することも可能です ? スクリプト等から動的に制御する場合に有用です $ cat <<EOF | sudo tee /etc/consul.d/services.json > /dev/null { "services": [{ "id": "sshd-$(hostname)", "name": "sshd", "tags" : [], "checks": [{ "script": "pgrep sshd", "interval": "10s" }] }] } EOF $ consul reload 18
  • 19. Copyright ? 2015 TIS Inc. All rights reserved. 基本操作編: Serviceの管理とヘルスチェック ? Serviceの情報の確認 ? 現在の状態はWeb-UIから確認できます ? もしくはHTTP API経由でも確認できます $ curl -s http://localhost:8500/v1/catalog/services | jq . $ curl -s http://localhost:8500/v1/catalog/service/sshd | jq . 19
  • 20. Copyright ? 2015 TIS Inc. All rights reserved. 基本操作編: Key Value Store (KVS) ? KVSとは ? Keyとそれに対応するValueを管理するシンプルなデータストア ? RDBのようなテーブル構造やRelationは持たない ? 一般的にスケールアウトが容易 ? Consulが提供するKVS ? Leaderがデータの原本を持ち、全てのServer Nodeに同期 ? Leader Nodeに障害が発生しても、過半数のServer Nodeが残っていれば 自動的に新たなLeaderをServerから選出 ? クラスタ内のLeaderが不在の場合は利用不可 ? consul agentが提供するHTTP API経由で読み書き可能 ? 特定のNodeがEndpointになるわけではなく、全てのAgentがEndpointになれ るため、障害時も接続先を切り替える必要が無い 20
  • 21. Copyright ? 2015 TIS Inc. All rights reserved. 基本操作編: Key Value Store (KVS) ? KVSに対する操作 ? 人が参照?更新する場合は、Web-UIから操作するのが簡単です このタブを選択 21
  • 22. Copyright ? 2015 TIS Inc. All rights reserved. 基本操作編: Key Value Store (KVS) ? KVSに対する操作 ? プログラムから制御する場合は、HTTP API経由で操作します ? またはコミュニティで作成されている各言語用のSDKを利用します ? https://www.consul.io/downloads_tools.html ? 手動でHTTP APIを試す場合は、以下の操作で確認可能です # $(hostname)/test というKeyに"test_data" というValueを登録 $ curl -X PUT http://localhost:8500/v1/kv/$(hostname)/test -d "test_data" # $(hostname)/test というKeyの情報を取得し、Valueの所だけ切り出してbase64デコード $ curl -s http://localhost:8500/v1/kv/$(hostname)/test | jq .[].Value | tr -d '"' | base64 -d 22
  • 23. Copyright ? 2015 TIS Inc. All rights reserved. 基本操作編: DNS ? Consulは分散型の内部DNSとしても利用可能です ? クラスタ内の特定Nodeや、特定Serviceを提供するNode群の IPアドレスをDNSで取得できます ? 例: <node_name>.node.dc1.consul ? 例: <service_name>.service.dc1.consul ? Serviceの場合、HealthCheckに成功したノードのIPアドレスだけ 取得 ? 障害が発生したノードを自動的にアクセス対象から外せる ? KVSと同様に、単一障害点がなく冗長化が可能 ? configで再帰問い合わせ先を指定すれば、外部のドメイン名も 名前解決できます ? ちょっとした環境なら単体でDNSサーバとしても利用可能 ? 本番環境では別途dnsmasq等と併用することが推奨されている 23
  • 24. Copyright ? 2015 TIS Inc. All rights reserved. 基本操作編: DNS ? 設定 ? 標準設定の状態で、TCP 8600でサービスが稼動 ? 外部への再帰問い合わせを行う場合は、問い合わせ先を追加設定 ? 確認 ? 一時的に試す場合は、digコマンド等で 127.0.0.1:8600を指定 ? 実際に利用する際には、dnsmasq等で.consulの問い合わせ先が Consulになるように設定します $ sudo vi /etc/consul.d/dns.json { "recursors": ["8.8.8.8", "8.8.4.4"] } $ consul leave $ consul agent -config-dir /etc/consul.d >> /tmp/consul.log & $ dig @127.0.0.1 -p 8600 $(hostname).node.dc1.consul $ dig @127.0.0.1 -p 8600 sshd.service.dc1.consul 24
  • 25. Copyright ? 2015 TIS Inc. All rights reserved. 基本操作編 ? 以上でConsulの基本操作編を終わります ? 16:15まで質疑応答タイムとします ? 残りの時間で色々な操作を試してみて、わからない所があれば スタッフに質問してみてください ? 一通り触ってみた方は休憩していただいて構いません ? 16:15から後半の応用編を開始します 25
  • 26. Copyright ? 2015 TIS Inc. All rights reserved. Consulハンズオン 応用編 26
  • 27. Copyright ? 2015 TIS Inc. All rights reserved. 応用編: Consul watchを用いた自律的な運用 ? Consul Watchはクラスタ内の変化を検出し、自動的に何らか の処理を行わせることができる機能です ? 自律的な運用を行うためには、現在の環境の状態を把握して 適切な処理を自動的に実行する仕組みが必要です ? consul watchを用いることで、クラスタ内の様々な変化を検出し てそれに応じたアクションを自動的に呼び出せます ? 例: 新しいノードがクラスタに参加した時に、監視サーバが自動的に新しい ノードを監視対象に追加 27
  • 28. Copyright ? 2015 TIS Inc. All rights reserved. 応用編: Consul watchを用いた自律的な運用 ? シンプルな例として、sshdのServiceが稼動しているNodeの 情報を/etc/hostsに同期してみましょう ? sshdが稼動しているNodeの増減に応じて自動的に更新させます ? ConsulのDNS機能を使えば/etc/hostsを使う必要は無いですが、例として ? こうした処理を簡単に実現するconsul-templateという公式のツールもあります $ sudo vi /etc/consul.d/watch_nodes.json { "watches": [{ "type": "service", "service": "sshd", "handler": "/bin/bash -e /opt/consul/update_hosts.sh" }] } $ sudo chmod a+w /etc/hosts $ sudo cp -a /etc/hosts /etc/hosts.org $ sudo vi /opt/consul/update_hosts.sh #!/bin/sh cp /etc/hosts.org /etc/hosts curl -s localhost:8500/v1/catalog/service/sshd | jq .[] | jq '.Address + " " + .Node' | tr -d '"' >> /etc/hosts $ consul reload 28
  • 29. Copyright ? 2015 TIS Inc. All rights reserved. 応用編: Consul watchを用いた自律的な運用 ? 登録したWatchの動作確認 ? 誰かのNodeが参加?離脱すると/etc/hostsも更新されます ? 試しに皆で参加?離脱してみてください 29 $ consul leave $ consul agent -config-dir /etc/consul.d >> /tmp/consul.log &
  • 30. Copyright ? 2015 TIS Inc. All rights reserved. 応用編: Consul eventを用いたイベント発行 ? 運用には自律的な対応が望ましいものだけではなく、 ユーザが判断するタイミングで実行したいものも多数あります ? backup, restore, restart, etc. ? consul eventを使うと、事前にwatchに登録したスクリプトを 任意のタイミングで実行させることができます ? watchのtypeとしてeventを指定 30
  • 31. Copyright ? 2015 TIS Inc. All rights reserved. 応用編: Consul eventを用いたイベント発行 ? 例として、restartイベント受信時にcrondをrestartする watchを登録してみましょう ? 登録方法は先ほどのwatchの場合と同様です ? watchを登録したら実際にイベントを送ってみましょう ? cronのログに再起動に関連するログが出ていると思います $ sudo vi /etc/consul.d/watch_restart.json { "watches": [{ "type": "event", "name": "restart", "handler": "sudo systemctl restart crond" }] } $ consul reload $ consul event -name restart -node $(hostname) $ less /var/log/cron 31
  • 32. Copyright ? 2015 TIS Inc. All rights reserved. 応用編: Consul eventを用いたイベント発行 ? 特定のevent名に対応する処理は同一でなくとも構いません ? 例: APサーバがrestartを受け取った場合はtomcatを再起動 ? 例: DBサーバがrestartを受け取った場合はpostgresqlを再起動 ? consul eventは対象のノードを限定することも可能です ? -node: 指定した名前のノードのみで実行 ? -service: 指定した名前のサービスが稼動するノードでのみ実行 ? -tag: -serviceと併用し、サービスが稼動するノードの内、指定し たタグを持つノードでのみ実行 32
  • 33. Copyright ? 2015 TIS Inc. All rights reserved. 応用編: Consul execによる任意のコマンド実行 ? 管理対象のNodeが増えると、一つ一つのNodeにSSH接続して 管理を行うのは大変です ? consul execを使うと、クラスタ内のNodeに対して任意のコマ ンドを実行し、その出力を得ることができます ? 例えば各NodeのOpenSSLのバージョンを確認する場合には ? また更新が必要な場合も、全ノードに一度に行えます $ consul exec openssl version node1: OpenSSL 1.0.1e-fips 11 Feb 2013 node1: ==> node1: finished with exit code 0 1 / 1 node(s) completed / acknowledged $ consul exec sudo yum -y update openssl node1: Updated: node1: openssl.x86_64 1:1.0.1e-42.el7.9 (略) ==> node1: finished with exit code 0 1 / 1 node(s) completed / acknowledged 33
  • 34. Copyright ? 2015 TIS Inc. All rights reserved. 応用編: Consul execによる任意のコマンド実行 ? 一方で、任意のコマンドを遠隔から実行できるのは セキュリティ上問題になる場合もあります。 ? Configで、consul execの実行を無効にすることもできます ? またACLの機能を使って実行を制限することもできます ? 今回はACLの詳細については省略します $ sudo vi /etc/consul.d/disable_exec.json { "disable_remote_exec": true } 34
  • 35. Copyright ? 2015 TIS Inc. All rights reserved. Consul活用事例紹介 クラウドオーケストレーションツール CloudConductor 35
  • 36. Copyright ? 2015 TIS Inc. All rights reserved. 活用事例: CloudConductorとは ? アジャイルなシステム構築をサポートするツール ? システム構築のノウハウを込めたパターンから、いつでも誰でも その時点で最適な非機能要件を持ったシステムを簡単に構築 詳しくは公式サイトをご覧下さい: http://cloudconductor.org/ GitHubでソースコードも公開しています: https://github.com/cloudconductor/ 36
  • 37. Copyright ? 2015 TIS Inc. All rights reserved. 活用事例: CloudConductorとは ? どんなツール? ? 一言で言えば、マルチクラウド対応のAWS OpsWorks ? CloudConductorの特徴 ? 一定の形式に従って記述された「パターン」をもとに、システム 構築を自動化 ? パターンの中にはシステム構成を表すCloudFormationのようなTemplateや、 各種ミドルウェアの導入?設定を自動化するChefなどのスクリプトを内包 ? 構成管理ツールはChefに限定されず、任意のツールを利用可能 ? 複数の「パターン」を組み合わせて一つのシステムを構築可能 ? Javaアプリケーション用のTomcat Patternと、監視用のZabbix Patternを組み 合わせると、連動して自動的にサーバの監視を開始 ? 複数のクラウドに対応 ? とはいえ現在はまだAWSとOpenStackの2種類。今後さらに拡充予定 ? Consulを用いてイベントに応じた処理の自動実行を実現 ? AWS Opsworksと同様に、setup, configure, deploy等のイベントに対して処 理を行える機構をConsulを用いて実現 37
  • 38. Copyright ? 2015 TIS Inc. All rights reserved. 活用事例: Consulを用いたオーケストレーションの概要 38 Users 指示 Pattern Consul Consul Pattern Consul Consul Pattern Pattern KVSに パラメータを登録し 指示に対応する Eventを発行 Consul Cluster 自身のRoleとEventに 対応した処理を呼出 Consul Pattern サーバ増加時には Watchが検知 サーバのRoleと Eventに応じた 処理を行う スクリプトを内包 Eventを伝播 ? Consulの持つ以下の機能を用いて情報共有、イベント通知を実施 ○ 分散KVSによる情報の共有 → パラメータ共有に利用 ○ クラスタ内へのイベントの伝播 → 外部非公開のサーバへの通知に利用 ○ イベントに対応したスクリプトの実行 → パターン内の処理呼出に利用 ○ 稼動するサービスの管理とヘルスチェック → 稼動させるサービスの管理に利用 ○ サービス管理と連動した内部DNS
  • 39. Copyright ? 2015 TIS Inc. All rights reserved. 活用事例: 使用しているConsulの機能 ? Consul Watch & Eventを用いた処理の呼び出し ? CloudConductorが構築したシステムに対してイベントを発行し、 各Nodeが自身に合った適切な処理を呼び出し ? 初期構築時のsetupイベント, configureイベント ? アプリケーションデプロイ時のdeployイベント ? その他ユーザから指示されたイベントの伝達 (backup, restore等) ? KVSによるシステム内の設定情報の共有 ? ユーザから受け取ったパラメータや、各Nodeの役割などを格納 ? Eventに応じて呼び出されるスクリプトがKVSの値を参照 ? システム内で稼動するServiceの管理 ? Serviceの状態をConsul経由で確認可能に ? Consulから監視情報を取得してZabbixに格納するパターンも 現在作成中 39
  • 40. Copyright ? 2015 TIS Inc. All rights reserved. 活用事例: Consulを活用することで得られたメリット (1/2) ? 特定のノードに依存しない自律的な運用の実現 ? 従来の運用では ? 監視サーバが障害を検出して特定のアクションを起こすことはできたが、どの ノードで何を実行するかの設定が監視サーバに集中 ? 各サーバの状態が共有されていないため、それぞれのノードが他のサーバの状 態を考慮してアクションを行うことが困難 ? Consulを使うことで ? 特定の変化(Nodeの追加)などが起こった場合に、各ノードが自分が行うべき処 理を判断して自律的に動けるように ? 監視サーバであれば、新ノードを監視対象に追加 ? ロードバランサーであれば、新ノードをロードバランスの対象に追加 ? 他のノードの状態を把握した上で適切なアクションが可能に ? 現在どのDBサーバがMasterを判別してReplicationを実行 40
  • 41. Copyright ? 2015 TIS Inc. All rights reserved. 活用事例: Consulを活用することで得られたメリット (2/2) ? 単一障害点の無いシステム内の情報共有基盤としての活用 ? Consulを活用することで、情報を集約するサーバを持たずに システム内で情報共有が可能に ? Consulの管理するNodeやServiceの情報の活用 ? KVSにその他のパラメータ等を格納して活用 ? クラスタ内でのイベント伝播による外部公開ポートの限定 ? SSHを経由して各サーバを管理するツールの場合、外部に公開し ていないサーバを外から運用しようとすると設定が複雑に ? 多段SSHを行うことで管理できないことは無いが、細かい設定が必要 ? Consulの場合、外部に公開されているクラスタ内の1つのサーバ にイベントを送れば、全てのノードにイベントを伝達可能 ? 外部に公開されているサーバが複数あれば簡単に冗長化も可能 41
  • 42. Copyright ? 2015 TIS Inc. All rights reserved. まとめ ? Consulは運用に役立つ多様な機能を持っています ? クラスタ内のNodeやServiceの死活監視 ? 分散KVSによる情報共有 ? 分散DNSによるクラスタ内のNodeやServiceの名前解決 ? Watch/Eventを用いた運用作業の自動化、自律化 ? consul execによるちょっとした運用作業の効率化 ? その他様々な機能 ? OSを問わず簡単に導入できます ? バイナリ一つで動きます ? まずは手元の検証環境などに導入してみてはいかがでしょうか 42
  • 43. Copyright ? 2015 TIS Inc. All rights reserved. 宣伝: 技術勉強会 TechCircle ? TechCircleという誰でも参加可能な勉強会を開催しています ? 色々な技術の勉強会やハンズオンを不定期に実施しています ? 過去のテーマ例 ? OpenStack, Vagrant+Docker, SDS, Consul, 機械学習, Ansible, Pepper ? Connpassで情報公開と参加者の募集を行っています ? http://techcircle.connpass.com/ ? 過去の勉強会の資料なども公開していますので是非ご覧下さい 43