LoginSignup
16
15

More than 5 years have passed since last update.

serfで/etc/hostsファイルを自動的に設定する

Last updated at Posted at 2014-08-14

serfでhostsファイルを自動的に書き換えます。

ホスト IP
node1 192.168.33.71
node2 192.168.33.72

インストール

ここからダウンロードする。
wgetは入ってなければsudo yum install -y wgetで入れておく。

$ wget https://dl.bintray.com/mitchellh/serf/0.6.3_linux_amd64.zip
$ unzip 0.6.3_linux_amd64.zip

# serfが無い事を確認
$ ls -lh /usr/local/bin/serf
$ sudo mv serf /usr/local/bin
$ which serf

serf起動テスト

[node1]
$ serf agent -iface=eth1 -node=node1 &

[node2]
$ serf agent -iface=eth1 -node=node2 &

# node1のIPアドレスにjoin
$ serf join 192.168.33.71     

[node1, node2]
# node1, node2がメンバーになっていることを確認する
$ serf members 
============================
    2014/08/14 00:01:52 [INFO] agent.ipc: Accepted client: 127.0.0.1:57684
node1  192.168.33.71:7946  alive
node2  192.168.33.72:7946  alive
============================

# ログの確認
$ serf monitor
============================
    2014/08/14 00:01:59 [INFO] agent.ipc: Accepted client: 127.0.0.1:57686
2014/08/13 23:59:56 [INFO] agent: Serf agent starting
2014/08/13 23:59:56 [INFO] serf: EventMemberJoin: node1 192.168.33.71
2014/08/13 23:59:57 [INFO] agent: Received event: member-join
2014/08/14 00:01:30 [INFO] serf: EventMemberJoin: node2 192.168.33.72
2014/08/14 00:01:31 [INFO] agent: Received event: member-join
2014/08/14 00:01:52 [INFO] agent.ipc: Accepted client: 127.0.0.1:57684
2014/08/14 00:01:59 [INFO] agent.ipc: Accepted client: 127.0.0.1:57686
============================

[node1, node2]
$ serf event 'Hello World'

どこで実行しても全MemberでHello Worldが表示される。

serf-hosts

/etc/hostsを自動管理する。本家のperl版をうまく動かせなかったのでshellscript版を利用。

先ほどのテストで起動したserfは終了させておく。

使い方

[node1]
$ wget https://gist.githubusercontent.com/manabusakai/8266181/raw/c2414cddc3648c8e5003d9fd2503653f9941b8eb/event_handler.sh
$ chmod 755 event_handler.sh
$ sudo /usr/local/bin/serf agent -iface=eth1 -node=node1 -discover=webapp -event-handler=./event_handler.sh &

# /etc/hostsにnode1追加されている事を確認
$ cat /etc/hosts
============================
...
192.168.33.71   node1
============================
[node2]
$ wget https://gist.githubusercontent.com/manabusakai/8266181/raw/c2414cddc3648c8e5003d9fd2503653f9941b8eb/event_handler.sh
$ chmod 755 event_handler.sh
$ sudo /usr/local/bin/serf agent -iface=eth1 -node=node2 -event-handler=./event_handler.sh &

# node1のIPアドレス。joinでnode2の/etc/hostsに反映される
$ sudo /usr/local/bin/serf join 192.168.33.71

# /etc/hostsにnode1, node2が追加されている事を確認
$ cat /etc/hosts
============================
...
192.168.33.72   node2
192.168.33.71   node1
============================
[node1]
# /etc/hostsにnode1, node2が追加されている事を確認
$ cat /etc/hosts
============================
...
192.168.33.71   node1
192.168.33.72   node2
============================

node2のserfを終了させると自動的にnode1の/etc/hostsからnode2の設定が消える。

[node2]
$ fg
sudo /usr/local/bin/serf agent -iface=eth1 -node=node2 -event-handler=./event_handler.sh
# Ctrl+cをおす
============================
^C==> Caught signal: interrupt
==> Gracefully shutting down agent...
    2014/08/14 00:21:55 [INFO] agent: requesting graceful leave from Serf
    2014/08/14 00:21:56 [INFO] serf: EventMemberLeave: node2 192.168.33.72
    2014/08/14 00:21:56 [INFO] agent: requesting serf shutdown
    2014/08/14 00:21:56 [INFO] agent: shutdown complete
============================

[node1]
$ cat /etc/hosts
============================
...
192.168.33.71   node1
============================

備考

起動(マルチキャストDNS)

serf joinしなくても自動でクラスタに参加する。

[node1]
$ serf agent -iface=eth1 -node=node1  -discover=webapp &

[node2]
$ serf agent -iface=eth1 -node=node2  -discover=webapp &

# node1, node2がメンバーになっていることを確認する
$ serf members 

# ログの確認
$ serf monitor  

hostsを書き換えるスクリプトは明示的にjoinしないとうまく反映されなかった。。

オプション

  • -log-level=debug : デバッグモード

リンク

16
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
15