Serf2Excel - Serf を実運用に活かす話 + Consul もあるよ

11,409 views

Published on

www.zusaar.com/event/4897004

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

No Downloads
Views
Total views
11,409
On SlideShare
0
From Embeds
0
Number of Embeds
1,127
Actions
Shares
0
Downloads
0
Comments
0
Likes
43
Embeds 0
No embeds

No notes for slide

Serf2Excel - Serf を実運用に活かす話 + Consul もあるよ

  1. 1. Serf toExcelSerf を実運用に活かす話 + Consul もあるよ @zembutsu Apr 19, 2014, Tokyo Ginza #qpstudy LightningTalks
  2. 2. This is your last chance. After this, there is no turning back.
  3. 3. ! WARNING このスライドには過激な表現やネットスラング、 アニメなどアキバ的文化の演出が含まれています。
  4. 4. qpstudy もうすぐ4周年おめでとうございます! 新人さんようこそ、この業界へ! 今の自分があるのも qpstudy のおかげ です。この場を借りて、リーダーほか スタッフの皆さんに御礼申しあげます。
  5. 5. http://www.nicovideo.jp/watch/sm6301392 業界といえば、あっ・・・(察し
  6. 6. これはMRTGですか?いいえ、Muninです。#qpstudy 06 LT http://www.slideshare.net/zembutsu/mrtgmuninqpstudy-06-lt-7571433 3年前にLTの機会いただきました!
  7. 7. これはMRTGですか?いいえ、Muninです。#qpstudy 06 LT http://www.slideshare.net/zembutsu/mrtgmuninqpstudy-06-lt-7571433 3年前のスライド・・・。
  8. 8. Serf http://serfdom.io/ 今日は Serf です!
  9. 9. Serf を基に Excel を生成する話
  10. 10. Serf とは  軽量なオーケストレーションツール  メンバ一覧とイベントの発生を管理  障害検知、フェイルオーバー  秒単位で全ノード上でイベント同期 serfdom = 農奴的な意味です。
  11. 11. ※参考 http://www.serfdom.io/intro/ メンバーシップ • エージェント間で相互通信 • 高速・軽量 • 非中央集権型 • 情報が直ぐに伝わる 障害検知 • 標準で実装済み • 障害情報は直ぐに全体に伝わる カスタムイベント • メンバーシップ管理 • イベントやクエリを一斉実行 (デプロイやプロセス再起動) • フレキシブルかつ軽量
  12. 12. ハンドサイン画像ジェネレーター http://bzmm.jp/hs_gene/
  13. 13. ハンドサイン画像ジェネレーター http://bzmm.jp/hs_gene/
  14. 14. ハンドサイン画像ジェネレーター http://bzmm.jp/hs_gene/
  15. 15. ハンドサイン画像ジェネレーター http://bzmm.jp/hs_gene/
  16. 16. ハンドサイン画像ジェネレーター http://bzmm.jp/hs_gene/ やっぱり Serf ! 100 ノード同時実行でも大丈夫! ※理論値 1秒で 95% 、2秒でほぼ100%伝播 物置かな?
  17. 17. オーケストレーション  システム全体を統括する「何か」  自分の中では、 「日々の運用業務の面倒な事を」 よしなに処理するための仕組み
  18. 18. ホスト一覧を Excel で提出の必要があっても…
  19. 19. http://oku.edu.mie-u.ac.jp/~okumura/SSS2013.pdf
  20. 20. 基本動作 serf2excel.pl  serf members の結果でホスト一覧取得  Spreadsheet::WriteExce で Excel 出力  定期的にメールを送ることも $ uuencode ./hostlist.xls hostlist.xls | mail -s hostlist user@example.com
  21. 21. 基本動作 serf2excel.pl  serf members の結果でホスト一覧取得  Spreadsheet::WriteExce で Excel 出力  定期的にメールを送ることも $ uuencode ./hostlist.xls hostlist.xls | mail -s hostlist user@example.com $ serf members -format json | jq -c -r '.members[] | {addr, name}' {"name":"manager.pocketstudio.net","addr":"192.168.39.3:7946"} {"name":"node1.pocketstudio.net","addr":"192.168.39.11:7946"} {"name":"node2.pocketstudio.net","addr":"192.168.39.12:7946"} {"name":"node3.pocketstudio.net","addr":"192.168.39.13:7946"}
  22. 22. https://gist.github.com/zembutsu/10caa6b868fc994ec683
  23. 23. Serf のデータを基にホスト一覧を動的生成!
  24. 24. 使いどころ  Ansible 向けのインベントリを動的作成  ServerSpecと連携して role 毎に適用  …ホスト情報等が動的に変化する場面
  25. 25. 更にkwsk  … と思っていたのですが
  26. 26. 昨日、地震で叩き起こされウトウト…
  27. 27. !?
  28. 28. 笹喰 っ て る 場 合 じ ゃ ね ぇ !
  29. 29. Consul http://www.consul.io/
  30. 30. サービス検出 障害検知 マルチデータセンタ キーバリューストレージ
  31. 31. サービス検出 Service Discovery  ‘api’ や ‘mysql’ という service 名を定義  検出は、consul ノードで自動的に開始  HTTP API または DNS で結果を返す
  32. 32. サービス検出 Service Discovery  ‘api’ や ‘mysql’ という service 名を定義  検出は、consul ノードで自動的に開始  HTTP API または DNS で結果を返す $ curl -s http://192.168.39.5:8500/v1/catalog/nodes | jq '.' [ { "Address": "192.168.39.5", "Node": "consul1.pocketstudio.net“ }, { "Address": "192.168.39.6", "Node": "consul2.pocketstudio.net“ } ]
  33. 33. サービス検出 Service Discovery  ‘api’ や ‘mysql’ という service 名を定義  検出は、consul ノードで自動的に開始  HTTP API または DNS で結果を返す $ dig @192.168.39.5 -p 8600 consul1.node.consul any ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.23.rc1.el6_5.1 <<>> @192.168.39.5 -p 8600 consul1.node.consul any (snip) ;; WARNING: recursion requested but not available ;; QUESTION SECTION: ;consul1.node.consul. IN ANY ;; ANSWER SECTION: consul1.node.consul. 0 IN A 192.168.39.5
  34. 34. 障害検知 Failure Detection  サービスやノードのヘルスチェック  ‘ping’ や ‘curl’ 等、コマンドレベルで指定  任意の監視間隔 (秒単位 )  HTTP API または DNS で結果を返す
  35. 35. 障害検知 Failure Detection  サービスやノードのヘルスチェック  ‘ping’ や ‘curl’ 等、コマンドレベルで指定  任意の監視間隔 (秒単位 )  HTTP API または DNS で結果を返す $ curl http://192.168.39.5:8500/v1/health/state/critical | jq '.' [ { "ServiceName": "web", "ServiceID": "web", "Notes": "", "Status": "critical", "Name": "Service 'web' check", "CheckID": "service:web", "Node": "consul1" } ]
  36. 36. 障害検知 Failure Detection  サービスやノードのヘルスチェック  ‘ping’ や ‘curl’ 等、コマンドレベルで指定  任意の監視間隔 (秒単位 )  HTTP API または DNS で結果を返す スクリプト実行可=監視用プログラムのデプロイにも…? # mkdir /etc/consul.d/ # echo ‘{“service”: {“name”: “web”, “tags”: ["rails"], “port”: 80, “check”: {“script”: “curl localhost:80 >/dev/null 2>&1″, “interval”: “10s”}}}’ >/etc/consul.d/web.json
  37. 37. キーバリューストレージ Key/Value Storage  HTTP API を通して RESTful に操作  Consul server 間でデータを複製・保全  Consel システム機能が内部で利用  ユーザによる任意データの利用も可能
  38. 38. キーバリューストレージ Key/Value Storage  HTTP API を通して RESTful に操作  Consul server 間でデータを複製・保全  Consel システム機能が内部で利用  ユーザによる任意データの利用も可能 $ curl -XPUT -d 'hello, world!‘ ¥ http://192.168.39.5:8500/v1/kv/hello/key true # curl -s http://192.168.39.5:8500/v1/kv/hello/?recurse | jq '.' [ { "Value": "b3BlbiB0aGUgbmV4dA==", "Flags": 0, "Key": "hello/key2", "ModifyIndex": 16, "CreateIndex": 16 }, ]
  39. 39. キーバリューストレージ Key/Value Storage  HTTP API を通して RESTful に操作  Consul server 間でデータを複製・保全  Consel システム機能が内部で利用  ユーザによる任意データの利用も可能 $ curl -s http://192.168.39.5:8500/v1/kv/hello/key | ¥ jq '.[].Value | .' -r | base64 -d hello, world!
  40. 40. マルチデータセンタ Multi Datacenter  複数のデータセンタにまたがって通信  LAN 側と WAN 側で別々のゴシッププール  ローカルクラスタにない問い合わせは転送
  41. 41. Consul Architecture - Consul http://www.consul.io/docs/internals/architecture.html
  42. 42. Consul Architecture - Consul http://www.consul.io/docs/internals/architecture.html
  43. 43. Consul Architecture - Consul http://www.consul.io/docs/internals/architecture.html
  44. 44. 強い基礎技術  メッセージング ( Messageing ) … SWIM , Serf  リーダー選出 ( Leader Election ) … Raft  セキュリティ ( Security ) … TLS  データストレージ ( Data Storage ) … UMDB
  45. 45. Serf との違い Serf vs. Consul http://www.serfdom.io/intro/vs-consul.html Serf Consul 目的 サービス検出とオーケストレーション サービス検出と設定 ヘルスチェック 低レベル(ノード死活監視) サービス単位で高度な調整 キーバリューストア なし あり メンバーシップ ノード単位 サービス単位 Web API なし あり DNS インターフェース なし あり アーキテクチャ AP 型 ( 一貫性重視、可用性を犠牲 ) CP 型 ( 可用性より一貫性重視 )
  46. 46. 試してみた  RHEL6/CentOS6 は、そのままでNG ( glibc の version )  Serf に慣れていれば、ほぼ同じような捜査感  Serf のような Consul の振る舞いだけど、別モノ Consulを使ってみた | Pocketstudio.jp log3 http://pocketstudio.jp/log3/2014/04/18/what_is_consul/
  47. 47. 利用方法 Consulを使ってみた | Pocketstudio.jp log3 http://pocketstudio.jp/log3/2014/04/18/what_is_consul/ $ wget -O 0.1.0_linux_amd64.zip ¥ https://dl.bintray.com/mitchellh/consu/0.1.0_linux_amd64.zip $ unzip ./0.1.0_linux_amd64.zip # mv ./consul /usr/bin/ $ consul
  48. 48. 利用方法 Consulを使ってみた | Pocketstudio.jp log3 http://pocketstudio.jp/log3/2014/04/18/what_is_consul/ $ wget -O 0.1.0_linux_amd64.zip ¥ https://dl.bintray.com/mitchellh/consu/0.1.0_linux_amd64.zip $ unzip ./0.1.0_linux_amd64.zip # mv ./consul /usr/bin/ $ consul $ consul agent -server -bootstrap -client=192.168.39.5 -dc=local ¥ -node=consul1 -data-dir=/tmp/consul -bind=192.168.39.5 $ consul agent -dc=local -node=consul2 -data-dir=/tmp/consul2 ¥ -bind=192.168.39.6 -join=192.168.39.5
  49. 49. ドキュメント  公式サイト  http://www.consul.io/intro/index.html  GitHub  https://github.com/hashicorp/consul Consul関連文書の参考訳、Serfとの違い等 | Pocketstudio.jp log3 http://pocketstudio.jp/log3/2014/04/19/translation_consul_related_documents/
  50. 50. ?10,000ft view
  51. 51. ?10,000ft view http://www.slideshare.net/zembutsu/serf-orchestration-with-zabbix-operation
  52. 52. Consul http://www.consul.io/
  53. 53. おしまい。ありがとうございました。  よい子の皆も Consul を試してみよう! お兄さんとの約束さ! @zembutsu みんな~ Consul ためさなイカ

×