このトピックでは、高可用性仮想IPアドレス (HAVIP) とkeepalivedを使用して高可用性を実装する方法について説明します。
始める前に
- HAVIP機能はパブリックプレビュー中です。 この機能を使用するには、チケットを起票してください。
- elastic IPアドレス (EIP) が作成されます。 詳細については、「EIPを申請する」をご参照ください。
- 2つのECS (Elastic Compute Service) インスタンスが作成され、両方のECSインスタンスにNGINXがデプロイされます。 詳細については、「ウィザードを使用したインスタンスの作成」をご参照ください。
このタスクについて
このトピックでは、次のシナリオを例として使用します。 企業が2つのECSインスタンスを作成し、NGINXは両方のECSインスタンスにデプロイされています。 ビジネスの成長により、高可用性が必要です。
ECSインスタンスは、HAVIPおよびkeepalivedを使用してプライマリおよびセカンダリECSインスタンスとして機能できます。 デフォルトでは、プライマリECSインスタンス (ECS 1) はクライアントからアクセスされます。 ECS 1が期待どおりに動作していない場合、セカンダリECSインスタンス (ECS 2) がECS 1のサービスと仮想IPアドレスを引き継ぎます。 これは高可用性を実装します。
手順
ステップ1: HAVIPの作成
HAVIPは、独立したリソースとして作成およびリリースできるプライベートIPアドレスです。 HAVIPをECSインスタンスに関連付けると、ECSインスタンスはARP (Address Resolution Protocol) メッセージを送信してHAVIPをアドバタイズできます。
- VPC コンソールにログインします。
- 左側のナビゲーションペインで HaVip アドレス をクリックします。
- 上部のナビゲーションバーで、HAVIPを作成するリージョンを選択します。
- HaVip アドレス ページで、[HaVip アドレスの作成] をクリックします。
- [HaVip アドレスの作成] ダイアログボックスで、次のパラメーターを設定し、[OK] をクリックします。
- リージョン: HAVIPを作成するリージョンを表示します。
- VPC: HAVIPが属するVPCを指定します。
- VSwitch: HAVIPが属するvSwitchを指定します。
- VSwitch CIDR ブロック: vSwitchのCIDRブロックを表示します。
- プライベート IP アドレスの自動割り当て: プライベートIPアドレスを自動的に割り当てるかどうかを指定します。
- はい: vSwitch CIDRブロックからアイドル状態のプライベートIPアドレスが自動的に割り当てられます。
- いいえ: vSwitch CIDRブロックからアイドル状態のプライベートIPアドレスを手動で入力する必要があります。
HAVIPを作成したら、
HaVip アドレスページでHAVIPを表示できます。
ステップ2: プライマリおよびセカンダリECSインスタンスにkeepalivedをインストールする
keepalivedを使用して、ECSインスタンスのステータスを確認できます。 ECS 1がダウンしている場合、ECS 2はECS 1のワークロードと仮想IPアドレスを引き継ぎます。 これにより、高い可用性が保証されます。
次の手順では、CentOSを実行するECSインスタンスにkeepalivedをインストールする方法について説明します。
- ECS 1にログインします。 詳細については、「接続方法」をご参照ください。
- 次のコマンドを実行してkeepalivedをインストールします。
yumインストールkeepalived
- keepalivedの設定ファイルを変更します。
- 次のコマンドを実行して、keepalived.confを変更します。
vim /etc/keepalived/keepalived.conf
- 以下のコマンドを実行し、入力モードに入ります:
私
- 次の情報に基づいて構成ファイルを変更します。
! Configuration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
vrrp_garp_interval 0
vrrp_gna_interval 0
}
# vrrp_script chechaproxy
# {
# スクリプト "/etc/keepalived/do_sth.sh"
# インターバル5
#}
vrrp_instance VI_1 {
状態MASTER# アクティブなECSインスタンスとしてECS 1を指定します。
interface eth0# elastic network interface (ENI) の名前を指定します。 eth0 is used in this example.
virtual_router_id 51
nopreempt
# preempt_delay 10
優先度100# ECSインスタンスの優先度を指定します。 値が大きいほど優先度が高いことを示す。 この例では100が使用されています。
advert_int 1
authentication {
auth_typeパス
auth_pass 1111
}
unicast_src_ip 192.168.0.209# ECSインスタンスのプライベートIPアドレスを指定します。 この例では192.168.0.209を使用します。
unicast_peer {
192.168.0.210# ピアECSインスタンスのプライベートIPアドレスを指定します。 この例では192.168.0.210を使用します。
}
virtual_ipaddress {
192.168.0.88# HAVIPのIPアドレスを指定します。 この例では192.168.0.88を使用します。
}
notify_master "/etc/keepalived/notify_action.sh MASTER"
notify_backup "/etc/keepalived/notify_action.sh BACKUP"
notify_fault "/etc/keepalived/notify_action.sh FAULT"
notify_stop "/etc/keepalived/notify_action.sh STOP"
garp_master_delay 1
garp_master_refresh 5
track_interface {
eth0# ECSインスタンスのENIの名前を指定します。 この例では、eth0が使用される。
}
# track_script {
# checkhaproxy
#}
}
- Escキーを押して、編集モードを終了します。
:wq
と入力し、Enterキーを押して設定ファイルを保存して閉じます。
- 次のコマンドを実行して、ECS 1でkeepalivedを起動します。
systemctl start keepalived
- ECS 2 にログインします。
- 次のコマンドを実行してkeepalivedをインストールします。
yumインストールkeepalived
- keepalivedの設定ファイルを変更します。
- 次のコマンドを実行して、keepalived.confを変更します。
vim /etc/keepalived/keepalived.conf
- 次のコマンドを実行して、入力モードに入ります。
私
- 次の情報に基づいて構成ファイルを変更します。
! keepalivedの設定ファイル
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
vrrp_garp_interval 0
vrrp_gna_interval 0
}
# vrrp_script chechaproxy
# {
# スクリプト "/etc/keepalived/do_sth.sh"
# インターバル5
#}
vrrp_instance VI_1 {
状態BACKUP# セカンダリECSインスタンスとしてECS 2を指定します。
interface eth0# ENIの名前を指定します。 この例では、eth0が使用される。
virtual_router_id 51
nopreempt
# preempt_delay 10
priority 10# セカンダリECSインスタンスの優先度を指定します。 値が大きいほど優先度が高いことを示す。 この例では、10が使用される。
advert_int 1
authentication {
auth_typeパス
auth_pass 1111
}
unicast_src_ip 192.168.0.210# ECSインスタンスのプライベートIPアドレスを指定します。 この例では192.168.0.210を使用します。
unicast_peer {
192.168.0.209# ピアECSインスタンスのプライベートIPアドレスを指定します。 この例では192.168.0.209を使用します。
}
virtual_ipaddress {
192.168.0.88# HAVIPのIPアドレスを指定します。 この例では192.168.0.88を使用します。
}
notify_master "/etc/keepalived/notify_action.sh MASTER"
notify_backup "/etc/keepalived/notify_action.sh BACKUP"
notify_fault "/etc/keepalived/notify_action.sh FAULT"
notify_stop "/etc/keepalived/notify_action.sh STOP"
garp_master_delay 1
garp_master_refresh 5
track_interface {
eth0# ECSインスタンスのENIの名前を指定します。 この例では、eth0が使用される。
}
# track_script {
# checkhaproxy
#}
}
- Escキーを押して編集モードを終了します。
:wq
と入力し、Enterキーを押して設定ファイルを保存して閉じます。
- 次のコマンドを実行して、ECS 2でkeepalivedを起動します。
systemctl start keepalived
ステップ3: HAVIPを両方のECSインスタンスに関連付ける
HAVIPは、プライマリECSインスタンスとセカンダリECSインスタンスの両方に関連付けることができます。 その後、ECSインスタンスはARPメッセージを送信することでHAVIPをアドバタイズできます。
説明 HAVIPは、同じvSwitchに属するECSインスタンスに関連付けられている必要があります。 各HAVIPは、最大2つのECSインスタンスに関連付けることができます。
次の手順を実行して、HAVIPをプライマリECSインスタンスとセカンダリECSインスタンスの両方に関連付けます。
- VPC コンソールにログインします。
- 左側のナビゲーションペインで HaVip アドレス をクリックします。
- 上部のナビゲーションバーで、HAVIPが作成されているリージョンを選択します。
- ステップ1: HAVIPの作成 で作成したHAVIPを見つけ、HAVIPのIDをクリックします。
- [リソース] セクションで [ECSインスタンス] を見つけ、[バインド] をクリックします。
- 表示されるダイアログボックスで、ECS 1を選択し、[OK] をクリックします。
- 上記の手順を繰り返して、HAVIPをECS 2に関連付けます。
HAVIPをECSインスタンスに関連付けた後、
リソースセクションで関連付けられたECSインスタンスを表示できます。
ステップ4: HAVIPをEIPに関連付ける
HAVIPをEIPに関連付けることができます。 次いで、HAVIPは、EIPを使用して、インターネットを介してサービスを提供することができる。
- VPC コンソールにログインします。
- 左側のナビゲーションペインで HaVip アドレス をクリックします。
- 上部のナビゲーションバーで、HAVIPが作成されているリージョンを選択します。
- ステップ1: HAVIPの作成 で作成したHAVIPを見つけ、HAVIPのIDをクリックします。
- [リソース] セクションで、[EIP] の横にある [バインド] をクリックします。
- 表示されるダイアログボックスで、EIPを選択し、[OK] をクリックします。
次に、HAVIPに関連付けられているEIPを表示できます。
ステップ5: 高可用性のテスト
高可用性をテストするには、次の手順を実行します。
- オンプレミスのコンピューターでブラウザーを開きます。
- EIPのIPアドレスを入力して、ECSインスタンスにデプロイされたNGINXにアクセスします。
テスト結果:
- ECS 1が期待どおりに動作すると、ECS 1がアクセスされます。
- ECS 1がダウンすると、ECS 2はECS 1の仮想IPアドレスとワークロードを引き継ぎます。 これにより、高い可用性が保証されます。