Serf という Orchestration ツール #immutableinfra

18,159 views
17,968 views

Published on

Published in: Technology
0 Comments
68 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
18,159
On SlideShare
0
From Embeds
0
Number of Embeds
6,388
Actions
Shares
0
Downloads
81
Comments
0
Likes
68
Embeds 0
No embeds

No notes for slide

Serf という Orchestration ツール #immutableinfra

  1. 1. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. Serf という Orchestration ツール March 25th, 2014 Naotoshi Seo @sonots DeNA Co., Ltd.
  2. 2. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. 2 自己紹介 ・瀬尾 直利 @sonots ・DeNA Co., Ltd ・インフラのDev ・Rubyist ・OSS 活動家 ・Fluentd コミッタ
  3. 3. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. ⁃ グラフツール ⁃ HTTP POST するだけ ⁃ GrowthForecast の Ruby クローン http://focuslight.github.io/
  4. 4. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. http://blog.livedoor.jp/sonots/archives/29646713.html Yohoushi 分散 Focuslight グラフツール
  5. 5. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. ⁃ ログを処理するアプリケーション(or フレームワーク) ⁃ Ruby プラグインの仕組みが強力 (+250 plugins)
  6. 6. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. ・
  7. 7. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. 7
  8. 8. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. Serf(1) 8 ⁃ Orchestration ツール ⁃ Vagrant で有名な Mitchell Hashimoto 氏が作 った go 製のツール ⁃ メンテナは同 Hashicorp の Armon 氏 http://www.serfdom.io/
  9. 9. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. オーケストレーション 9 Bootstrapping OSのインストール作業 / Kickstart Configuration サーバの設定作業 / Chef、Puppet Orchestration サーバ群のクラスタリング ロードバランサに追加したり、監視入れたり、サーバ管理ツー ルに登録したり、という他のツールと連携するための作業 手でコマンド叩いたり。Serf を使ったり (New!)
  10. 10. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. Blue-Green Deployment 10 http://martinfowler.com/bliki/BlueGreenDeployment.html ここの設定
  11. 11. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. インフラ作業あるある 新規サーバ1台投入するためには 1. OSインストール (AWSインスタンス立ち上げる、mbgaclone [1]) 2. セットアップ (chef, puppet, touryo) オーケストレーション作業も必要 1. サーバ管理ツールに登録 (admintool [1]) 2. 監視ツールに登録 (Nagios, Zabbix) 3. メトリクス収集ツールに登録 (Ganglia, Munin) 4. DNS登録 5. LB 登録 (BigIP, nginx, HAProxy) http://www.amazon.co.jp/dp/4774151114[1] mbgaを支える技術
  12. 12. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. 12 ⁃ オーケストレーション作業は 1台でも面倒 ⁃ 100台入れ替える ⁃ 1日10 Blue-Green Deployment したい 手動とか \(^o^)/オワタ
  13. 13. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. 13 それ Serf で(ry
  14. 14. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. Serf の動作イメージ 14
  15. 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. 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. 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. 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. 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アドレス 
  20. 20. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. 具体例 20
  21. 21. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. Serfで/etc/hosts更新 21 https://github.com/kentaro/serf-hosts A BC join member-join 1. /etc/hosts にホスト名, IPアドレス追加 member-leave 1. /etc/hosts 該当行削除 同スクリプト 同スクリプト
  22. 22. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. SerfでHAProxyに登録 22 http://blog.glidenote.com/blog/2013/10/30/serf-haproxy/ HAProxy Web2Web1 join member-join 1. /etc/haproxy/haproxy.cfg 追記 2. /etc/init.d/haproxy reload member-leave 1. /etc/haproxy/haproxy.cfg 該当行削除 2. /etc/init.d/haproxy reload スクリプトなし スクリプトなし
  23. 23. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. サーバが起動したら 自動で監視設定 自動でサービスイン 23
  24. 24. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. Immutable インフラに適した アーキテクチャ(持論) 24
  25. 25. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. 25 Monitor 中央集権型 Agent型 Web1 Web2 web1.cfg web2.cfg Web1 Web2 agent agent Monitor設定変 更なし ホストが立ち上がると勝手に情報を送り始める
  26. 26. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. Agent 型 が適している 26
  27. 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. 28. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. 中央集権型ツールを agent 型アーキテクチャに こじつけ直すのが 28 Serf
  29. 29. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. 思ったこと / 気になったことツラツラ 29
  30. 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. 31. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. イベントをどのノードに発火すべきか 31 ⁃ 最初にどれかのノードに member-join イベントを 発火しなければならない。 ⁃ DNSラウンドロビンを使うとかして、ランダムに選択 されるようにするとよさそう。 ⁃ ※ もちろんその DNS の管理は serf で A D B C DNSラウンドロビン
  32. 32. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. Event-handler script の更新は? 32 ⁃ event handler スクリプトにバグがあるなどして更 新する必要があった場合に、serf クラスタ全体に撒い て回らないといけない。 ⁃ それこそ serf を使ってクラスタ全体を更新したい ⁃ が、更新するためのスクリプトがバグっている ⁃ 今までどおり capistrano かなにかで撒く? ⁃ ※ Immutable ならイメージを更新してデプロイ
  33. 33. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. 監視をどのタイミングではずすべき? 33 ⁃ member-leave, member-failed イベントで監 視を外す ⁃ すると、本当にサーバが死んだ時にアラート飛ばない         ↓ ⁃ サーバ down 監視以外を Serf で外す ⁃ サーバ down 監視を外すのは手動で(?)
  34. 34. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. 34 ⁃ 監視に入れるなどの処理は全て Serf でやっておく ⁃ サービスインはやらない ⁃ テストチームの作った自動QAで振る舞いをテスト ⁃ (主にオーケストレーション層のテスト) ⁃ 良きタイミングで別の仕組みでサービスイン? いきなりサービスインは怖い?
  35. 35. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. Advanced 35
  36. 36. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. serf event 36 $ serf event [options] name [payload] ex) serf event deploy 20140325 ⁃ 環境変数 SERF_EVENTに user が、 ⁃ 環境変数 SERF_USER_EVENT に name が入る ⁃ STDIN に payload が入る ⁃ ユーザーカスタムイベント http://www.serfdom.io/docs/agent/event-handlers.html
  37. 37. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. serf monitor 37 $ serf monitor ⁃ 稼働中の serf agent に attach してログを見れる ⁃ serf agent のログレベルが warn でも、 ⁃ serf monitor -log-level debug と指定すればデ バグレベルで参照できる
  38. 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. 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. 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. 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”
  42. 42. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. まとめ  42 ⁃ Serf の紹介をしました ⁃ Immutable インフラには Agent 型があっている ⁃ サーバ増やした(減らした) → 設定ファイル修正して git commit && push して deploy とかやってられない ⁃ Serf で中央集権型を Agent 型にしちゃうと捗る
  43. 43. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. 43 Thank you

×