SlideShare a Scribd company logo
1 of 43
Download to read offline
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
Serf という Orchestration ツール
March 25th, 2014
Naotoshi Seo @sonots
DeNA Co., Ltd.
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
2
自己紹介
・瀬尾 直利 @sonots
・DeNA Co., Ltd
・インフラのDev
・Rubyist
・OSS 活動家
・Fluentd コミッタ
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
⁃ グラフツール
⁃ HTTP POST するだけ
⁃ GrowthForecast の Ruby クローン
http://focuslight.github.io/
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
http://blog.livedoor.jp/sonots/archives/29646713.html
Yohoushi
分散 Focuslight グラフツール
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
⁃ ログを処理するアプリケーション(or フレームワーク)
⁃ Ruby プラグインの仕組みが強力 (+250 plugins)
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
・
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
7
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
Serf(1)
8
⁃ Orchestration ツール
⁃ Vagrant で有名な Mitchell Hashimoto 氏が作
った go 製のツール
⁃ メンテナは同 Hashicorp の Armon 氏
http://www.serfdom.io/
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
オーケストレーション
9
Bootstrapping
OSのインストール作業 / Kickstart
Configuration
サーバの設定作業 / Chef、Puppet
Orchestration
サーバ群のクラスタリング
ロードバランサに追加したり、監視入れたり、サーバ管理ツー
ルに登録したり、という他のツールと連携するための作業
手でコマンド叩いたり。Serf を使ったり (New!)
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
Blue-Green Deployment
10
http://martinfowler.com/bliki/BlueGreenDeployment.html
ここの設定
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
インフラ作業あるある
新規サーバ1台投入するためには
1. OSインストール (AWSインスタンス立ち上げる、mbgaclone [1])
2. セットアップ (chef, puppet, touryo)
オーケストレーション作業も必要
1. サーバ管理ツールに登録 (admintool [1])
2. 監視ツールに登録 (Nagios, Zabbix)
3. メトリクス収集ツールに登録 (Ganglia, Munin)
4. DNS登録
5. LB 登録 (BigIP, nginx, HAProxy)
http://www.amazon.co.jp/dp/4774151114[1] mbgaを支える技術
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
12
⁃ オーケストレーション作業は 1台でも面倒
⁃ 100台入れ替える
⁃ 1日10 Blue-Green Deployment したい
手動とか
\(^o^)/オワタ
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
13
それ Serf で(ry
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
Serf の動作イメージ
14
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
serf agent の起動
15
$ serf agent -node=one
$ serf agent -node=two 
-bind=127.0.0.1:7947 -rpc-addr=127.0.0.1:7374
one two
$ serf members
one 127.0.0.1:7946 alive
$ serf members -rpc-addr=127.0.0.1:7374
two 127.0.0.1:7947 alive
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
serf join
16
$ serf join 127.0.0.1:7946 # join to one
$ serf members # one
one 127.0.0.1:7946 alive
two 127.0.0.1:7947 alive
$ serf members -rpc-addr=127.0.0.1:7374 # two
two 127.0.0.1:7947 alive
one 127.0.0.1:7946 alive
one two
join
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
17
A
D
B
C
1. join
D join
D join
※ Gossip プロトコルで伝搬
A join
B join
C join
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
18
A
D
B
C
1. join
D join
D join
※ Gossip プロトコルで伝搬
A join
B join
C join
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
イベントハンドラ
19
⁃ 任意のイベントで起動するスクリプトを登録できる
#!/bin/bash
# handler.sh
echo
echo "New event: ${SERF_EVENT}. Data follows..."
while read line; do
printf "${line}n"
done
$ serf agent -event-handler=$HOME/handler.sh
⁃ 環境変数 SERF_EVENTにイベント毎に別の値が入る
⁃ member-join, member-leave, member-failed, member-reap, user
⁃ STDIN にホスト名、IPアドレス 
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
具体例
20
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
Serfで/etc/hosts更新
21
https://github.com/kentaro/serf-hosts
A
BC
join
member-join
1. /etc/hosts にホスト名, IPアドレス追加
member-leave
1. /etc/hosts 該当行削除
同スクリプト 同スクリプト
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
SerfでHAProxyに登録
22
http://blog.glidenote.com/blog/2013/10/30/serf-haproxy/
HAProxy
Web2Web1
join
member-join
1. /etc/haproxy/haproxy.cfg 追記
2. /etc/init.d/haproxy reload
member-leave
1. /etc/haproxy/haproxy.cfg 該当行削除
2. /etc/init.d/haproxy reload
スクリプトなし スクリプトなし
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
サーバが起動したら
自動で監視設定
自動でサービスイン
23
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
Immutable インフラに適した
アーキテクチャ(持論)
24
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
25
Monitor
中央集権型 Agent型
Web1 Web2
web1.cfg
web2.cfg
Web1 Web2
agent agent
Monitor設定変
更なし
ホストが立ち上がると勝手に情報を送り始める
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
Agent 型
が適している
26
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
27
⁃ HAProxy ロードバランサ (中央集権)
⁃ MyDNS で DNSラウンドロビン (中央集権)
⁃ Big IP ロードバランサ (中央集権)
⁃ Ganglia リソースメトリクス (gmond, Agent 型)
⁃ Munin リソースメトリクス (中央集権)
⁃ Nagios 監視ツール (中央集権)
⁃ Sensu 監視ツール (Agent 型)
⁃ GrowthForecast, Focuslight グラフツール (Agent型)
⁃ Fluentd ログ収拾 (Agent 型)
いろんなツール
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
中央集権型ツールを
agent 型アーキテクチャに
こじつけ直すのが
28
Serf
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
思ったこと /
気になったことツラツラ
29
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
どのぐらいの時間で伝搬されるのか?
30
http://www.serfdom.io/docs/internals/simulator.html
⁃ 30ノードで1.25s、100ノードでも2sほど
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
イベントをどのノードに発火すべきか
31
⁃ 最初にどれかのノードに member-join イベントを
発火しなければならない。
⁃ DNSラウンドロビンを使うとかして、ランダムに選択
されるようにするとよさそう。
⁃ ※ もちろんその DNS の管理は serf で
A
D
B
C
DNSラウンドロビン
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
Event-handler script の更新は?
32
⁃ event handler スクリプトにバグがあるなどして更
新する必要があった場合に、serf クラスタ全体に撒い
て回らないといけない。
⁃ それこそ serf を使ってクラスタ全体を更新したい
⁃ が、更新するためのスクリプトがバグっている
⁃ 今までどおり capistrano かなにかで撒く?
⁃ ※ Immutable ならイメージを更新してデプロイ
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
監視をどのタイミングではずすべき?
33
⁃ member-leave, member-failed イベントで監
視を外す
⁃ すると、本当にサーバが死んだ時にアラート飛ばない
        ↓
⁃ サーバ down 監視以外を Serf で外す
⁃ サーバ down 監視を外すのは手動で(?)
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
34
⁃ 監視に入れるなどの処理は全て Serf でやっておく
⁃ サービスインはやらない
⁃ テストチームの作った自動QAで振る舞いをテスト
⁃ (主にオーケストレーション層のテスト)
⁃ 良きタイミングで別の仕組みでサービスイン?
いきなりサービスインは怖い?
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
Advanced
35
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
serf event
36
$ serf event [options] name [payload]
ex) serf event deploy 20140325
⁃ 環境変数 SERF_EVENTに user が、
⁃ 環境変数 SERF_USER_EVENT に name が入る
⁃ STDIN に payload が入る
⁃ ユーザーカスタムイベント
http://www.serfdom.io/docs/agent/event-handlers.html
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
serf monitor
37
$ serf monitor
⁃ 稼働中の serf agent に attach してログを見れる
⁃ serf agent のログレベルが warn でも、
⁃ serf monitor -log-level debug と指定すればデ
バグレベルで参照できる
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
serf tag
38
$ serf tags -set tag=value
$ serf tags -delete tag
⁃ ノードにタグを付ける
$ serf members
one 127.0.0.1:7946 alive tag=value
⁃ 環境変数 SERF_TAG_{TAG} に value が入る
⁃ ※ role は deprecated になりました
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
serf query
39
$ serf query [options] name [payload]
⁃ event と違い、レスポンス (STDOUT) を受け取る
⁃ クエリが終わるまで待ち続ける
⁃ ただし、timeout したら諦める
⁃ -tag tag=value オプションでタグを指定できる
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
serf query 応用例(1)
40
$ serf agent -event-handler=query:uptime=uptime
⁃ 全ホストから uptime コマンドの結果を集める
$ serf query uptime
Ack from 'one'
Response from 'one': 17:50 up 3 days, 2:52, 10 users, load
averages: 3.83 2.46 2.27
Total Acks: 1
Total Responses: 0
http://pocketstudio.jp/log3/2014/03/14/serf-0-5-0/
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
serf query 応用例(2)
41
$ serf agent -event-handler=query:sh=/bin/bash
⁃ event-handler に sh を登録
⁃ 任意のコマンドを実行できる
⁃ 全ホストで nginx reload とか、その他自由
⁃ ※ ただし、timeout したら諦める
$ serf query sh “service nginx reload”
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
まとめ 
42
⁃ Serf の紹介をしました
⁃ Immutable インフラには Agent 型があっている
⁃ サーバ増やした(減らした) → 設定ファイル修正して git
commit && push して deploy とかやってられない
⁃ Serf で中央集権型を Agent 型にしちゃうと捗る
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
43
Thank you

