VPC上でPrivateIPアドレスを付け替える

こんにちは。小宮です。
ちょっと前にAWSのVPC上でVIP(VirtualIPアドレス)を移動させる需要があって検証したのですが、
個人的にメモってただけだったのと、質問される機会が数回ありましたので簡単にですが投稿しておきます。

なんらかのクラスタ構成をVPC上で扱う際、VPC上でPrivateIPアドレスを付け替える必要が生じた場合、
awsなので切替スクリプトをAPI使うように修正しないと内部はともかく外部から打ったPINGへの応答が帰ってこない。
つまりVIPが移動したことになりません。

つまり、以下のような感じになります
落とすときは、IF落としてかつCLIも実行する
[shell]ifconfig eth0:1 down
ec2-unassign-private-addresses –network-interface eni-4b649*** –secondary-private-ip-address 10.0.0.96[/shell]
※ec2-unassign-private-addressesの短縮バージョンはec2upip
起動するときも、IF起動かつCLI実行する
[shell]ifconfig eth0:1 up
ec2-assign-private-ip-addresses –network-interface eni-70609*** –secondary-private-ip-address 10.0.0.96[/shell]
※ec2-assign-private-ip-addressesの短縮バージョンはec2apip

切替元のENI:eni-4b649***
切替先のENI:eni-70609***

参考:
VPC 内の EC2 インスタンス に複数EIPを付与する
ec2-assign-private-ip-addresses – Amazon Elastic Compute Cloud
ec2-unassign-private-ip-addresses – Amazon Elastic Compute Cloud

もし、EIPが紐づいてるENIをデタッチ、アタッチしたい場合、以下のような感じ。(たぶん(自分で試してないです))
[shell]ec2-detach-network-interface ${eni_attach_id}
ec2-attach-network-interface ${ENI_ID} –instance ${target_instance_id} –device-index ${TARGET_DEVICE_INDEX}[/shell]

加えて、ifupしてip route処理をするといいらしい。
[shell]ifconfig eth${TARGET_DEVICE_INDEX} up

ip rule delete table 100
ip rule add from ${VIP_ADDRESS} table 100 prio 200
ip route add dev eth${TARGET_DEVICE_INDEX} src ${VIP_ADDRESS} table 100[/shell]

切替スクリプトを用意する場合、ENIとInstanceIDとVIPとデバイス名などを定義しておいて、アタッチされてるか確認するような処理を入れる必要がありそうです。

余談ですがインスタンスタイプ毎に以下の制限があるようです。ENIにPrivateIPが制限以上ついてるとアタッチできなかったです。
—————
 ・High-MEM Quadruple Extra Large (ENI 8枚)×(IP 30個) = 240個
 ・High-MEM Double Extra Large (ENI 4枚)×(IP 30個) = 120個
 ・High-MEM Extra Large (ENI 4枚)×(IP 15個) = 60個
 ・Extra Large (ENI 4枚)×(IP 15個) = 60個
 ・Large (ENI 3枚)×(IP 10個) = 30個
 ・Medium (ENI 2枚)×(IP 6個) = 12個
 ・Small (ENI 2枚)×(IP 4個) = 8個
 ・Micro (ENI 2枚)×(IP 2個) = 4個
 ・High-CPU Extra Large (ENI 4枚)×(IP 15個) = 60個
 ・High-CPU Medium (ENI 2枚)×(IP 6個) = 12個
—————
http://ec2info.s3-website-us-west-2.amazonaws.com/

参考:
同じサブネットへのNIC 2枚指し、またはソースルーティングのおはなし – (ひ)メモ
HeartBeatとElastic IPを使用した冗長化構成をテストする – サーバーワークス エンジニアブログ
“Corosync&Pacemaker”の自動フェイルオーバーでEC2(VPC)の”Public IP”と”Private IP”を同時に切り替える

以上、見ていただいてありがとうございました。

おすすめ記事