AWSで仮想IPアドレスを使う
AWSでHAクラスタを構築する時に、通常のオンプレミスやプライベートクラウドと大きく異なるのは仮想IPアドレスの扱いです。PacemakerではIPaddr2というリソースエージェントがあり、仮想IPアドレスを管理できますが、AWSでは利用者が自由にIPアドレスの定義ができないため、AWSのルールに基づいて設定します。
今回の記事ではAWSでの仮想IPアドレスの設定方法について説明します。
Elastic IP アドレスの割り当て
Elastic IP アドレスはAWSで使える有料のIPv4アドレスです。VPCから割り当てができて、VPC内に作った仮想ゲストの外部アドレスにすることができます。。
「VPC > Elastic IPアドレス >Elastic IPアドレスの割り当て」を選んでElastic IPアドレスを割り当ててください。このような画面に表示されたら、割り当てられたIPv4アドレスと割り当てIDを記録します。
次にIAMダッシュボードからユーザーアカウントを登録します。ユーザーにはIPアドレスの割り当てのために、AssociateAddress, DisassociateAddress, DescribeInstance, DescribeAddressの権限を持ったポリシーを設定します。
ユーザーを作成した時に保存されるCSVファイルにあるアクセスキーIDとシークレットアクセスキーを記録しておきます。
インスタンスの作成とPacemakerのインストール
VPCでインスタンスを作成します。
次にPacemakerをインストールします。Pacemalerは別の記事でLINBIT HAのデモライセンスの取得方法を紹介しています。デモライセンスが必要な方はそちらを参照ください。。
awsコマンドのインストール
Pacemakerはawseipという名前のElastic IPアドレス リソースエージェントを使ってIPアドレスをインスタンスに割り当てます。このリソースエージェントは内部でAWSの管理コマンドaws-cli使用します。そのためaws-cliをインストールします。
# pip3 install awscli
aws-cliコマンドはAWSの制御を行うためにアクセスキーとシークレットアクセスキーの登録が必要で、aws configureコマンドで登録します。
# aws configure
AWS Access Key ID [None]: ← アクセスキーを入力
AWS Secret Access Key [None]: ←シークレットアクセスキーを入力
Default region name [None]: ap-northeast-1 ← 東京リージョンの場合 ap-northeast-1を入力
Default output format [None]: text
今回使用するElastic IPアドレス リソースエージェントはルートユーザーの設定を参照します。このためルートユーザで実行する必要があります。
動作確認
登録したアクセスキーとシークレットアクセスキーでElastic IPアドレス の操作ができるか確認します。
いきなりPacemakerの設定にする前に、eip-test.shという名前でスクリプトを作りテストします。
#!/bin/sh
export OCF_ROOT=/usr/lib/ocf
export OCF_RESKEY_allocation_id=eipalloc-XXXXXXXXXXXX
export OCF_RESKEY_elastic_ip=19.123.45.XXX
export OCF_RESKEY_awscli=/usr/local/bin/aws
/usr/lib/ocf/resource.d/heartbeat/awseip $*
/usr/lib/ocf/resource.d/heartbeat/awseip はElastic IP操作のリソースエージェントです。
PacemakerのOCFリソースエージェントはOCF_RESKEY_XXXXという環境変数を使って、Pacemakerからパラメータを受け取ります。OCF_RESKEY_allocation_idとOCF_RESKEY_elastic_ipはElastic IPアドレスを割り当てた時に画面に表示されたものになります。
このスクリプトを実行すると、インスタンスの外部からのアクセスがElastic IPアドレス で可能になります。
# ./eip-test.sh start
例えば、Elastic IPアドレスにsshでアクセスすると、このインスタンスに接続できます。
割り当てたElastic IPアドレス をインスタンスから解除するには次のようにstopを引数にして実行します。
# ./eip-test.sh stop
インスタンスにElastic IPアドレスを割り当てたり、解除することができたら、HAクラスタのIPアドレス設定のリソースを定義してみます。Pacemakerのcrmshでの入力では次のような入力になります。
primitive VIP awseip \
params allocation_id=eipalloc-XXXXXXXXXXXX awscli="/usr/local/bin/aws" elastic_ip=19.123.45.XXX \
op start interval=0s timeout=120s \
op stop interval=0s timeout=120s \
op monitor interval=100s timeout=120s
このように通常のオンプレミスやプライベートクラウドで使うIPaddr2の代わりに、awseipリソースエージェントを使ってHAクラスタの仮想IPアドレスの設定ができます。