AWS上のAsteriskサーバをHeartbeat+Pacemakerで冗長化

AWS運用自動化サービス「Cloud Automator」
この記事は1年以上前に書かれたものです。
内容が古い可能性がありますのでご注意ください。

こんにちは、入社3か月の斉藤です。
いつまで新人と名乗れるものなのでしょうか。気持ちはいつでもフレッシュです。

現在IVR(自動音声応答)サービスにあれこれと関わっています。
AWS上のAsteriskサーバをHeartbeat+Pacemakerで冗長化したのでそれについて書いていこうと思います。

HeartbeatやPacemakerは高可用クラスタシステムを構築するためのオープンソースなパッケージです。
詳しくは以下のページを見てください。

IVRやAsteriskに関しては以下の記事から続いています。
Asterisk-IVR on AWS(外線接続編)  EC2 on Asterisk-IVR

まず今回のおおまかな構成は以下のとおり。
  
今回使用したAMI、Heartbeat、Pacemakerのバージョンは次のとおりです。

  • Amazon Linux AMI 2012.03
  • heartbeat-3.0.5
  • pacemaker-1.0.12

作業手順は以下のとおりです。
あまりよろしくないとは思いつつ今回はrootユーザーで作業しています。
本来なら適宜sudoを使っていくべきかなと思います。

  1. ホスト名の設定
  2. セキュリティグループの設定
  3. パッケージのインストール
  4. Heartbeatの設定
  5. 起動とリソースエージェントの設定
  6. 動作確認

1.ホスト名の設定

EC2ではデフォルトのままだと起動毎にホスト名が変わってしまうので、heartbeat01、heartbeat02というホスト名をそれぞれつけます。
ホスト名の固定の仕方は以下のとおりです。

/etc/sysconfig/networkを編集します。

2.セキュリティグループの設定

Heartbeatでノード間の監視をするために以下を追加します。
sourceにはAsteriskサーバのセキュリティグループを指定します。

PortService Source
UDP 694 sg-ee850ce(asterisk)

3.パッケージのインストール

・openhpi-libsのインストール
Pacemakerのインストールに必要なopenhpi-libsのパッケージは、AmazonLinuxのリポジトリにありません。
なのでCentOS6のリポジトリを追加してインストールします。
/etc/yum.repos.d/CentOS-Base.repoというファイルを以下のように作成します。

yumコマンドでインストールします。

・Heartbeat、Pacemakerのインストール
こちらからリポジトリパッケージ(pacemaker-1.0.12-1.1.el6.x86_64.repo.tar.gz)をダウンロードしインストールします。

4.Heartbeatの設定

・/etc/ha.d/ha.cf

/etc/ha.d/ha.cfに設定を記述します。各サーバ毎に設定をします。ucast以外は各サーバ共通です。

・/etc/ha.d/authkeys

/etc/ha.d/authkeysで相互認証に使用する秘密鍵を指定します。

各サーバで同一のものにします。

*num :1から始まる簡単なキーインデックス
*algorithm:シグネチャーアルゴリズム。 md5またはsha1を使用できます。
*secret:認証キー

作成後rootだけが読み込みできるようにします。

5.起動とリソースエージェントの設定

設定するために各サーバでHeartbeatを起動させます。

下記のコマンドで画像のようにOnlineになるか確認します。


heartbeat01,02ともにOnlineになっています。
サーバ間のチェックは正しく行われているので次にリソースエージェントの設定をします。
設定にはcrmコマンドを使用します。内容は以下のとおりです。

6.動作チェック

設定が終わったのでフェイルオーバーできるかどうか動作のチェックをします。先ほど同じく”crm_mon -A”で確認します。

asteriskがheartbeat02で起動しています。

それでは、asteriskのプロセスを止めてheartbeat01のasteriskが起動するかを試してみます。

killコマンドを使いプロセスを終了して、”crm_mon -A”で確認してみます。すると

heartbeat01でasteriskが起動しています。
heartbeat02の方が動いてないよというメッセージもでています。

これで無事フェイルオーバーできました。

感想

無事にAsteriskサーバを冗長化できました。
切り替えの際にB2BUAにレジストする必要があるので数秒かかりますが、自動で切り替えられるのは素敵ですね。

今回はAsteriskサーバでしたが、UDPの通信が必要でELBが使えない場合には同じように冗長化できると思います。

AWS運用自動化サービス「Cloud Automator」