LoginSignup
14
14

More than 5 years have passed since last update.

Tech-circle #4 Consul勉強会 -ハンズオン編-

Last updated at Posted at 2015-03-19

ハンズオン手順

実施予定時間

項目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]が表示される。

Screenshot 2015-03-19 21:58:29.png

  • consulノード確認

NODESタブにコンテナIDが追加されている。

Screenshot 2015-03-19 21:56:50.png

試しにwebサーバダウンさせてみましょう
$ sudo docker exec consul-cl1 service nginx stop

Screenshot 2015-03-19 22:16:36.png
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以外になった場合
1. 問題のconsulクライアントをメンバから除外
2. 上記クライアントコンテナ停止
3. 新規クライアントコンテナ作成
4. nginx起動
5. consulメンバーに参加
と流れるスクリプトが実行されます。

$ sudo docker exec consul-cl1 /usr/sbin/service nginx stop

約1分以内にフェイルオーバ用のwebサーバが立ち上がります。

  • webブラウザから確認

Screenshot 2015-03-19 22:36:50.png

Welcome to コンテナIDが表示される。

  • consulノード確認

Screenshot 2015-03-19 22:36:37.png

おまけ

dockerコンテナを扱う為のコマンド

/bin/bashで起動時、コンテナを停止させずに抜ける
# Ctrl+P の後に Ctrl+Q
/bin/bashが実行中のコンテナに再接続する

※ run実行時に、-i -t オプションが有効になっている場合

# docker attach コンテナ名(ID)
14
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
14