1. Masahito Zembutsu @zembutsu
Technology Evangelist; Creationline , Inc.
Shinagawa, Tokyo, 11 Dec 2014
Code the Clouds Mix-up Vol. 2
Serf / Consul 入門 ~仕事を楽しくしよう~ Why I need serf and Consul?
2. Serf / Consul 入門 3 / 65
今日の内容
•
運用だが、もう人間は限界かもしれない
•
Serf や Consul は何を解決しますか?
•
Serf 入門
•
Consul 入門
Topics of today.
30. Serf / Consul 入門 31 / 65
ご注意ください
•
Serf の機能は Consul に統合されつつあります
•
しかし、試すべき理由が3つあります
➡
機能が少ないため、 いきなり Consul を触るよりも、Serf のほうが扱いやすいです
➡
クライアント・サーバ型ではないため、 簡単にクラスタを構成できます
➡
1つのツールとして完成形になりつつあります
31. Serf / Consul 入門 32 / 65
Serf は何ができますか?
•
一斉にコマンドを実行します ( exec , query )
➡
shutdown –h now
➡
service httpd restart
➡
service network restart
➡
iptables -A INPUT -p tcp -s XXX --dport 80 -j DROP
•
監視登録やアプリケーションの設定変更をします
32. Serf / Consul 入門 33 / 65
動作環境は?
•
複数の OS やアーキテクチャに対応しています
➡
Linux ( 32bit, 64bit, ARM )
➡
FreeBSD ( 32bit, 64bit,ARM )
➡
MacOS X ( 32bit, 64bit )
➡
OpenBSD ( 32bit, 64bit )
➡
Windows ( 32bit, 64bit )
33. Serf / Consul 入門 34 / 65
セットアップ方法は?( Linux )
•
バイナリを入手し、サーバ上に配置します
➡
wget -O 0.6.3_linux_amd64.zip ¥ https://dl.bintray.com/mitchellh/serf/0.6.3_linux_amd64.zip
➡
unzip ./0.6.3_linux_amd64.zip
➡
mv ./serf /usr/local/bin/serf
➡
serf version Serf v0.6.3 Agent Protocol: 4 (Understands back to: 2)
34. Serf / Consul 入門 35 / 65
Serf をどう動かしますか?
•
“serf” コマンドをエージェントとして起動します
➡
serf agent &
==> Starting Serf agent...
==> Starting Serf agent RPC...
==> Serf agent running!
Node name: 'sion.pocketstudio.net'
Bind addr: '0.0.0.0:7946'
RPC addr: '127.0.0.1:7373'
Encrypted: false
Snapshot: false
Profile: lan
==> Log data will now stream in as it occurs:
2014/12/06 14:28:33 [INFO] agent: Serf agent starting
2014/12/06 14:28:33 [INFO] serf: EventMemberJoin: sion.pocketstudio.net
$ serf members
sion.pocketstudio.net 10.0.2.15:7946 alive
35. Serf / Consul 入門 36 / 65
クラスタはどうしますか?
A
B
serf join
Agent joining: [B]
Initiating push/pull sync with: B
initiating push/pull sync
Responding push/pull sync
Responding to push/pull sync with: A
EventMemberJoin: B
EventMemberJoin: A
•
serf join コマンドを使います
➡
serf join <IP addr>
36. A
B
Agent joining: [A]
Initiating push/pull sync with: B
Responding to push/pull sync with: C
initiating push/pull sync
Responding push/pull sync
C
ノード C が仲間になりたがってこっちを見ている!
serf join
EventMemberJoin: B
EventMemberJoin: A
EventMemberJoin: C
EventMemberJoin: C
47. クライアント
( consul node)
サーバ ( consul server)
A
B
C
新しいサービスが追加される
まだサーバは何も知らない
48. クライアント
( consul node)
サーバ
( consul server)
A
B
C
エージェントは
サーバに情報を伝えると
新しいサービスが追加される
49. クライアント
( consul node)
サーバ
( consul server)
A
B
C
エージェントは サーバに情報を伝えると
はじめて同期する
A
B
C
50. クライアント
( consul node)
サーバ
( consul server)
A
B
もし、サービスが消えると
A
B
C
51. クライアント
( consul node)
サーバ ( consul server)
A
B
クライアントはサーバと情報を比較 サーバに“C”は不要と伝える
A
B
C
52. クライアント
( consul node)
サーバ
( consul server)
A
B
クライアントはサーバと情報を比較
サーバに“C”は不要と伝える
A
B
あいよ
53. クライアント
( consul node)
サーバ ( consul server)
A
B
クライアントはサーバと情報を比較 サーバに“C”は不要と伝える
A
B
あいよ
クライアントとサーバで情報が同期。この性質がアンチエントロピー
54. クライアント
( consul node)
サーバ
( consul server)
A
B
クライアントはサーバと情報を比較 サーバに“C”は不要と伝える
A
B
あいよ
クライアントとサーバで情報が同期。この性質がアンチエントロピー
決定権を持つのは、クライアント側
サービス状況の変更をトリガとして
ただちに様々な動作を行える
55. Serf / Consul 入門 56 / 65
どうやって使いますか?
•
consul にオプションを付けます
➡
サーバ
•
$ consul agent -server -bootstrap ¥ -dc=local -node=consul1 -data-dir=/tmp/consul
➡
クライアント
•
consul agent -dc=local -node=consul2 ¥ -data-dir=/tmp/consul2 -join=192.168.39.5