Consul は 全自動オーケストレーションの 夢を見るか?

79
GMO Pepabo, Inc. アドバンスドシニア 近藤うちお 2015/04/19 Pepabo Tech Conference Consul は 全自動オーケストレーションの 夢を見るか?

Transcript of Consul は 全自動オーケストレーションの 夢を見るか?

Page 1: Consul は 全自動オーケストレーションの 夢を見るか?

GMO Pepabo, Inc. アドバンスドシニア

近藤うちお

2015/04/19 Pepabo Tech Conference

Consul は 全自動オーケストレーションの

夢を見るか?

Page 2: Consul は 全自動オーケストレーションの 夢を見るか?

me

Page 3: Consul は 全自動オーケストレーションの 夢を見るか?
Page 4: Consul は 全自動オーケストレーションの 夢を見るか?

Rubyist

Page 5: Consul は 全自動オーケストレーションの 夢を見るか?
Page 6: Consul は 全自動オーケストレーションの 夢を見るか?

From Fukuoka

Page 7: Consul は 全自動オーケストレーションの 夢を見るか?
Page 8: Consul は 全自動オーケストレーションの 夢を見るか?

自動化厨DevOps’er

Page 9: Consul は 全自動オーケストレーションの 夢を見るか?
Page 10: Consul は 全自動オーケストレーションの 夢を見るか?

デブオプスでCFPに応募しました

20I5.6.27 sat 10:00-17:00 @ Hakata!

Page 11: Consul は 全自動オーケストレーションの 夢を見るか?

今日のテーマ

Page 12: Consul は 全自動オーケストレーションの 夢を見るか?

Consul

Page 13: Consul は 全自動オーケストレーションの 夢を見るか?
Page 14: Consul は 全自動オーケストレーションの 夢を見るか?

Consul has multiple components

> サービスディスカバリ > ヘルスチェック > Key/Value Store > 複数データセンタ対応

Page 15: Consul は 全自動オーケストレーションの 夢を見るか?

Consul has multiple components

> サービスディスカバリ > ヘルスチェック > Key/Value Store > 複数データセンタ対応

Page 16: Consul は 全自動オーケストレーションの 夢を見るか?

Excuse> 0.5.0 の新機能については全然紹介しません……

Page 17: Consul は 全自動オーケストレーションの 夢を見るか?

Raft Consensus Algorithm

Page 18: Consul は 全自動オーケストレーションの 夢を見るか?

Raft Consensus Algorithm

Page 19: Consul は 全自動オーケストレーションの 夢を見るか?

執政官Consul

Page 20: Consul は 全自動オーケストレーションの 夢を見るか?

リーダー投票

http://ja.wikipedia.org/wiki/%E5%8F%A4%E4%BB%A3%E3%83%AD%E3%83%BC%E3%83%9E%E3%81%AE%E5%85%AC%E8%A1%86%E6%B5%B4%E5%A0%B4

Page 21: Consul は 全自動オーケストレーションの 夢を見るか?

“– http://www.slideshare.net/pfi/raft-36155398

“誤解を恐れずにザックリ説明すると Client からのリクエストを

Leader がシリアライズしてクラスタ内の 他のプロセスに同じ順序でばらまく。”

その他の参考サイト: http://blog.obfuscatism.net/blog/2014/12/01/raft/

http://thesecretlivesofdata.com/raft/

Page 22: Consul は 全自動オーケストレーションの 夢を見るか?

cf. Raftの実装> いくつかある > https://github.com/hashicorp/raft > Ruby は Celluloidプロジェクトの https://github.com/celluloid/floss が良さそう

Page 23: Consul は 全自動オーケストレーションの 夢を見るか?

Consulの インストールと

運用

Page 24: Consul は 全自動オーケストレーションの 夢を見るか?

泥臭く、 嵌った点を共有します……

Page 25: Consul は 全自動オーケストレーションの 夢を見るか?

ディレクトリルール> -config-dir= /etc/consul.d > -data-dir= /var/consul/data > -ui-dir= /var/consul/web_ui > (プロセスはconsulユーザで動かす)

Page 26: Consul は 全自動オーケストレーションの 夢を見るか?

