[RDS] Aurora インスタンスのサブネットを移動させてみた
こんにちは、菊池です。
Amazon RDSで一度作成したインスタンスのサブネット配置を変更する場合、スナップショットを作成して、別のインスタンスとしてリストアするのが一般的な方法です。そのため、スナップショット作成/リストアの間に更新が行われないように静止点の確保が必要であり、サービスの停止時間がそれなりに発生してしまいます。
しかし、複数のリードレプリカが作成可能で、リードレプリカをマスタに昇格可能である Amazon Aurora であれば、わずかな停止時間でサブネットの移動が可能と考え、試してみました。
やりたいこと
以下のように、Multi-AZ構成で起動している Aurora のインスタンスを、同じVPC内の別のサブネットへ移動させることを考えます。ケースとしては、当初、ELB/EC2/RDSを同じサブネットで構築してサービスしていた状態から、Public/Privateに分けた構成に整理したいというのを想定しています。
手順
以下のような手順で実施しました。
- Subnet Group を移行先のサブネットが含まれるように変更
- リードレプリカを移行先のサブネットに作成
- 移行先サブネットにマスタをフェイルオーバー
- 元のサブネットのリードレプリカを削除
1. Subnet Groupの変更
次の手順2.で作成するリードレプリカが移行先のサブネットに起動するよう、Subnet Groupを変更します。
現状のクラスタに割り当てられているSubnet Groupを選択して編集します。
元のサブネットを削除し、移行先のサブネットを追加します。
現状起動しているサブネットを削除しても、起動中のインスタンスに影響はありませんでした。
2. リードレプリカの作成
リードレプリカを2台追加します。
手順1. でSubnet Groupを変更しておくことで、移行先のサブネットに起動してくれます。
起動が完了したら、期待したサブネットに起動しているか確認しましょう。
]$ nslookup test-aurora-a-2.xxxxxxxxxxxx.ap-northeast-1.rds.amazonaws.com Server: 10.0.0.2 Address: 10.0.0.2#53 Non-authoritative answer: Name: test-aurora-a-2.xxxxxxxxxxxx.ap-northeast-1.rds.amazonaws.com Address: 10.0.2.118
$ nslookup test-aurora-c-2.xxxxxxxxxxxx.ap-northeast-1.rds.amazonaws.com Server: 10.0.0.2 Address: 10.0.0.2#53 Non-authoritative answer: Name: test-aurora-c-2.xxxxxxxxxxxx.ap-northeast-1.rds.amazonaws.com Address: 10.0.3.74
10.0.2.0/24と10.0.3.0/24のサブネットに起動しています。
3. フェイルオーバーを実行
フェイルオーバーを実行し、新たに作成したリードレプリカをマスタに昇格させます。
フェイルオーバーでは、どのリードレプリカをマスタにするかを指定することはできません。期待通りに新しいサブネットのインスタンスがマスタに昇格するよう、あらかじめフェイルオーバー優先順位を変更しておきましょう。
優先順位を確認/設定したら、フェイルオーバーを実行します。実行前のクラスタエンドポイントを確認しておきます。
$ nslookup test-aurora-1.cluster-xxxxxxxxxxxx.ap-northeast-1.rds.amazonaws.com Server: 10.0.0.2 Address: 10.0.0.2#53 Non-authoritative answer: test-aurora-1.cluster-xxxxxxxxxxxx.ap-northeast-1.rds.amazonaws.com canonical name = test-aurora-a-1.xxxxxxxxxxxx.ap-northeast-1.rds.amazonaws.com. Name: test-aurora-a-1.xxxxxxxxxxxx.ap-northeast-1.rds.amazonaws.com Address: 10.0.0.109
マスタは10.0.0.0/24のサブネットにいることがわかります。
フェイルオーバーを実行します。フェイルオーバー中は接続断が発生することにご注意ください。
実行後、再度クラスタエンドポイントを確認します。
$ nslookup test-aurora-1.cluster-xxxxxxxxxxxx.ap-northeast-1.rds.amazonaws.com Server: 10.0.0.2 Address: 10.0.0.2#53 Non-authoritative answer: test-aurora-1.cluster-xxxxxxxxxxxx.ap-northeast-1.rds.amazonaws.com canonical name = test-aurora-a-2.xxxxxxxxxxxx.ap-northeast-1.rds.amazonaws.com. Name: test-aurora-a-2.xxxxxxxxxxxx.ap-northeast-1.rds.amazonaws.com Address: 10.0.2.118
マスタが10.0.2.0/24のサブネットに移動しました。
4. 元のサブネットのリードレプリカを削除
最後に、元のサブネットに残ったリードレプリカを削除します。
リードレプリカをインスタンスエンドポイントで指定して参照していた場合には、先に接続先の変更を実施する必要がありますのでご注意ください。
削除が終われば完了です。
さいごに
いかがでしたでしょうか。
Auroraを使うことで、他のDBエンジンではできないサブネットの移動も、最小限の停止時間で実現可能でした。複数のリードレプリカやリードレプリカをマスタに昇格可能であるというAuroraの特徴は、性能やスケーラビリティだけではなく、運用面でも優れた特性だと実感しました。