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アドレスの設定ができます。