Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
etcd見張るやつ 
Dockerで動的ロードバランサについ 
て考えた 
@kamekoopa
お前 is 誰 
けーえむ / @kamekoopa 
ただのプログラマ 
Java, PHP, Scala, Python 
Play2とかが好き 
最近触れてない 
ボルダリングが上達しない 
ミニ四駆
Docker使ってますか? 
いろいろ便利 
プロセスの稼働環境を常にクリーンに 
構築できる 
環境をバージョン管理可能 
冪等がなんちゃらとか完全に気にしな 
くて良い 
※ 詳しい説明は省きます
マルチホストでDocker 
webアプリとか乗っけるならやっぱ 
りリバースプロキシとかで負荷分 
散したい 
Dockerでマルチホスト 
一気に難易度上がる感 
スケジューリング 
サービスディスカバリ
マルチホストでDocker 
どのホストへ配置するか 
どのホストに配置されるかは分からな 
い 
配置するホスト固定する? 
スケールアウトしづらい 
デプロイ方法はどうするのとか 
にも絡む
マルチホストでDocker 
あるコンテナがどのホストで動 
いているか 
ホストとポート固定する? 
前述のスケールアウトの問題 
ポートが衝突するので同一ホストで2インスタ 
ンス以上立ちあげられない
マルチホストでDocker 
あるコンテナがどこのホストの 
どのポートで立ち上がるかを静 
的に決めるのは難しい 
立ち上がったコンテナの状況に 
応じて動的に設定されるリバー 
スプロキシの欲しさが高まる
マルチホストでDocker 
インターネットを探してみてもあ 
まり知見が見当たらない 
色々ググってたら以下のツール 
が見つかった 
Registrator 
etcd
Registrator 
Dockerコンテナが立ち上がったり 
死んだりするのを監視して、変化 
があったらetcdに書き込む 
各コンテナホストで立ち上げる 
これ自体もDockerコンテナで実 
行するのでセットアップが楽
etcd 
分散KeyValueStore 
各コンテナホストの状況を集約 
する所 
耐障害性がある 
割と早いらしい
動的リバースプロキシ 
コンテナを適当にデプロイする 
Registratorがetcdに書き込む 
あとはetcdの内容を適当なリバー 
スプロキシの設定へ反映できれば 
良さそう?
なら作ろう! 
と思ったけどconfdというものが既 
にあった。
confd 
etcdとかを見張って、その内容に 
応じて設定ファイルを書き換える 
書き換える設定ファイルはgoの 
templateの書式で記述する 
インターバルで見張るモード 
etcdをwatchして変更があった瞬 
間に駆動するモー...
ということで 
コンテナを適当にデプロイする 
Registratorがetcdに書き込む 
confdにetcdの内容を元にnginx 
の設定ファイルを生成させる 
で出来そう!
と思ったら(2回目) 
confdの挙動がちょっとアレっぽい 
保持してるキャッシュが適切に 
クリアされてない 
etcdのキーが削除された時に適切にフ 
ァイルが生成されない 
チェックコマンドが実質的に意 
味をなしてなさげ 
詳しく書く...
仕方ないので 
簡易版confdみたいなの作ってみた 
https://github.com/kamekoopa/ 
kvwatcher 
pythonなのでjinja2テンプレート使っ 
てます 
docker hubにあげてあるので
でpullできます
試し方 
どっかにetcd構築する 
コンテナホストでRegistratorを 
立ち上げて、さっき作ったetcd 
を見るようにする
試し方 
kvwatcherをpullしてrun
とそれに従ったテンプレー 
トファイルが必要 
ギッハブのプロジェクトの	
デ 
ィレクトリ配下見てもらえれば何となくわかる 
と思います
デモ 
作る余力がなかった(´・ω・`)
まとめ 
nginxを利用した動的リバースプ 
ロキシ 
サービス登録をRegistrator 
バックエンドをetcd 
設定への反映をconfd
まとめ 
実際に稼働中サービスで試した 
わけじゃないので問題は出てく 
るかもしれない 
あくまで実験 
nginxの設定ドンドコ書き換えて 
reloadしまくるし 
confdはまだちょっと動きが怪し 
そう(2014-12-03時点)
Upcoming SlideShare
Loading in …5
×

Kvwatcher

V社LT大会用

  • Be the first to comment

Kvwatcher

  1. 1. etcd見張るやつ Dockerで動的ロードバランサについ て考えた @kamekoopa
  2. 2. お前 is 誰 けーえむ / @kamekoopa ただのプログラマ Java, PHP, Scala, Python Play2とかが好き 最近触れてない ボルダリングが上達しない ミニ四駆
  3. 3. Docker使ってますか? いろいろ便利 プロセスの稼働環境を常にクリーンに 構築できる 環境をバージョン管理可能 冪等がなんちゃらとか完全に気にしな くて良い ※ 詳しい説明は省きます
  4. 4. マルチホストでDocker webアプリとか乗っけるならやっぱ りリバースプロキシとかで負荷分 散したい Dockerでマルチホスト 一気に難易度上がる感 スケジューリング サービスディスカバリ
  5. 5. マルチホストでDocker どのホストへ配置するか どのホストに配置されるかは分からな い 配置するホスト固定する? スケールアウトしづらい デプロイ方法はどうするのとか にも絡む
  6. 6. マルチホストでDocker あるコンテナがどのホストで動 いているか ホストとポート固定する? 前述のスケールアウトの問題 ポートが衝突するので同一ホストで2インスタ ンス以上立ちあげられない
  7. 7. マルチホストでDocker あるコンテナがどこのホストの どのポートで立ち上がるかを静 的に決めるのは難しい 立ち上がったコンテナの状況に 応じて動的に設定されるリバー スプロキシの欲しさが高まる
  8. 8. マルチホストでDocker インターネットを探してみてもあ まり知見が見当たらない 色々ググってたら以下のツール が見つかった Registrator etcd
  9. 9. Registrator Dockerコンテナが立ち上がったり 死んだりするのを監視して、変化 があったらetcdに書き込む 各コンテナホストで立ち上げる これ自体もDockerコンテナで実 行するのでセットアップが楽
  10. 10. etcd 分散KeyValueStore 各コンテナホストの状況を集約 する所 耐障害性がある 割と早いらしい
  11. 11. 動的リバースプロキシ コンテナを適当にデプロイする Registratorがetcdに書き込む あとはetcdの内容を適当なリバー スプロキシの設定へ反映できれば 良さそう?
  12. 12. なら作ろう! と思ったけどconfdというものが既 にあった。
  13. 13. confd etcdとかを見張って、その内容に 応じて設定ファイルを書き換える 書き換える設定ファイルはgoの templateの書式で記述する インターバルで見張るモード etcdをwatchして変更があった瞬 間に駆動するモード
  14. 14. ということで コンテナを適当にデプロイする Registratorがetcdに書き込む confdにetcdの内容を元にnginx の設定ファイルを生成させる で出来そう!
  15. 15. と思ったら(2回目) confdの挙動がちょっとアレっぽい 保持してるキャッシュが適切に クリアされてない etcdのキーが削除された時に適切にフ ァイルが生成されない チェックコマンドが実質的に意 味をなしてなさげ 詳しく書くには紙面が足りない
  16. 16. 仕方ないので 簡易版confdみたいなの作ってみた https://github.com/kamekoopa/ kvwatcher pythonなのでjinja2テンプレート使っ てます docker hubにあげてあるので
  17. 17. でpullできます
  18. 18. 試し方 どっかにetcd構築する コンテナホストでRegistratorを 立ち上げて、さっき作ったetcd を見るようにする
  19. 19. 試し方 kvwatcherをpullしてrun
  20. 20. とそれに従ったテンプレー トファイルが必要 ギッハブのプロジェクトの デ ィレクトリ配下見てもらえれば何となくわかる と思います
  21. 21. デモ 作る余力がなかった(´・ω・`)
  22. 22. まとめ nginxを利用した動的リバースプ ロキシ サービス登録をRegistrator バックエンドをetcd 設定への反映をconfd
  23. 23. まとめ 実際に稼働中サービスで試した わけじゃないので問題は出てく るかもしれない あくまで実験 nginxの設定ドンドコ書き換えて reloadしまくるし confdはまだちょっと動きが怪し そう(2014-12-03時点)
  24. 24. まとめ ConsulやSkydns2とかもあるらし い dnsとしてサービスディスカバリをや る dnsクライアントがSRVレコードを解釈 できる必要がある
  25. 25. おわり ありがとうございました

×