More Related Content

What's hot

OpenStackでつくる開発環境と外道塾
OpenStackでつくる開発環境と外道塾OpenStackでつくる開発環境と外道塾
OpenStackでつくる開発環境と外道塾
外道 父
 
Fluentd Meetup #2 @外道父 Fluentdを優しく見守る監視事例
Fluentd Meetup #2 @外道父 Fluentdを優しく見守る監視事例Fluentd Meetup #2 @外道父 Fluentdを優しく見守る監視事例
Fluentd Meetup #2 @外道父 Fluentdを優しく見守る監視事例
外道 父
 

What's hot (20)

Serf2Excel - Serf を実運用に活かす話 + Consul もあるよ
Serf2Excel - Serf を実運用に活かす話 + Consul もあるよSerf2Excel - Serf を実運用に活かす話 + Consul もあるよ
Serf2Excel - Serf を実運用に活かす話 + Consul もあるよ
 
Consulによる運用自律化体験ハンズオンとConsul活用事例紹介
Consulによる運用自律化体験ハンズオンとConsul活用事例紹介Consulによる運用自律化体験ハンズオンとConsul活用事例紹介
Consulによる運用自律化体験ハンズオンとConsul活用事例紹介
 
VagrantユーザのためのDocker入門
VagrantユーザのためのDocker入門VagrantユーザのためのDocker入門
VagrantユーザのためのDocker入門
 
