ハンズオン手順
実施予定時間
項目1・2「Consulインストールから起動まで」
19:50-20:10
項目3「Consul Client障害検知~自動復旧体験」
20:10-20:30
[Link]
準備編
ハンズオン編
Extra Stage
1 Master Container作成
- イメージのダウンロード
※準備編の「5. Containerベースダウンロード」にて実施済み
sudo: unable to resolve host consul
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
bsmile/consul-handson latest a4f420dc2b88 6 hours ago 292 MB
2 Consul Agent起動
2.1 Consul-Server立ち上げ
2.1.1 Consul Server設定
- consulサーバ用コンテナ立ち上げ
$ sudo docker run --name consul-sv1 -p 8500:8500 -i -t bsmile/consul-handson /bin/bash
ここからはコンテナ(consul-server)上の設定となります。
2.1.2 Consulサーバ IP確認
eth0のIPアドレスをメモして下さい。
consul-clientから接続する際に必要となります。
root@64e2fd981f5e:/# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
4: eth0: <BROADCAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 5e:b1:51:6a:88:da brd ff:ff:ff:ff:ff:ff
inet 172.17.0.2/16 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::5cb1:51ff:fe6a:88da/64 scope link
valid_lft forever preferred_lft forever
2.1.3 Consul Agent Server起動前準備
後半で使用する、フェイルオーバ時のスクリプトを編集しておきます。
下記スクリプトの「172.17.0.2」を、先ほど確認したconsul serverのeth0IPアドレスへ置き換えて使用して下さい。
# sed -i -e "s/consul-sv1/172.17.0.2/g" -e "s/techcircle\:consul/bsmile\/consul-handson/g" /opt/consul/scripts/consul_http_recovery.sh
2.1.4 Consul Agent( Server / WebUI )起動
# consul agent \
-bootstrap-expect 1 \
-server \
-node=consul-sv \
-data-dir=/opt/consul/dat \
-ui-dir=/opt/consul/webui/dist \
-client="0.0.0.0" &
完了後、Ctrl+P → Ctrl+Qでコンテナから抜けて下さい。
以上でConsul-server設定終わり
2.2 Consul-Client立ち上げ
2.2.1 Consul Client設定
- consul コンテナ(client) 立ち上げ
下記スクリプトの「172.17.0.2」を、先ほど確認したconsul serverのeth0 IPアドレスへ置き換えて使用して下さい。
今回の起動は、[/bin/bash]ではなく、consul agent(client)を起動するスクリプトを実行させます。
$ sudo docker run --name consul-cl1 -p 10080:80 -i -t bsmile/consul-handson sh /opt/consul/scripts/consul-client-start.sh 172.17.0.2
consulを実行した際エンター等を押下しても応答がありませんが、フォアグラウンドで実行されるアプリケーションなので問題ありません。
完了後、Ctrl+P → Ctrl+Qでコンテナから抜けて下さい。
- webブラウザから確認
Welcome to [コンテナID]が表示される。
- consulノード確認
NODESタブにコンテナIDが追加されている。
試しにwebサーバダウンさせてみましょう
$ sudo docker exec consul-cl1 service nginx stop
consulサーバのweb-uiをリロードすると、httpチェックがcriticalとなっている事がわかります。
この制御を利用してconsulサーバから新しいコンテナを作成します。
- 再度nginx起動
$ sudo docker exec consul-cl1 service nginx start
3 Nginx停止時の自動フェイルオーバー
3.1 Consul Server設定
- 実行権限付与とconsulサーバによる監視処理実行
consul serverへ接続します。
$ sudo docker attach consul-sv1
consul watchコマンドにて、nginx監視に変化があった場合、[http_watch.sh]というスクリプトを実行させます。
# consul watch -http-addr=127.0.0.1:8500 -type=service -service=http /opt/consul/scripts/http_watch.sh &
完了後、Ctrl+P → Ctrl+Qでコンテナから抜けて下さい。
3.2 フェイルオーバー確認
もう一度nginxサービスを停止させてみましょう。
今度は、consul watchにてnginxサービスステータスがpassing以外になった場合
- 問題のconsulクライアントをメンバから除外
- 上記クライアントコンテナ停止
- 新規クライアントコンテナ作成
- nginx起動
- consulメンバーに参加
と流れるスクリプトが実行されます。
$ sudo docker exec consul-cl1 /usr/sbin/service nginx stop
約1分以内にフェイルオーバ用のwebサーバが立ち上がります。
- webブラウザから確認
Welcome to コンテナIDが表示される。
- consulノード確認
おまけ
dockerコンテナを扱う為のコマンド
/bin/bashで起動時、コンテナを停止させずに抜ける
# Ctrl+P の後に Ctrl+Q
/bin/bashが実行中のコンテナに再接続する
※ run実行時に、-i -t オプションが有効になっている場合
# docker attach コンテナ名(ID)