ApsaraDB RDS for PostgreSQL は、プライマリインスタンスに障害が発生した場合、ワークロードをプライマリインスタンスからセカンダリインスタンスに自動的に切り替えます。スイッチオーバー後、セカンダリインスタンスが新しいプライマリインスタンスになり、接続エンドポイントは変更されないため、アプリケーションは自動的に再接続します。ディザスタリカバリ訓練や、マルチ AZ 配置でのレイテンシ削減のために、手動スイッチオーバーをトリガーすることもできます。
前提条件
開始する前に、次のものがあることを確認してください:
-
RDS High-availability Edition または RDS Cluster Edition を実行している RDS インスタンス
RDS Basic Edition はセカンダリインスタンスをプロビジョニングしないため、プライマリ/セカンダリ スイッチオーバーをサポートしていません。
RDS for MySQL の高可用性版インスタンスでは、データはプライマリノードとセカンダリノード間でリアルタイムで同期されます。インスタンスのプライマリノードにのみアクセスできます。セカンダリノードはスタンバイとしてのみ実行され、直接アクセスすることはできません。
潜在的リスク
スイッチオーバーをトリガーする前に、次の影響にご注意ください:
-
サービスの中断:スイッチオーバーにより、約 30 秒のダウンタイムが発生します。インスタンスに障害が発生した場合、スイッチオーバーに時間がかかることがあります。切断後にアプリケーションが自動的に再接続するように設定してください。アプリケーションが Druid 接続プールを使用している場合は、Druid をバージョン 1.1.16 以降にアップグレードして、自動再接続が正しく機能することを確認してください。
-
読み取り専用インスタンスのラグ:スイッチオーバー後、読み取り専用インスタンスは新しいプライマリインスタンスへのレプリケーション接続を再確立します。読み取り専用インスタンスでは数分間のデータラグが発生することがあります。
-
エンドポイントの安定性:接続エンドポイントはスイッチオーバー後も変更されません。これらのエンドポイントの IP アドレスが変更される可能性があるため、IP アドレスではなくエンドポイントのホスト名を使用して接続してください。
手動スイッチオーバーのトリガー
ディザスタリカバリ訓練のため、またはマルチ AZ 配置を使用しており、アプリケーションを最も近いゾーンのインスタンスに接続させたい場合に、手動スイッチオーバーをトリガーします。
-
インスタンスページに移動します。上部メニューで、RDS インスタンスがあるリージョンを選択します。次に、対象のインスタンスを見つけて、その ID をクリックします。
-
左側メニューで、[サービス可用性] をクリックします。
-
[可用性情報] セクションで、[プライマリ/セカンダリインスタンスの切り替え] をクリックします。
-
[切り替え時間] パラメーターを設定し、[OK] をクリックします。
[メンテナンスウィンドウ内で切り替え] を選択することを推奨します。
オプション 説明 今すぐ切り替え スイッチオーバーを直ちにトリガーします。 メンテナンスウィンドウ内で切り替え 次回のメンテナンスウィンドウまでスイッチオーバーを遅延させ、実行中のワークロードへの影響を最小限に抑えます。
スイッチオーバー中は、データベースやアカウントの管理、ネットワークタイプの変更などの操作は利用できません。
自動切り替えの一時的な無効化
デフォルトでは、自動切り替えが有効になっています。プライマリインスタンスに障害が発生すると、システムは自動的にワークロードをセカンダリインスタンスに切り替えます。プライマリ/セカンダリ スイッチオーバーの原因の詳細については、「プライマリ/セカンダリ スイッチオーバーの理由」をご参照ください。次のシナリオでは、この動作を一時的に無効にすることができます:
-
大規模な販売促進
-
重要なアプリケーションのアップグレード
-
安定したデータベース接続を必要とする主要なイベント
クラウドディスク版の RDS High-availability Edition およびクラウドディスク版の RDS Cluster Edition のみが、自動切り替えの一時的な無効化をサポートしています。
自動切り替えを無効にするには:
-
インスタンスページに移動します。上部メニューで、RDS インスタンスがあるリージョンを選択します。次に、対象のインスタンスを見つけて、その ID をクリックします。
-
左側メニューで、[サービス可用性] をクリックします。
-
[可用性情報] セクションで、[プライマリ/セカンダリ スイッチオーバーの設定] をクリックします。
[プライマリ/セカンダリ スイッチオーバーの設定] が表示されない場合は、お使いのインスタンスが RDS High-availability Edition を実行していることを確認してください。
-
[一時的に無効化] を選択し、[期限] パラメーターを設定して、[OK] をクリックします。
期限に達すると、自動切り替えは再度有効になります。期限を設定しない場合、自動切り替えはデフォルトで 1 日間無効になります。最大期限は、現在から 7 日後の 23:59:59 です。
保存後、期限が [サービス可用性] ページに表示され、自動切り替えがいつ再開されるかを確認できます。
切り替えログの表示
-
インスタンスページに移動します。上部メニューで、RDS インスタンスがあるリージョンを選択します。次に、対象のインスタンスを見つけて、その ID をクリックします。
-
左側メニューで、[サービス可用性] をクリックします。
-
[プライマリ/セカンダリ切り替えログ] セクションで、期間を選択し、その期間内に生成された切り替えログを表示します。
RDS High-availability Edition の読み取り専用インスタンスも、プライマリ/セカンダリ切り替えログの表示をサポートしています。
よくある質問
スイッチオーバー後、ワークロードを元のプライマリインスタンスに切り戻す必要はありますか?
いいえ。スイッチオーバー後、セカンダリインスタンスは同じデータを持つ新しいプライマリインスタンスになります。追加のアクションは不要です。
スイッチオーバー後、アプリケーションが数分間異常な動作をします。原因と解決策を教えてください。
これは通常、ソケット接続にタイムアウトが設定されていない場合に発生します。タイムアウトがないと、古い接続が無効になった後、アプリケーションはデータベースからの応答を無期限に待ち続け、SQL文がキューに入れられて失敗します。
データベース接続に connectTimeout と socketTimeout を設定して、ネットワークエラー中にアプリケーションが待機する時間を制限してください。オンライン トランザクション ワークロードの場合、connectTimeout を 1〜2 秒に、socketTimeout を 60〜90 秒に設定してください。実際のワークロードとレイテンシの要件に基づいて、これらの値を調整してください。
関連 API
| 操作 | 説明 |
|---|---|
| SwitchDBInstanceHA | プライマリインスタンスとセカンダリインスタンス間でワークロードを切り替えます |
| ModifyHASwitchConfig | 自動プライマリ/セカンダリ スイッチオーバーを有効または無効にします |
| DescribeHASwitchConfig | インスタンスの自動切り替え設定を照会します |