#consulcasual 1に行ってみた
こんにちは。smallpalaceです。
Consulは使ったことないけど名前解決まわりを自動化したい人用のHashiCorp製品くらいの緩い認識でバリバリ使っている人の話を聞きに行こうかなと思って行ってみました。参加前時点だと、HashiCorp製品は手動オペレーション完全排除可能な環境のみに適している印象。
嬢ちゃん(4)はおばあさま(神)にお願いしておきました。超ありがたや。
ハッシュタグなどは以下になります。
#consulcasual hashtag on Twitter
Consul Casual Talks #1 - connpass
-----------------------
ぜんぶつさん、概要を話してくださると。
Consul by HashiCorp ~サービス・ディスカバリ入門~ - Qiita
Consulはデータセンタに革命をもたらしたい製品群のうちの一つ、インフラ上のサービス設定とサービスディスカバリーのためのもの。
役割とipやポート単位で管理できるっぽいので名前だけでもないっぽいようだ。
エージェントが必要な模様。ヘルスチェックを自分でやってサーバに通知する。
通知の仕組みはいろいろあるっぽい
あー、監視システムなのね。zabbixとかのかわりか。
集めたデータをどこにおくか、階層的なkeyvaluestoreらしい。3台構成で動かさなければならないと。冗長のしくみありでリーダーを自動選出。Gossipプロトコルつかってるので大規模もいけるらしい。
Consulは運用管理が楽ちんらしい。開発元の思想が”いかに楽に多くを管理するか”ということらしいので。
いれかたはバイナリを解凍しておいとけばおっけー
シンプルなconfをおいてhandlerで状態変化を検知後にスクリプトを実行するなども可能。
Consul Templateという楽ちんなやつがある。設定ファイルを自動生成してプログラムを再起動とかできるらしい。hostsかきかえるとかも。バイナリ配布されているっぽい。
ドライラン機能があるので実行前後のチェックはそれでできるとのこと。
DNS機能は数千台とかのレベルだとトラフィックがバカにならないのでは、ということでした。
---------------------------
@studio3104 | Prometheus meets Consul |
・Consul ACL System
まだためしてる段階。未来につかうことを考えた場合に、予期しないトラブルを制限したいと。consul execで要るファイルけしちゃう事故のこわい例が。
acl関連の項目がいろいろ。とくに重要な3つ
acl_datacenter 所属する場所を宣言
acl_default_policy 明示しなければホワイトリストに。
acl_master_token
マルチデータセンタで使うときの話
トークンを明示しないとAnonimous権限になり何も実行できなくなる
ドキュメントにはReadがあればいいと書いてあるが実際はwriteがないと動かない模様。
・Whats prometheus?
モニタリングシステムの一つらしい
プルタイプアーキテクチャ
各サーバにhttpいれといてプロメテウスサーバがポーリングしにいく
プロメテウスにはカタログAPIと連携する機能をサポートしている
複数のサービスで統合監視ツールとして使っているのでNGINXの再起動したいけど全部でやってしまわないようにACLが必要になったそうです。
-------------------------------
GMOのひとのプロダクションでやってるはなし。rubyこみったのかた。
Consul in Production // Speaker Deck
ハンドメイド作品売買のminneの裏側。
DCの機能はつかってないOpenStack9割。consul+dnsmasqでやってる
strecherをつかったデプロイ(省略
おまけ、systemdでデーモン化してつかってるそうです
NewRelicのホスト選定をConsulつかってやってる、一台たかいけど交渉したら下がった。便利だけどたかい
roleのなかから1台だけ有効にしたかった。ディプロマットというライブラリをつかってアクセスしてる。
sidekiq-schedulerとか、cronは1vmがSPOFになりがちなのでやめたい。クラスタの中の1台だけジョブの定期実行を有効化するのにconsulつかってる。ホストが死んだらクラスタのなかでワーカーをプロモートする仕組みを作り中。
ロードバランサのDNS更新にもつかってる。AWSからOpenStackに引っ越すときにつかった。collectorというみどるぇあをつかっている。route53を更新するもの。consul watchでcollectorを監視してイベントをフックしてcheckhttpみたいなんでそれぞれのLBの自分がしんでたらconsulのイベント通知がでるのでそこを切り離すというのをやってる。
nginxのupstream自動更新とか
systemdとconsul templateの組み合わせの地雷があるそう。
ルーティング間違えたnodeをconsulのなかにいれるとクラスタ全体が不安定になりnginxが1分間に3,4回reloadするみたいなことに。nginx_mrubyでメモリリークバグがありreloadで落ちるということになったそうです。
vmを束ねて一つのシステムとして扱うことが可能になる
consul maintを活用できてないのでいいかんじにvmを退避するとかしたい
全自動なめらかサーバリソース制御くん、全自動なめらかジョブスケジューラを今作ってるらしい
Reloadすくなくするとかは?
→こちらは一回だけしたいのにイベント発火の関係上3かいくらいになったりする。BGデプロイしたときにreloadしすぎてこまっている
構成管理ツールとのすみわけ?
→完全に分離している。それだけは独立して一切さわらない。
別名や別のディレクトリで運用するなど
nginxmrubyで独自に管理もできるがcosulでやってる理由は?
→nginxmrubyの機能は同僚がテスト開発中
信頼できるホスト情報をどこでかんりするか?もう一方のあらかじめホスト情報とうろくするものとそのほかと?
→consulとかほかのAPIのホスト情報の祖語の扱いは2つを合うか確認して信頼性を担保している。なやみどころ、
------------------------------------
平和なConsulCluster
ふじわらさん@カヤック
平和なConsul Cluster運用 / consul-casual-1 // Speaker Deck
3台以上のところでConsulつかっている
活用事例、
1.InternalDNS
ノード名などなどに。
まともにやると負荷になるが、dnsmasqというローカルホスト全台でうごかして、.consulドメインのなまえ解決はconsul agentへ。ttlのあいだはローカルをみにいく。
2.maintでメンテナンス
AMIつくるときにつかう、
デーモンツールで起動したくないときにつかうなど
3.Stretcherによるデプロイ、chef実行
デプロイツール、S3にtarをおいといてとってきて展開してくれるやつ。
Chef-serverをすててStretcher+Chef-soloにしたと。どこもおなじようなことしてるんだな。
ConsulでroleにタグをつけとくとカタログAPIで解決できると。jsonかえってくる。
Daemontools管理プロセスを再起動したいとかホストの一覧かえってきたやつを正規表現にまっちしたやつだけ再起動さすみたいな。
WebSocketでうごくbotを排他制御するのをConsul lockでロックを取得できたやつだけがうごくやつをうんようしてる。Readerチェンジがおきるとロックが解放されちゃうので注意。
平和に運用するためのポイント
raftアルゴリズムをよくみてつかう
リーダー選出に過半数の合意がひつよう(だから半分おちると合意がとれない、奇数台でうごかすのがいいと。
t2.mediamとかでもうごくがkvうごかすとメモリは食う。tmpfsつかってDiskIOの影響を回避している。
Rollingupgradeが可能と。
オペミスしすぎるとクラスタが回復不能になる。
Reader入れ替えは2~4秒で可能らしい。
怖い話、catしたあとにgrepとかの結果をkvsにいれるとか肥大化してしまう
ちゃんと起動してないのに過半数以上おとしてしまった→崩壊
崩壊したらどうすれば
1.落ち着く
2.サーバを全部とめる
3.データを全部消す
4.serverを-bootstrap-exect Nで起動
5.必要ならKVをバックアップから戻す
開発、本番用にクラスタ管理側もわけてる、execとかこわいので。
サービスのDNSに依存さすのは崩壊こわいならやめたほうがいいらしい。
---------------------------------
Consulでロードバランサを管理するはなし
cubicdaiya@mercari
nginxとoepnestyつかってる
・Service discovery
内部リクエストのエンドポイントとしてDNS-RRとかAPIなど
いろんなサブシステムがあって管理ツール、バッチ、ウェブアプリ、、http経由でロードバランサを経由してコールするときの内部DNSとして
サービスをリストする。ロードバランサのノードをあつめてくるときにもつかってる
デプロイぼっとが時間になるとデプロイしますかときいてくる、yesとこたえるとデプロイがはじまる
メルカリにおける継続的なapplication改善を支える技術、というのに詳細が書いてある
メルカリではConsulイベントとストレッチャーをいまのところつかっている
consulのeventは100バイト以下におさえて配布したほうがいいらしい。Triggerとかつかうと解決できるらしい
Sessionチケットで48バイトになってないかのチェック
→最初の時点でチェックいれただけ
--------------------------------
終了。ありがとうございました!
レベルが高くて脳みそ疲れました。
けっこうコツがいるっぽいですね。
では、見ていただいてありがとうございました(・ω・)ノ