第60回： SerfとConsulでシステム運用を楽しくしよう！ に参加しました。 #hbstudy

## 前置き ##
hbstudy第60回： SerfとConsulでシステム運用を楽しくしよう！ に参加しました。
まだメモ書き状態で雑ーーなところも多々ありますが、とてもおもしろい勉強会だったので勢いで公開。ぼちぼち編集するかもしれないし、されないかもしれません。どっちやねん。

次回は 2014/8/9(土) 13:30～20:00 です。ご興味あればぜひ。
- [hbstudy#61 トラブル☆しゅーたーず #08](http://heartbeats.jp/hbstudy/2014/07/hbstudy61.html)

## 概要 ##
- 2014/07/20 14:00-16:30
- [イベントページ(compass)](http://connpass.com/event/7322/)

## 発表タイトル/講師 ##
- 「SerfとConsulで運用を楽しくしよう！」[@zenbutsu](http://qiita.com/zembutsu)さん
- 「consulについて」[@ijin](https://twitter.com/ijin)さん

## 「SerfとConsulで運用を楽しくしよう！」[@zenbutsu](http://qiita.com/zembutsu)さん ##
- JTF再演かな？→ver.1.02になってた。
<iframe src="//www.slideshare.net/slideshow/embed_code/37218036" width="427" height="356" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px 1px 0; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> <div style="margin-bottom:5px"> <strong> <a href="https://www.slideshare.net/zembutsu/re-is-the-order-an-automation-2nd" title="Re: ご注文は自動化ですか？[2]" target="_blank">Re: ご注文は自動化ですか？[2]</a> </strong> from <strong><a href="http://www.slideshare.net/zembutsu" target="_blank">Masahito Zembutsu</a></strong> </div>

- 最新版がSlideShareに上がったので差し替えました。下記は旧ver.
[JTF2014 ver](http://www.slideshare.net/zembutsu/is-the-order-an-automation-of-operation-and-monitoring)

### 最初にDemo ###
Serfで3台のクラスタを制御する

Serfノードx3を起動し、3台構成のクラスタを構成するまでのデモ。
にあるように、下記のようにするだけでクラスタ構築完了できる。

```bash
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](https://twitter.com/ijin)さん ##
- [Walti.io](http://walti.io/) CTO
- [トラブル☆しゅーたーず](http://heartbeats.jp/hbstudy/2014/07/hbstudy61.html)の主催メンバー

- 資料はまだ公開されていませんでした。ベースになった発表資料はこちら
<script async class="speakerdeck-embed" data-id="e07317d0dc040131a0982229a5c1e016" data-ratio="1.33333333333333" src="//speakerdeck.com/assets/embed.js"></script>


### 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に関して５倍程度速度が向上している
- 　　　　　　PUTについては4倍程度速度が向上している
- 　　CONSUL-API
- 　　　　Goで書かれている