インフラ自動化とHashicorp tools
インフラ自動化とHashicorp toolsインフラ自動化とHashicorp tools
インフラ自動化とHashicorp tools
 
ネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chefネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chef
 
consul & consul-alerts を使った監視システム (hbstyle-2015-01-08)
consul &  consul-alerts を使った監視システム (hbstyle-2015-01-08)consul &  consul-alerts を使った監視システム (hbstyle-2015-01-08)
consul & consul-alerts を使った監視システム (hbstyle-2015-01-08)
 
運用に自動化を求めるのは間違っているだろうか
運用に自動化を求めるのは間違っているだろうか運用に自動化を求めるのは間違っているだろうか
運用に自動化を求めるのは間違っているだろうか
 
Infinite Debian - Platform for mass-producing system every second
Infinite Debian - Platform for mass-producing system every secondInfinite Debian - Platform for mass-producing system every second
Infinite Debian - Platform for mass-producing system every second
 
OpenStackでつくる開発環境と外道塾
OpenStackでつくる開発環境と外道塾OpenStackでつくる開発環境と外道塾
OpenStackでつくる開発環境と外道塾
 
Dockerの基本と応用~快適コンテナライフを実現するArukas~
Dockerの基本と応用~快適コンテナライフを実現するArukas~Dockerの基本と応用~快適コンテナライフを実現するArukas~
Dockerの基本と応用~快適コンテナライフを実現するArukas~
 
