インフラ最新事情 – OSSをフル活用したインフラ構築術 – (仮) by長谷川祐介(grasys, Inc.)
・grasys インフラ屋
・2015年1月にGoogle for Work Partner に
・主戦場はモバイル・スマートフォン
→山手線回ると基地局が変わるため通信が何回か切れる→そのことも考慮してゲームは作るべき
・ライブラリをいじるのであればCentOSを辞めてDebian/Ubuntuにしよう
grasysにて利用しているOSS
・PerconaXtraDB
InnoDBストレージをベースにマルチコア環境でより高速に動作するようにした
・MaxScale
データベース向けのプロキシソフトウェア
・tmux
端末多重化ソフトウェア
・HAProxy
多機能なプロキシサーバ(ロードバランスも可能)
・GunicornDjango
Gunicorn (Green Unicorn)
Django:Pythonで実装されたWebアプリケーションフレームワーク
・clutils
consul/serfの自動設定に利用
・clctl
オーケストレーションツール
・terraform
コードでインフラを管理するためのツール
これがないと仕事したくないくらいすごいらしい
・Serf
サービス検出(ノード単位)とオーケストレーションツール
grasysでは廃止予定
・Consul
Serfにサービス検出(DBやWEBソフトなどより具体的にできる?)を追加したようなもの
またサーバをタグ付けして、そのタグを基にデータを取得できたりする
・SerfとConsulの範囲

興味があったものをざっくり調べたり、使ってみた
Terraform
・Hashicorp社(Vagrant・Packer・Serf・Consulを作っている会社)製
・2014年7月より。開発スピードが早く、まだ枯れてはいない
・サーバ構成のバージョン管理、コード管理が可能
Serf
クラスタを作成して、クラスタのメンバ内で監視し、状況に応じてコマンド実行などが可能
Consul
障害検知は監視サーバ主体であったため
異常検知までにタイムラグがあった
ノード主体で検知するためより迅速に検知し、復旧のためのアクションも可能
(アクション不要であればエージェントレスの対応も可能)
ConsulのデータはConsulサーバによってKVSに保存され
それはWebUIやenvconsulやWebAPIを利用して閲覧可能
root@hostname:/usr/local/src# wget -d https://releases.hashicorp.com/consul/0.6.3/consul_0.6.3_linux_amd64.zip
...
root@hostname:/usr/local/src# unzip consul_0.6.3_linux_amd64.zip
Archive: consul_0.6.3_linux_amd64.zip
inflating: consul
root@hostname:/usr/local/src# mv consul /usr/bin/
root@hostname:/home/shimizu# consul agent -data-dir /tmp -server -bootstrap-expect 3
==> WARNING: Expect Mode enabled, expecting 3 servers
==> Starting Consul agent...
==> Error starting agent: Failed to get advertise address: No private IP address found
root@hostname:/home/shimizu# consul agent -data-dir /tmp -bind x.x.x.x -server -bootstrap-expect 3
==> WARNING: Expect Mode enabled, expecting 3 servers
==> Starting Consul agent...
==> Starting Consul agent RPC...
==> Consul agent running!
Node name: 'hostname'
Datacenter: 'dc1'
Server: true (bootstrap: false)
Client Addr: 127.0.0.1 (HTTP: 8500, HTTPS: -1, DNS: 8600, RPC: 8400)
Cluster Addr: x.x.x.x (LAN: 8301, WAN: 8302)
Gossip encrypt: false, RPC-TLS: false, TLS-Incoming: false
Atlas: <disabled>
==> Log data will now stream in as it occurs:
2016/03/16 00:16:55 [WARN] memberlist: Binding to public address without encryption!
2016/03/16 00:16:55 [INFO] serf: EventMemberJoin: hostname x.x.x.x
2016/03/16 00:16:55 [WARN] memberlist: Binding to public address without encryption!
2016/03/16 00:16:55 [INFO] serf: EventMemberJoin: hostname.dc1 x.x.x.x
2016/03/16 00:16:55 [INFO] raft: Node at x.x.x.x:8300 [Follower] entering Follower state
2016/03/16 00:16:55 [INFO] consul: adding LAN server hostname (Addr: x.x.x.x:8300) (DC: dc1)
2016/03/16 00:16:55 [INFO] consul: adding WAN server hostname.dc1 (Addr: x.x.x.x:8300) (DC: dc1)
2016/03/16 00:16:55 [ERR] agent: failed to sync remote state: No cluster leader
2016/03/16 00:16:56 [WARN] raft: EnableSingleNode disabled, and no known peers. Aborting election.
2016/03/16 00:17:12 [ERR] agent: coordinate update error: No cluster leader
...
### 別コンソールで ###
root@hostname:/home/shimizu# consul members
Node Address Status Type Build Protocol DC
hostname x.x.x.x:8301 alive server 0.6.3 2 dc1
ここから consol agent -join オプションを利用してクラスタを作成していく
サービスのヘルスチェックなどは /etc/consul.d/ にファイルをおき、起動オプションに -config-dir=/etc/consul.d を加える
参考
オーケストレーション入門 – 多種多様化するサービスをConsulで連携させる
Consul 使ってみる
CONSUL-CONFIGURATION
