スズキです。

下記資料の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)

次は、実際に実験してみようと思います。

こちらの記事はなかの人(suz-lab)監修のもと掲載しています。
元記事は、こちら