AWS VPC上でVyatta CoreをHA構成する
Vyattaは、HAの動作にマルチキャストを使用しており、そのままではMAZ上でHAにする事が出来ません。
この問題は、GRE Tunnelを構成し、トンネル内でマルチキャストパケットを疎通させる事で解決します。
この記事について
以下の記事を清書したものになります。
内容は当時(2014.10.11)のものとなります。
https://blog.mikalab.info/archives/643917.html
本スクリプトについて
本スクリプトでは、Vyatta CoreにAWS CLIをインストールし、HA Clusterを半自動で設定します。
スクリプト
使い方
% curl https://raw.githubusercontent.com/tsumura-cloudpack/aws-vyatta-clustering-builder/master/aws-vyatta-clustering-builder.sh > ./aws-vyatta-clustering-builder.sh
% chmod +x ./aws-vyatta-clustering-builder.sh
% ./aws-vyatta-clustering-builder.sh
スクリプトの実行が終了すると、以下のようなコメントとサンプルConfigが表示されます。
**************************
*** CONFIGURE COMPLETE ***
**************************
Can use aws-cli after re-login vyatta user.
Please edit setting files.
o /root/.aws/credentials - AWSCLI config.
o /etc/sysconfig/associate-eip - EIP Failover config.
o /etc/sysconfig/associate-nat - ROUTE TABLE Failover config.
o /etc/init.d/failover - Failover Script.
Edit AWSCLI credentials file first.
If use IAM role, delete credentials file.
Vyatta clustering sample config on vpc.
o vyatta-a - Primary 169.254.0.1/30
o vyatta-c - Secondary 169.254.0.2/30
* local-ip is this instanse ip addr.
---
set system host-name vyatta-a
set interfaces tunnel tun00 address '169.254.0.[1-2]/30'
set interfaces tunnel tun00 encapsulation 'gre'
set interfaces tunnel tun00 local-ip '10.0.0.1' // ※自身のLocalIP
set interfaces tunnel tun00 remote-ip '[Peer LocalIP]'
set interfaces tunnel tun00 multicast enable
set cluster interface tun00
set cluster pre-shared-secret mikalab
set cluster group aws
set cluster group aws primary vyatta-a
set cluster group aws secondary vyatta-c
Config内のlocal-ipは、自身のLocalIPを取得して表示しています。
Peer LocalIPとhostname、事前共有鍵、トンネルインターフェースのIPアドレスを書き換えてください。
--nodownload
外部のパッケージのダウンロードをスキップします
--configonly
Python + awscliのインストールとダウンロードをスキップします
動作条件
VyattaCore固有の部分をハードコードしている為、他への転用は難しいかと思います。
例)/bin/sh.distrib
動作の解説
AWS CLIのダウンロード
AWS CLIのインストールを行います。
依存関係で、Python等を同時にインストールします。
awsコマンドのオートコンプリート
次に、シェル上でのawsコマンドのオートコンプリートのため、/etc/profile.d/awscli.shを生成します。
次回ログイン時より、オートコンプリートが有効になります。
コマンド類・設定ファイルの生成
associate-nat
、associate-eip
コマンド、及び設定ファイルを生成します。
associate-natコマンド
NATインスタンス等で使われるROUTE TABLEのエントリを書き換えます。
例えば「0.0.0.0/0」のエントリを書き換える場合、置換処理になる為、事前にエントリを生成する必要があります。
associate-eipコマンド
設定されたEIPを、自身に付け替えます。
この際、PublicIPで接続されているセッションは全て切断される為、クラスタの挙動を監視する場合などは事前にVPC内に踏み台を用意するなどして下さい。
フェールオーバー時のスクリプトの生成
/etc/init.d/failover
を生成します。
フェールオーバーした際にこのコードがVyatta内のHeartbeatからコールされます。
デフォルトでは、associate-nat
、associate-eip
といったコマンド類がコメントアウトされた状態ですので、環境に合わせて適宜編集してください。
参考サイト
VyattaにPython版AWSコマンドラインインターフェース(CLI)をインストールしてみた - suz-lab blog (Archive.org)
https://web.archive.org/web/20141013222921/http://blog.suz-lab.com/2013/08/vyattapythonawscli.html