rpm つくった> ドッカーでナウくビルドできます > あえてサービスを含まない > http://qiita.com/udzura/items/38075556d7609abd210a

Page 27: Consul は 全自動オーケストレーションの 夢を見るか?

consul agent -server> スーパーバイザ~ディー

> 実際はpuppetのsupervisordモジュール経由で設定している

[program:consul_master] command=/usr/bin/consul agent -config-dir=/etc/consul.d numprocs=1 numprocs_start=0 priority=999 autostart=true autorestart=true startsecs=10 startretries=3 exitcodes=0,2 stopsignal=INT stopwaitsecs=10 user=consul redirect_stderr=true stdout_logfile=/var/log/supervisor/%(program_name)s.log stdout_logfile_maxbytes=50MB stdout_logfile_backups=10 stderr_logfile=/var/log/supervisor/consul_master/consul_master.err stderr_logfile_maxbytes=250MB stderr_logfile_backups=10 environment=GOMAXPROCS=4

Page 28: Consul は 全自動オーケストレーションの 夢を見るか?

停止時にちゃんとleaveしてくれ> stopsignal=INT

> INTで止めるとgracefulにクラスタを抜けるので、正しく止める際の手順では明示するのが良さそう > TERMとかで止めるとクラスタに残る > 一応設定で変更可能 > https://www.consul.io/docs/agent/options.html#leave_on_terminate

Page 29: Consul は 全自動オーケストレーションの 夢を見るか?

サーバの数> 3以上、なるだけサーバにしている

> "bootstrap_expect": 3

> https://www.consul.io/docs/internals/consensus.html

Page 30: Consul は 全自動オーケストレーションの 夢を見るか?

-bootstrap(-expect)?> -bootstrap での起動は雑に試す時 > 本運用では -bootstrap-expectで > 「3台未満は冗長構成と言わない」 > 2台ではリーダーがいつまでも決まらない

> Raft だから…… > http://thesecretlivesofdata.com/raft/ を眺めて理解

Page 31: Consul は 全自動オーケストレーションの 夢を見るか?

-serverとクライアント> 基本的に -server で立ち上げる > 運用の都合上、台数が増減するものはクライアントモードにしている > 万一落としたサーバがリーダーだったら、リーダ不在期間が一瞬とは言え発生してしまう。なるべく減らしたい

Page 32: Consul は 全自動オーケストレーションの 夢を見るか?

GOMAXPROCS> CPUと同数(4なら4) > Vagrant上では、ちゃんとVMにCPUを2以上割り当てないと永遠にリーダーが交代し続けて 面倒なことに。 > I/O APIC の有効化をしないとダメ(忘れがち)

http://qiita.com/d_nishiyama85/items/c50c95795865ae7f714b

Page 33: Consul は 全自動オーケストレーションの 夢を見るか?

“– https://groups.google.com/forum/#!msg/consul-tool/qewFEqgAoF8/b9hxhmy1v6gJ

“The reason we recommend setting GOMAXPROCS is to avoid potential starvation of the scheduler. … If

a single goroutine blocks the scheduler it can cause degraded performance.”

Page 34: Consul は 全自動オーケストレーションの 夢を見るか?

vm.overcommit_memory=0

> 設定しないと、こう言う怖いログが出て落ちる。-server の時のみ。

> http://qiita.com/udzura/items/d24157a8d5ba6ab60ec0

Page 35: Consul は 全自動オーケストレーションの 夢を見るか?

ProgrammableConsul

Page 36: Consul は 全自動オーケストレーションの 夢を見るか?

consul watch

Page 37: Consul は 全自動オーケストレーションの 夢を見るか?

consul watch とは> consulサブコマンド > Consulでクラスタを組んでおけば、色々なイベントを監視できる。 > 監視したいイベントを指定すると特定のコマンドにJSONを渡せる。 > イベントが起こったらすぐ発火する。

Page 38: Consul は 全自動オーケストレーションの 夢を見るか?

イベント一覧> key: KVSの値 > keyprefix: あるプレフィックス以下のKVSの値 > services: サービス全体の状態変更 > nodes: ノードの状態変更(追加削除) > service: 特定のサービスの変更 > checks: 特定のcheckの変更 > event: カスタムイベント

