インフラ最新事情 – 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