2013年8月7日水曜日

Vyatta(Core 6.6 R1)のクラスタリング機能の調査

スズキです。

下記資料の3章(Clustering)、P.174を参考に試してみました。
"Vyatta System High Availability REFERENCE GUIDE"
その前に、クラスタリングするVyattaでホスト名が重複しないように、
変更しておきます。("set system host-name ..."です)
vyatta@vyatta# set system host-name vyatta-1
[edit]
vyatta@vyatta# commit
[ system host-name vyatta-1 ]
Stopping enhanced syslogd: rsyslogd.
Starting enhanced syslogd: rsyslogd.

[edit]
vyatta@vyatta# save
Saving configuration to '/config/config.boot'...
Done
[edit]
vyatta@vyatta# run reboot
Proceed with reboot? (Yes/No) [No] Yes

Broadcast message from root@vyatta-1 (pts/0) (Tue Aug  6 03:18:21 2013):

The system is going down for reboot NOW!
[edit]
再度ログインしてプロンプトを確認すると、ホスト名が変更されていることがわかります。
$ ssh -i suz-lab_ap-northeast-1.pem -l vyatta xxx.xxx.xxx.xxx
Linux vyatta-1 3.3.8-1-amd64-vyatta #1 SMP Wed Mar 13 10:35:28 PDT 2013 x86_64
Welcome to Vyatta.
This system is open-source software. The exact distribution terms for
each module comprising the full system are described in the individual
files in /usr/share/doc/*/copyright.
Last login: Tue Aug  6 03:08:22 2013 from xxx.xxx.xxx.xxx
vyatta@vyatta-1:~$

次にファイルオーバー時に実行するテストスクリプトを用意しておきます。
$ sudo su -
# cd /etc/init.d/
# ls -l failover
-rwxr-xr-x 1 root root 32 Aug  7 03:57 failover
# cat failover
#!/bin/sh
date >> /tmp/test.txt
# ./failover
# cat /tmp/test.txt
Wed Aug  7 04:00:03 GMT 2013

そしてクラスタリングの設定です。
$ configure
[edit]
# set cluster interface eth0
[edit]
# set cluster pre-shared-secret secret
[edit]
# set cluster group aws
[edit]
# set cluster group aws primary   vyatta-1
[edit]
# set cluster group aws secondary vyatta-2
[edit]
# set cluster group aws service failover
[edit]
# commit
[ cluster ]
Stopping clustering... Done
Starting clustering... Done
[edit]
# save
Saving configuration to '/config/config.boot'...
Done
[edit]

するとHeartbeatが起動することが確認できます。
つまりVyattaのクラスタリング機能の実体はHeartbeatということになります。
$ ps ax | grep heartbeat
 3102 ?        SLs    0:00 heartbeat: master control process
 3115 ?        SL     0:00 heartbeat: FIFO reader
 3116 ?        SL     0:00 heartbeat: write: mcast eth0
 3117 ?        SL     0:00 heartbeat: read: mcast eth0
 3321 pts/2    S+     0:00 grep heartbeat

上記のテストスクリプトも適当に起動されてました。
$ cat /tmp/test.txt
Wed Aug  7 04:00:03 GMT 2013
Wed Aug  7 04:22:58 GMT 2013
Wed Aug  7 04:22:58 GMT 2013
Wed Aug  7 04:23:29 GMT 2013
Wed Aug  7 04:23:29 GMT 2013
Wed Aug  7 04:23:29 GMT 2013

実体であるHeartbeatの設定ファイルは次の通りです。
$ cat /etc/ha.d/ha.cf
keepalive 5000ms
deadtime 20
warntime 10000ms
initdead 30000ms
deadping 20000ms
logfacility daemon
mcast eth0 239.251.252.253 694 1 0
auto_failback off
node vyatta-1 vyatta-2
$ cat /etc/ha.d/haresources
vyatta-1  failover

ということで、下記でインストールしたAWSのCLIを利用して、EIPの付けかえと、
ルーティングテーブルを変更するフェイルオーバースクリプトを用意して、
VyattaにPython版AWSコマンドラインインターフェース(CLI)をインストールしてみた
次のMLを参考に相互監視をユニキャストでできれば、
Re: [Vyatta-users] Cluster heartbeat / change to ucast?
下記のようにVPC上のVyatta(on EC2)の冗長化も実現できるかもしれません。
"High Availability NAT"の作成(CentOS6)

次は、実際に実験してみます。。。
--------
http://www.suz-lab.com

0 コメント: