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
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