前置き
hbstudy第60回: SerfとConsulでシステム運用を楽しくしよう! に参加しました。
まだメモ書き状態で雑ーーなところも多々ありますが、とてもおもしろい勉強会だったので勢いで公開。ぼちぼち編集するかもしれないし、されないかもしれません。どっちやねん。
次回は 2014/8/9(土) 13:30~20:00 です。ご興味あればぜひ。
- hbstudy#61 トラブル☆しゅーたーず #08
概要
- 2014/07/20 14:00-16:30
- イベントページ(compass)
発表タイトル/講師
「SerfとConsulで運用を楽しくしよう!」@zenbutsuさん
-
JTF再演かな?→ver.1.02になってた。
最新版がSlideShareに上がったので差し替えました。下記は旧ver.
JTF2014 ver
最初にDemo
Serfで3台のクラスタを制御する
Serfノードx3を起動し、3台構成のクラスタを構成するまでのデモ。
にあるように、下記のようにするだけでクラスタ構築完了できる。
1台目
$ serf agent &
2台目
$ serf agent &
$ serf join 192.168.10.1
↑1台目のIP
3台目
$ serf agent &
$ serf join 192.168.10.1
↑1台目のIP
確認
$ serf members
発表内容について
詳細は資料を見ていただくとして、気になったところを並べていきます。
盛り沢山な内容でしたが、前佛さんのエンジニアとしての思想がところどころに散りばめられていて、飽きずに楽しく聞けました。
オーケストレーションツールとは?
Dockerの話(前置き)
使うツールの技術背景を知ってから使うべき
network namespaceとかね
でも最初は気にせずどんどん触ってよう!Serf/ConsulはImmutable Infrastructureの文脈から産まれた
オーケストレーションツールの一種
Serf/Consulは他と比較してもシンプル
オーケストレーション以外はなにもしてくれないオーケストレーションツールとは?
一斉に何かを処理するツール
2.Serf基礎編
- Serfの概要
- 軽量簡単
- 特徴
- メンバ管理
- 障害検知
- カスタムイベント
- 1.メンバ管理
- マスタなし=全て並列
- メンバの加入・離脱は自動
- 加入する場合はクラスタに加入申請する
QAにあったやりとり
- Serfノードは互いに状態を監視、不具合のあるノードを検知すると、クラスタから切り離す
- 状態の監視はノード内のランダムな相手と行う(らしい) ゴシッププロトコルの特徴。
- 1000台オーバーのノードの場合、コマンドの伝搬にはどの程度かかりますか?
- serf agentのdiscoverオプションを指定することで、起動時にjoinするクラスタを探しに行ってくれるようになる
consul
- サービス検出
- Serviceという単位でラベルを貼れる
- Tips
- ローカルのDNSのような機能がある
- BlockingQuery
- nodeのダウンを検知して◎◎する
- といったeventを定義できる。ただし、API経由でしか操作できない。
ここまでのまとめ
- 学習コストが低い
- 既存の仕組みを変更しない
導入がとても容易
Consul編
メモがロストしてしまいましたm()m
「consulについて」@ijinさん
- Walti.io CTO
トラブル☆しゅーたーずの主催メンバー
資料はまだ公開されていませんでした。ベースになった発表資料はこちら
Consul
- FAILURE DETECTION
- MULTI DC
- KVS
動的な設定情報置き場
TECHNOLOGY
ARCHITECTURE
Server Mode or Client Mode
ServerにはLeaderがいて、クライアントからのリクエストは、全てLeaderにフォワードされる
クラスタはゴシッププロトコルで相互に通信する
CONSISTENCY
CAP Theorem
CP: 一貫性に重きを置く
consesus protocol using raft
read/write
Mostly Stlogly Consistent
Stlogly Consistent
leaderとその他serverで設定値に差分がないかを確認してまわるため
Roundtripなアクセスが発生する
stale
どのserverでも直接回答を返す。50ms以内に終息する
Deploymentable
3-5台のservernodeがあればいいよね
JEPSEN TESTING
Partition tolerance
CONSUL AGENT
Nodes & Services
Node: 名前, Service: roleとかtag
DNS Interface
Service Lookup
HTTP API
おおざっぱにendpoint x7
keyvalue
agent endpoint : 各Serverのagentに直接問い合わせる
HEALTH CHECK
BLOCKING QUERIES: 状態変更の即時検知 #WEBUIあるよ
USE CASE
ansible dynamic inventoryで管理対象nodeのrole付ができる
mha: フェイルオーバー機能などを持つ
BENCHMARK
v0.2.0 -> v0.3.0
GETに関して5倍程度速度が向上している
PUTについては4倍程度速度が向上している
CONSUL-API
Goで書かれている