Page 39: Consul は 全自動オーケストレーションの 夢を見るか?

実際は自分で consul watch

せずにツールを噛ますことが多い

Page 40: Consul は 全自動オーケストレーションの 夢を見るか?

ヘルスチェックのサマリを 通知

Page 41: Consul は 全自動オーケストレーションの 夢を見るか?

consul-alerts

> eventやcheckを監視して通知する デーモンを手軽に作れる

Page 42: Consul は 全自動オーケストレーションの 夢を見るか?

Ikachanへの通知……> カスタムコマンドが指定できる > カスタムコマンド作った > https://github.com/udzura/consul-simple-notifier

> 作ったけど大量のノード入れ替えの際には厳しい……

Page 43: Consul は 全自動オーケストレーションの 夢を見るか?

Slackへの通知> 組み込みである > 組み込み、フォーマットがしょぼいのでPRした……

> スルー😢

> ぼくのforkをビルドすればイケます

Page 44: Consul は 全自動オーケストレーションの 夢を見るか?

ELBっぽい何か

Page 45: Consul は 全自動オーケストレーションの 夢を見るか?

動的ロードバランサーと言う夢> ロードバランサーには夢がある > NginxやPoundの設定を動的書き換えとか > mod/ngx_mrubyを使うとか

Page 46: Consul は 全自動オーケストレーションの 夢を見るか?

> Automatic Load Balancer > Serfでも無論できます > 「Webサーバの増減」なのでもしかしたら、単にバックエンドのNginxが死んだだけとかだとダメ……

> http://blog.glidenote.com/blog/2013/10/30/serf-haproxy/

Serf+HAProxyで作る

Page 47: Consul は 全自動オーケストレーションの 夢を見るか?

consul-template

Page 48: Consul は 全自動オーケストレーションの 夢を見るか?

consul-template> hashicorp公式 > consulのイベントを監視し、サービス追加、ノード追加、その他のタイミングでファイル更新 > ノードの情報からテンプレートを作れる > 一緒にコマンドを打てる(reloadとか)

https://github.com/hashicorp/consul-template

Page 49: Consul は 全自動オーケストレーションの 夢を見るか?

具体的な奴> Solrのクラスタを組みたい > 前段のLBはNginxにした > バックエンドのSolrスレーブは横にスケールさせたい…… > ポチポチと追加する?

Page 50: Consul は 全自動オーケストレーションの 夢を見るか?

こう言うテンプレートupstream solr_slaves { {{range service "solr@pepabo-dc" "passing"}} server {{.Address}}:{{.Port}};{{end}} }