マスタリング DEA/NG 第2版
マスタリング DEA/NG 第2版マスタリング DEA/NG 第2版
マスタリング DEA/NG 第2版
 
Drone.io のご紹介
Drone.io のご紹介Drone.io のご紹介
Drone.io のご紹介
 
activerecord-turntable
activerecord-turntableactiverecord-turntable
activerecord-turntable
 
すごく分かるwarden
すごく分かるwardenすごく分かるwarden
すごく分かるwarden
 
Ansible ではじめるサーバ作業の自動化
Ansible ではじめるサーバ作業の自動化Ansible ではじめるサーバ作業の自動化
Ansible ではじめるサーバ作業の自動化
 
Lagopus + DockerのDPDK接続
Lagopus + DockerのDPDK接続Lagopus + DockerのDPDK接続
Lagopus + DockerのDPDK接続
 
ZabbixのAPIを使って運用を楽しくする話
ZabbixのAPIを使って運用を楽しくする話ZabbixのAPIを使って運用を楽しくする話
ZabbixのAPIを使って運用を楽しくする話
 
イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化
 
Ansible+Docker
Ansible+DockerAnsible+Docker
Ansible+Docker
 
Fluentd Meetup #2 @外道父 Fluentdを優しく見守る監視事例
Fluentd Meetup #2 @外道父 Fluentdを優しく見守る監視事例Fluentd Meetup #2 @外道父 Fluentdを優しく見守る監視事例
Fluentd Meetup #2 @外道父 Fluentdを優しく見守る監視事例
 

Similar to Serf という Orchestration ツール #immutableinfra

InfluxDB の概要 - sonots #tokyoinfluxdb
InfluxDB の概要 - sonots #tokyoinfluxdbInfluxDB の概要 - sonots #tokyoinfluxdb
InfluxDB の概要 - sonots #tokyoinfluxdb
Naotoshi Seo
 
Perl で作るメディアストリーミングサーバー
Perl で作るメディアストリーミングサーバーPerl で作るメディアストリーミングサーバー
Perl で作るメディアストリーミングサーバー
Hideo Kimura
 
Nifty cloud jtf2014ハンズオン資料
Nifty cloud jtf2014ハンズオン資料Nifty cloud jtf2014ハンズオン資料
Nifty cloud jtf2014ハンズオン資料
亮介 山口
 

Similar to Serf という Orchestration ツール #immutableinfra (20)

Dangerでpull requestレビューの指摘事項を減らす
Dangerでpull requestレビューの指摘事項を減らすDangerでpull requestレビューの指摘事項を減らす
Dangerでpull requestレビューの指摘事項を減らす
 
InfluxDB の概要 - sonots #tokyoinfluxdb
InfluxDB の概要 - sonots #tokyoinfluxdbInfluxDB の概要 - sonots #tokyoinfluxdb
InfluxDB の概要 - sonots #tokyoinfluxdb
 
PHPにおけるI/O多重化とyield
PHPにおけるI/O多重化とyieldPHPにおけるI/O多重化とyield
PHPにおけるI/O多重化とyield
 
Perl で作るメディアストリーミングサーバー
Perl で作るメディアストリーミングサーバーPerl で作るメディアストリーミングサーバー
Perl で作るメディアストリーミングサーバー
 
Automation with SoftLayer and Zabbix
Automation with SoftLayer and ZabbixAutomation with SoftLayer and Zabbix
Automation with SoftLayer and Zabbix
 
Unityネイティブプラグインマニアクス #denatechcon
Unityネイティブプラグインマニアクス #denatechconUnityネイティブプラグインマニアクス #denatechcon
Unityネイティブプラグインマニアクス #denatechcon
 
Elixir-Conf-Japan-2017-session-ohr486
Elixir-Conf-Japan-2017-session-ohr486Elixir-Conf-Japan-2017-session-ohr486
Elixir-Conf-Japan-2017-session-ohr486
 
Rails on GKEで運用するWebアプリケーションの紹介
Rails on GKEで運用するWebアプリケーションの紹介Rails on GKEで運用するWebアプリケーションの紹介
Rails on GKEで運用するWebアプリケーションの紹介
 
