15. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
serf agent の起動
15
$ serf agent -node=one
$ serf agent -node=two
-bind=127.0.0.1:7947 -rpc-addr=127.0.0.1:7374
one two
$ serf members
one 127.0.0.1:7946 alive
$ serf members -rpc-addr=127.0.0.1:7374
two 127.0.0.1:7947 alive
16. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
serf join
16
$ serf join 127.0.0.1:7946 # join to one
$ serf members # one
one 127.0.0.1:7946 alive
two 127.0.0.1:7947 alive
$ serf members -rpc-addr=127.0.0.1:7374 # two
two 127.0.0.1:7947 alive
one 127.0.0.1:7946 alive
one two
join
17. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
17
A
D
B
C
1. join
D join
D join
※ Gossip プロトコルで伝搬
A join
B join
C join
18. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
18
A
D
B
C
1. join
D join
D join
※ Gossip プロトコルで伝搬
A join
B join
C join
19. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
イベントハンドラ
19
⁃ 任意のイベントで起動するスクリプトを登録できる
#!/bin/bash
# handler.sh
echo
echo "New event: ${SERF_EVENT}. Data follows..."
while read line; do
printf "${line}n"
done
$ serf agent -event-handler=$HOME/handler.sh
⁃ 環境変数 SERF_EVENTにイベント毎に別の値が入る
⁃ member-join, member-leave, member-failed, member-reap, user
⁃ STDIN にホスト名、IPアドレス
27. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
27
⁃ HAProxy ロードバランサ (中央集権)
⁃ MyDNS で DNSラウンドロビン (中央集権)
⁃ Big IP ロードバランサ (中央集権)
⁃ Ganglia リソースメトリクス (gmond, Agent 型)
⁃ Munin リソースメトリクス (中央集権)
⁃ Nagios 監視ツール (中央集権)
⁃ Sensu 監視ツール (Agent 型)
⁃ GrowthForecast, Focuslight グラフツール (Agent型)
⁃ Fluentd ログ収拾 (Agent 型)
いろんなツール
28. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
中央集権型ツールを
agent 型アーキテクチャに
こじつけ直すのが
28
Serf
29. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
思ったこと /
気になったことツラツラ
29
30. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
どのぐらいの時間で伝搬されるのか?
30
http://www.serfdom.io/docs/internals/simulator.html
⁃ 30ノードで1.25s、100ノードでも2sほど
31. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
イベントをどのノードに発火すべきか
31
⁃ 最初にどれかのノードに member-join イベントを
発火しなければならない。
⁃ DNSラウンドロビンを使うとかして、ランダムに選択
されるようにするとよさそう。
⁃ ※ もちろんその DNS の管理は serf で
A
D
B
C
DNSラウンドロビン
38. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
serf tag
38
$ serf tags -set tag=value
$ serf tags -delete tag
⁃ ノードにタグを付ける
$ serf members
one 127.0.0.1:7946 alive tag=value
⁃ 環境変数 SERF_TAG_{TAG} に value が入る
⁃ ※ role は deprecated になりました
39. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
serf query
39
$ serf query [options] name [payload]
⁃ event と違い、レスポンス (STDOUT) を受け取る
⁃ クエリが終わるまで待ち続ける
⁃ ただし、timeout したら諦める
⁃ -tag tag=value オプションでタグを指定できる
40. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
serf query 応用例(1)
40
$ serf agent -event-handler=query:uptime=uptime
⁃ 全ホストから uptime コマンドの結果を集める
$ serf query uptime
Ack from 'one'
Response from 'one': 17:50 up 3 days, 2:52, 10 users, load
averages: 3.83 2.46 2.27
Total Acks: 1
Total Responses: 0
http://pocketstudio.jp/log3/2014/03/14/serf-0-5-0/
41. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
serf query 応用例(2)
41
$ serf agent -event-handler=query:sh=/bin/bash
⁃ event-handler に sh を登録
⁃ 任意のコマンドを実行できる
⁃ 全ホストで nginx reload とか、その他自由
⁃ ※ ただし、timeout したら諦める
$ serf query sh “service nginx reload”