server { listen 8983; server_name _;

proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host;

location / { proxy_pass http://solr_slaves; }

}

Page 51: Consul は 全自動オーケストレーションの 夢を見るか?

こう言うテンプレートupstream solr_slaves { {{range service "solr@pepabo-dc" "passing"}} server {{.Address}}:{{.Port}};{{end}} }

server { listen 8983; server_name _;

proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host;

location / { proxy_pass http://solr_slaves; }

}

Page 52: Consul は 全自動オーケストレーションの 夢を見るか?

こうじゃ$ /usr/local/bin/consul-template \ -consul 127.0.0.1:8500 \ -template \ '/usr/local/consul-templates/nginx-solr.conf.ctmpl: /etc/nginx/dynamic-conf.d/solr.conf: systemctl reload nginx'\ -log-level debug ……

長さは、厳しい……

Page 53: Consul は 全自動オーケストレーションの 夢を見るか?

こう言うのができるupstream solr_slaves {

server 10.0.12.34:8983; server 10.0.12.56:8983; server 10.0.12.78:8983; }

server { listen 8983; server_name _;

proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host;

location / { proxy_pass http://solr_slaves; }

}

Page 54: Consul は 全自動オーケストレーションの 夢を見るか?

通知する> 変更したら通知して欲しい > シェルとかでラッパーを噛ませば良し

Page 55: Consul は 全自動オーケストレーションの 夢を見るか?

良かったこと> 動的にメンバを追加削除できる(少なくともAPI的なキックポイントがある) > ヘルスチェックをしてくれる > この2点の要件を難なく満たす動的LBが、結構あっさりと作れるぞ?

Page 56: Consul は 全自動オーケストレーションの 夢を見るか?

厳しいなと思うこと> Goのテンプレート記法慣れなすぎる > ピンポイントでLBとかに使うのはいいけど……、 > あんまり凝ると無限にconsul-templateのデーモンができるのでは……

Page 57: Consul は 全自動オーケストレーションの 夢を見るか?

そして伝説へ……

Page 58: Consul は 全自動オーケストレーションの 夢を見るか?

Populus

Page 59: Consul は 全自動オーケストレーションの 夢を見るか?
Page 60: Consul は 全自動オーケストレーションの 夢を見るか?

populus> Consul event definition DSL (仮) > Senatus Populusque Romanusから取った > 名作ゲームとは無関係です……

Page 61: Consul は 全自動オーケストレーションの 夢を見るか?

Consulと以下のことをします> consul watch プロセスの立ち上げと監視 > master node に一台だけ立ち上げ > イベントごとの処理を定義するDSL > 通知、ファイル生成、コマンド発行……ぐらいはする

Page 62: Consul は 全自動オーケストレーションの 夢を見るか?

具体的なDSL

Page 63: Consul は 全自動オーケストレーションの 夢を見るか?

中身> specinfra で リモートコマンドを発行 > ぼくもspecinfra一派になりました

> open3でconsulプロセスを立ち上げて監視 > なるべくなるべく標準ライブラリ > Threadやinstance_evalがいっぱいだ~~~~

Page 64: Consul は 全自動オーケストレーションの 夢を見るか?

課題> まだ consul watch -type event しか対応していない……………… > せっかくのConsulなのに単一のマスターノードが必要。いいのかな…… > Consulなので、アクティブスタンバイ構成にするのは楽ではある

> なんかロバスト感に不安はある…… > 枯れてない、どころか俺が作った

Page 65: Consul は 全自動オーケストレーションの 夢を見るか?

demo

https://cloud.githubusercontent.com/assets/91011/7214167/8127b948-e5d9-11e4-9fe3-6be611cd47af.gif

Page 66: Consul は 全自動オーケストレーションの 夢を見るか?
Page 67: Consul は 全自動オーケストレーションの 夢を見るか?

TODOs> とりあえず足りてない機能を…… > ファイルまだ生成できないし…… > checks, nodes ぐらいはwatchしたいし…… > あと、インストールが普通に考えて大変なので omnibus にしたいな~

→さっきできました!

Page 68: Consul は 全自動オーケストレーションの 夢を見るか?

絶賛開発中> https://github.com/udzura/populus

Page 69: Consul は 全自動オーケストレーションの 夢を見るか?

まとめ

Page 70: Consul は 全自動オーケストレーションの 夢を見るか?

Consulはただの「Nagiosの代替」

ではない

Page 71: Consul は 全自動オーケストレーションの 夢を見るか?

コードの力で 複雑なサービスディスカバリにも

対応できる

Page 72: Consul は 全自動オーケストレーションの 夢を見るか?

Consulが解決する課題は 多いが、

検証がまだまだ必要

Page 73: Consul は 全自動オーケストレーションの 夢を見るか?

Thanks> @hiboma さん > 彼のアドバイスが無ければここまで早く導入が終わらなかったと思います……

Page 74: Consul は 全自動オーケストレーションの 夢を見るか?

PR

Page 75: Consul は 全自動オーケストレーションの 夢を見るか?

Consulを全力で使える仕事あります

> GMOペパボは福岡/東京ともにエンジニアを募集中です。 > アプリケーション/インフラ両方です! > 詳細は:http://pepabo.com/recruit/career/

Page 76: Consul は 全自動オーケストレーションの 夢を見るか?

併せて読みたい

> OpenStack基盤との組み合わせてオペレーションの破壊的な進化が実現できる(かも)(まだ分かんないよ?)

Page 77: Consul は 全自動オーケストレーションの 夢を見るか?

注目の求人minne 基盤エンジニア

Page 78: Consul は 全自動オーケストレーションの 夢を見るか?

ぼくらと やっていきませんか

Page 79: Consul は 全自動オーケストレーションの 夢を見るか?

EOF