技術選択とアーキテクトの役割
技術選択とアーキテクトの役割技術選択とアーキテクトの役割
技術選択とアーキテクトの役割
 
IETF90 Web関連WG報告 #isocjp
IETF90 Web関連WG報告 #isocjpIETF90 Web関連WG報告 #isocjp
IETF90 Web関連WG報告 #isocjp
 
Nifty cloud jtf2014ハンズオン資料
Nifty cloud jtf2014ハンズオン資料Nifty cloud jtf2014ハンズオン資料
Nifty cloud jtf2014ハンズオン資料
 
IETF90 IoT関連WG報告 #isocjp
IETF90 IoT関連WG報告 #isocjpIETF90 IoT関連WG報告 #isocjp
IETF90 IoT関連WG報告 #isocjp
 
Deno の node 互換モードと ソケット
Deno の node 互換モードと ソケットDeno の node 互換モードと ソケット
Deno の node 互換モードと ソケット
 
React.js + Flux入門 #scripty02
React.js + Flux入門 #scripty02React.js + Flux入門 #scripty02
React.js + Flux入門 #scripty02
 
20150226_JAWS_UG札幌
20150226_JAWS_UG札幌20150226_JAWS_UG札幌
20150226_JAWS_UG札幌
 
fastlane x iOSアプリのCI
fastlane x iOSアプリのCIfastlane x iOSアプリのCI
fastlane x iOSアプリのCI
 
DeNAインフラの今とこれから - 今編 -
DeNAインフラの今とこれから - 今編 -DeNAインフラの今とこれから - 今編 -
DeNAインフラの今とこれから - 今編 -
 
オブジェクトストレージを使ってイメージビューアを作ってみる
オブジェクトストレージを使ってイメージビューアを作ってみるオブジェクトストレージを使ってイメージビューアを作ってみる
オブジェクトストレージを使ってイメージビューアを作ってみる
 
DeNAのゲーム開発を支える Game Backend as a Service
DeNAのゲーム開発を支える Game Backend as a ServiceDeNAのゲーム開発を支える Game Backend as a Service
DeNAのゲーム開発を支える Game Backend as a Service
 
Elasticsearch勉強会
Elasticsearch勉強会Elasticsearch勉強会
Elasticsearch勉強会
 

More from Naotoshi Seo (11)

ぼくのかんがえた Itamae/Serverspec 構成フレームワーク 〜 Kondate 〜
ぼくのかんがえた Itamae/Serverspec 構成フレームワーク 〜 Kondate 〜ぼくのかんがえた Itamae/Serverspec 構成フレームワーク 〜 Kondate 〜
ぼくのかんがえた Itamae/Serverspec 構成フレームワーク 〜 Kondate 〜
 
HTTP/2 でリバプロするだけでグラフツールを 高速化できた話
HTTP/2 でリバプロするだけでグラフツールを 高速化できた話HTTP/2 でリバプロするだけでグラフツールを 高速化できた話
HTTP/2 でリバプロするだけでグラフツールを 高速化できた話
 
Fluentd Hacking Guide at RubyKaigi 2014
Fluentd Hacking Guide at RubyKaigi 2014Fluentd Hacking Guide at RubyKaigi 2014
Fluentd Hacking Guide at RubyKaigi 2014
 
Sinatra Pattern 20130415
Sinatra Pattern 20130415Sinatra Pattern 20130415
Sinatra Pattern 20130415
 
Is ruby logger thread(process)-safe? at RubyConf 2013
Is ruby logger thread(process)-safe? at RubyConf 2013Is ruby logger thread(process)-safe? at RubyConf 2013
Is ruby logger thread(process)-safe? at RubyConf 2013
 
Yohoushi
YohoushiYohoushi
Yohoushi
 
Haikanko rubykaigi 20130531
Haikanko rubykaigi 20130531Haikanko rubykaigi 20130531
Haikanko rubykaigi 20130531
 
Mina 20130417
Mina 20130417Mina 20130417
Mina 20130417
 
Fluentdcasual 02-haikanko
Fluentdcasual 02-haikankoFluentdcasual 02-haikanko
Fluentdcasual 02-haikanko
 
