search
LoginSignup
0

posted at

VPC マルチAZで、商用版VyattaでHAクラスタを構成する

AWS上でソフトウェアルーターを冗長化する

AWS上でソフトウェアルーターの冗長化(HAクラスタ)を構成します。
これにより、EC2インスタンスのトラブル等による影響を最小限に抑えられる、といったメリットがあります。

image.png

今回、商用版Vyatta(および、Vyatta Core)を用いて、マルチAZ環境下でのHAクラスタを構成します。

この記事について

以下の記事を清書したものになります。
内容は当時(2014.10.08)のものとなります。
https://blog.mikalab.info/archives/643967.html

Vyatta固有の問題

Vyattaは、HAクラスタの機能として、OSSのHeartbeatを使用しています。
Heartbeatでは、ハートビートの送信にユニキャスト・マルチキャストを選択する事が可能です。
しかし、Vyattaは起動のタイミングで、Vyattaのコンフィグを基に全ミドルウェアのコンフィグを生成しなおした上で、ミドルウェアを起動します。
ここでは、Heartbeatのコンフィグを生成した上で、Heartbeatが起動される事になります。
併せて、Vyattaはハートビートの送信方法がマルチキャストに固定されています。
しかし、VPCではマルチキャストを取り扱う事が出来ず、そのままではHAクラスタを構成する事ができません。
その結果、起動直後からスプリットブレインが発生します。

VPC上でマルチキャストを使う方法

ここではGRE Tunnelを構成した上で、トンネル内にマルチキャストパケットを通します。

  1. GRE Tunnelを作成する
  2. GRE Tunnelの両端にIPアドレスを割り当てる。
  3. トンネルを用いて、Heartbeatがマルチキャストパケットを用いて相互監視をはじめる。

今回はVyatta固有の問題でしたが、マルチキャストパケットの取り扱いとして、1つの例になるかもしれません。

この結果、無事にクラスタが構成され、スプリットブレインが解消されました。
image.png

検証環境

以下のAMIを使用しました

サンプルコンフィグ

クラスタの片側(vyatta-a)でのコンフィグ例

set system host-name vyatta-a
set system time-zone Asia/Tokyo
 
set interfaces tunnel tun00 address '169.254.0.1/24'
set interfaces tunnel tun00 encapsulation 'gre'
set interfaces tunnel tun00 local-ip '《vyatta-aのLocalIP》'
set interfaces tunnel tun00 remote-ip '《vyatta-cの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

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
What you can do with signing up
0