今回は『OSS編~オーケストレーションツール Serf 01 インストール編~』と題して、オーケストレーションのSerfのインストールから基本操作までを試してみたいと思います。
Serfとは
Vagrantで有名なHashiCorp社がGo言語で開発しているサービスディスカバリーやオーケストレーションのための分散型ツールです。
以下の3つの特徴があります。
・クラスタリング
Serfではクラスターを形成してメンバーのリストを持ち、参加・離脱等が発生した際にイベントとして伝播をしてスクリプトの実行が出来ます。
イベントとの伝播にはGossipプロトコルを利用しています。
・障害検知とリカバリ
Serfは自動的に失敗したノードを検出して、残りのメンバーリストに対して伝播します。
リカバリでは定期的に失敗したノードに再接続して回復しようとします。
・カスタムイベントの伝播
クラスターに対してカスタムイベントとクエリーを伝播する事が出来ます。
これにより任意の処理をユーザーが実行出来ます。
今回はGitHubにのっているQuick Startを試してみたいと思います。
Serfの実行
1.Serfのインストール
Serfは該当のプラットフォームのバイナリファイルをダウンロードして設置するだけで利用できます。
1 2 3 |
$ wget https://dl.bintray.com/mitchellh/serf/0.6.4_linux_amd64.zip $ unzip 0.6.4_linux_amd64.zip $ sudo mv serf /usr/local/bin/ |
実際にコマンドで確認してみます。
$ serf version
Serf v0.6.4
Agent Protocol: 4 (Understands back to: 2)
2.Serfの起動
次のコマンドでSerfを起動してみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
$ serf agent -node=foo -bind=127.0.0.1:5000 -rpc-addr=127.0.0.1:7373 ==> Starting Serf agent... ==> Starting Serf agent RPC... ==> Serf agent running! Node name: 'foo' Bind addr: '127.0.0.1:5000' RPC addr: '127.0.0.1:7373' Encrypted: false Snapshot: false Profile: lan ==> Log data will now stream in as it occurs: 2015/03/05 18:34:14 [INFO] agent: Serf agent starting 2015/03/05 18:34:14 [INFO] serf: EventMemberJoin: foo 127.0.0.1 2015/03/05 18:34:15 [INFO] agent: Received event: member-join |
続いて別のターミナルを立ち上げて2つ目のエージェントを立ち上げます。
※一台で行っている為、ポートを変える事で対応しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
$ serf agent -node=bar -bind=127.0.0.1:5001 -rpc-addr=127.0.0.1:7374 ==> Starting Serf agent... ==> Starting Serf agent RPC... ==> Serf agent running! Node name: 'bar' Bind addr: '127.0.0.1:5001' RPC addr: '127.0.0.1:7374' Encrypted: false Snapshot: false Profile: lan ==> Log data will now stream in as it occurs: 2015/03/05 18:35:42 [INFO] agent: Serf agent starting 2015/03/05 18:35:42 [INFO] serf: EventMemberJoin: bar 127.0.0.1 2015/03/05 18:35:43 [INFO] agent: Received event: member-join |
3.クラスターへの参加
それでは三個目のターミナルを立ち上げて1つ目のエージェントを2つ目のクラスターに参加させます。
1 2 |
$ serf join 127.0.0.1:5001 Successfully joined cluster by contacting 1 nodes. |
ストリームされているログでも確認出来ます。
1 2 3 4 5 |
2015/03/05 18:39:43 [INFO] agent.ipc: Accepted client: 127.0.0.1:48661 2015/03/05 18:39:43 [INFO] agent: joining: [127.0.0.1:5001] replay: false 2015/03/05 18:39:43 [INFO] serf: EventMemberJoin: bar 127.0.0.1 2015/03/05 18:39:43 [INFO] agent: joined: 1 nodes 2015/03/05 18:39:44 [INFO] agent: Received event: member-join |
メンバーコマンドでリストを確認してみます。
1 2 3 |
$ serf members foo 127.0.0.1:5000 alive bar 127.0.0.1:5001 alive |
クラスタリングされているのが分かります。
起動しているエージェントを止めて確認してみます。
1 2 3 |
$ serf members bar 127.0.0.1:5001 left foo 127.0.0.1:5000 alive |
いかがでしたでしょうか?
次回もお楽しみに!!!