capistrano-colorized-stream
capistrano-colorized-streamcapistrano-colorized-stream
capistrano-colorized-stream
 
Ruby test double
Ruby test doubleRuby test double
Ruby test double
 

Recently uploaded

Recently uploaded (7)

知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
2024年5月17日 先駆的科学計算フォーラム2024 機械学習を用いた新たなゲーム体験の創出の応用
2024年5月17日 先駆的科学計算フォーラム2024 機械学習を用いた新たなゲーム体験の創出の応用2024年5月17日 先駆的科学計算フォーラム2024 機械学習を用いた新たなゲーム体験の創出の応用
2024年5月17日 先駆的科学計算フォーラム2024 機械学習を用いた新たなゲーム体験の創出の応用
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
ネットワーク可視化 振る舞い検知(NDR)ご紹介_キンドリル202405.pdf
ネットワーク可視化 振る舞い検知(NDR)ご紹介_キンドリル202405.pdfネットワーク可視化 振る舞い検知(NDR)ご紹介_キンドリル202405.pdf
ネットワーク可視化 振る舞い検知(NDR)ご紹介_キンドリル202405.pdf
 
Hyperledger Fabricコミュニティ活動体験& Hyperledger Fabric最新状況ご紹介
Hyperledger Fabricコミュニティ活動体験& Hyperledger Fabric最新状況ご紹介Hyperledger Fabricコミュニティ活動体験& Hyperledger Fabric最新状況ご紹介
Hyperledger Fabricコミュニティ活動体験& Hyperledger Fabric最新状況ご紹介
 
LoRaWAN無位置ロープ式水漏れセンサーWL03A 日本語マニュアル
LoRaWAN無位置ロープ式水漏れセンサーWL03A 日本語マニュアルLoRaWAN無位置ロープ式水漏れセンサーWL03A 日本語マニュアル
LoRaWAN無位置ロープ式水漏れセンサーWL03A 日本語マニュアル
 
LoRaWAN無位置ロープ型水漏れセンサー WL03A-LB/LSカタログ ファイル
LoRaWAN無位置ロープ型水漏れセンサー WL03A-LB/LSカタログ ファイルLoRaWAN無位置ロープ型水漏れセンサー WL03A-LB/LSカタログ ファイル
LoRaWAN無位置ロープ型水漏れセンサー WL03A-LB/LSカタログ ファイル
 

Serf という Orchestration ツール #immutableinfra

  • 1. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. Serf という Orchestration ツール March 25th, 2014 Naotoshi Seo @sonots DeNA Co., Ltd.
  • 2. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. 2 自己紹介 ・瀬尾 直利 @sonots ・DeNA Co., Ltd ・インフラのDev ・Rubyist ・OSS 活動家 ・Fluentd コミッタ
  • 3. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. ⁃ グラフツール ⁃ HTTP POST するだけ ⁃ GrowthForecast の Ruby クローン http://focuslight.github.io/
  • 4. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. http://blog.livedoor.jp/sonots/archives/29646713.html Yohoushi 分散 Focuslight グラフツール
  • 5. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. ⁃ ログを処理するアプリケーション(or フレームワーク) ⁃ Ruby プラグインの仕組みが強力 (+250 plugins)
  • 6. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. ・
  • 7. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. 7
  • 8. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. Serf(1) 8 ⁃ Orchestration ツール ⁃ Vagrant で有名な Mitchell Hashimoto 氏が作 った go 製のツール ⁃ メンテナは同 Hashicorp の Armon 氏 http://www.serfdom.io/
  • 9. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. オーケストレーション 9 Bootstrapping OSのインストール作業 / Kickstart Configuration サーバの設定作業 / Chef、Puppet Orchestration サーバ群のクラスタリング ロードバランサに追加したり、監視入れたり、サーバ管理ツー ルに登録したり、という他のツールと連携するための作業 手でコマンド叩いたり。Serf を使ったり (New!)
  • 10. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. Blue-Green Deployment 10 http://martinfowler.com/bliki/BlueGreenDeployment.html ここの設定
  • 11. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. インフラ作業あるある 新規サーバ1台投入するためには 1. OSインストール (AWSインスタンス立ち上げる、mbgaclone [1]) 2. セットアップ (chef, puppet, touryo) オーケストレーション作業も必要 1. サーバ管理ツールに登録 (admintool [1]) 2. 監視ツールに登録 (Nagios, Zabbix) 3. メトリクス収集ツールに登録 (Ganglia, Munin) 4. DNS登録 5. LB 登録 (BigIP, nginx, HAProxy) http://www.amazon.co.jp/dp/4774151114[1] mbgaを支える技術
  • 12. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. 12 ⁃ オーケストレーション作業は 1台でも面倒 ⁃ 100台入れ替える ⁃ 1日10 Blue-Green Deployment したい 手動とか \(^o^)/オワタ
  • 13. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. 13 それ Serf で(ry
  • 14. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. Serf の動作イメージ 14
  • 15. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. serf agent の起動 15 $ serf agent -node=one $ serf agent -node=two -bind=127.0.0.1:7947 -rpc-addr=127.0.0.1:7374 one two $ serf members one 127.0.0.1:7946 alive $ serf members -rpc-addr=127.0.0.1:7374 two 127.0.0.1:7947 alive
  • 16. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. serf join 16 $ serf join 127.0.0.1:7946 # join to one $ serf members # one one 127.0.0.1:7946 alive two 127.0.0.1:7947 alive $ serf members -rpc-addr=127.0.0.1:7374 # two two 127.0.0.1:7947 alive one 127.0.0.1:7946 alive one two join
  • 17. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. 17 A D B C 1. join D join D join ※ Gossip プロトコルで伝搬 A join B join C join
  • 18. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. 18 A D B C 1. join D join D join ※ Gossip プロトコルで伝搬 A join B join C join
  • 19. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. イベントハンドラ 19 ⁃ 任意のイベントで起動するスクリプトを登録できる #!/bin/bash # handler.sh echo echo "New event: ${SERF_EVENT}. Data follows..." while read line; do printf "${line}n" done $ serf agent -event-handler=$HOME/handler.sh ⁃ 環境変数 SERF_EVENTにイベント毎に別の値が入る ⁃ member-join, member-leave, member-failed, member-reap, user ⁃ STDIN にホスト名、IPアドレス 
  • 20. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. 具体例 20
  • 21. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. Serfで/etc/hosts更新 21 https://github.com/kentaro/serf-hosts A BC join member-join 1. /etc/hosts にホスト名, IPアドレス追加 member-leave 1. /etc/hosts 該当行削除 同スクリプト 同スクリプト
  • 22. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. SerfでHAProxyに登録 22 http://blog.glidenote.com/blog/2013/10/30/serf-haproxy/ HAProxy Web2Web1 join member-join 1. /etc/haproxy/haproxy.cfg 追記 2. /etc/init.d/haproxy reload member-leave 1. /etc/haproxy/haproxy.cfg 該当行削除 2. /etc/init.d/haproxy reload スクリプトなし スクリプトなし
  • 23. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. サーバが起動したら 自動で監視設定 自動でサービスイン 23
  • 24. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. Immutable インフラに適した アーキテクチャ(持論) 24
  • 25. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. 25 Monitor 中央集権型 Agent型 Web1 Web2 web1.cfg web2.cfg Web1 Web2 agent agent Monitor設定変 更なし ホストが立ち上がると勝手に情報を送り始める
  • 26. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. Agent 型 が適している 26
  • 27. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. 27 ⁃ HAProxy ロードバランサ (中央集権) ⁃ MyDNS で DNSラウンドロビン (中央集権) ⁃ Big IP ロードバランサ (中央集権) ⁃ Ganglia リソースメトリクス (gmond, Agent 型) ⁃ Munin リソースメトリクス (中央集権) ⁃ Nagios 監視ツール (中央集権) ⁃ Sensu 監視ツール (Agent 型) ⁃ GrowthForecast, Focuslight グラフツール (Agent型) ⁃ Fluentd ログ収拾 (Agent 型) いろんなツール
  • 28. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. 中央集権型ツールを agent 型アーキテクチャに こじつけ直すのが 28 Serf
  • 29. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. 思ったこと / 気になったことツラツラ 29
  • 30. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. どのぐらいの時間で伝搬されるのか? 30 http://www.serfdom.io/docs/internals/simulator.html ⁃ 30ノードで1.25s、100ノードでも2sほど
  • 31. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. イベントをどのノードに発火すべきか 31 ⁃ 最初にどれかのノードに member-join イベントを 発火しなければならない。 ⁃ DNSラウンドロビンを使うとかして、ランダムに選択 されるようにするとよさそう。 ⁃ ※ もちろんその DNS の管理は serf で A D B C DNSラウンドロビン
  • 32. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. Event-handler script の更新は? 32 ⁃ event handler スクリプトにバグがあるなどして更 新する必要があった場合に、serf クラスタ全体に撒い て回らないといけない。 ⁃ それこそ serf を使ってクラスタ全体を更新したい ⁃ が、更新するためのスクリプトがバグっている ⁃ 今までどおり capistrano かなにかで撒く? ⁃ ※ Immutable ならイメージを更新してデプロイ
  • 33. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. 監視をどのタイミングではずすべき? 33 ⁃ member-leave, member-failed イベントで監 視を外す ⁃ すると、本当にサーバが死んだ時にアラート飛ばない         ↓ ⁃ サーバ down 監視以外を Serf で外す ⁃ サーバ down 監視を外すのは手動で(?)
  • 34. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. 34 ⁃ 監視に入れるなどの処理は全て Serf でやっておく ⁃ サービスインはやらない ⁃ テストチームの作った自動QAで振る舞いをテスト ⁃ (主にオーケストレーション層のテスト) ⁃ 良きタイミングで別の仕組みでサービスイン? いきなりサービスインは怖い?
  • 35. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. Advanced 35
  • 36. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. serf event 36 $ serf event [options] name [payload] ex) serf event deploy 20140325 ⁃ 環境変数 SERF_EVENTに user が、 ⁃ 環境変数 SERF_USER_EVENT に name が入る ⁃ STDIN に payload が入る ⁃ ユーザーカスタムイベント http://www.serfdom.io/docs/agent/event-handlers.html
  • 37. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. serf monitor 37 $ serf monitor ⁃ 稼働中の serf agent に attach してログを見れる ⁃ serf agent のログレベルが warn でも、 ⁃ serf monitor -log-level debug と指定すればデ バグレベルで参照できる
  • 38. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. serf tag 38 $ serf tags -set tag=value $ serf tags -delete tag ⁃ ノードにタグを付ける $ serf members one 127.0.0.1:7946 alive tag=value ⁃ 環境変数 SERF_TAG_{TAG} に value が入る ⁃ ※ role は deprecated になりました
  • 39. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. serf query 39 $ serf query [options] name [payload] ⁃ event と違い、レスポンス (STDOUT) を受け取る ⁃ クエリが終わるまで待ち続ける ⁃ ただし、timeout したら諦める ⁃ -tag tag=value オプションでタグを指定できる
  • 40. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. serf query 応用例(1) 40 $ serf agent -event-handler=query:uptime=uptime ⁃ 全ホストから uptime コマンドの結果を集める $ serf query uptime Ack from 'one' Response from 'one': 17:50 up 3 days, 2:52, 10 users, load averages: 3.83 2.46 2.27 Total Acks: 1 Total Responses: 0 http://pocketstudio.jp/log3/2014/03/14/serf-0-5-0/
  • 41. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. serf query 応用例(2) 41 $ serf agent -event-handler=query:sh=/bin/bash ⁃ event-handler に sh を登録 ⁃ 任意のコマンドを実行できる ⁃ 全ホストで nginx reload とか、その他自由 ⁃ ※ ただし、timeout したら諦める $ serf query sh “service nginx reload”
  • 42. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. まとめ  42 ⁃ Serf の紹介をしました ⁃ Immutable インフラには Agent 型があっている ⁃ サーバ増やした(減らした) → 設定ファイル修正して git commit && push して deploy とかやってられない ⁃ Serf で中央集権型を Agent 型にしちゃうと捗る
  • 43. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. 43 Thank you