ApsaraDB RDS for SQL Server は、セカンダリインスタンスをプライマリインスタンスとリアルタイムで同期させます。プライマリインスタンスに障害が発生した場合、システムは自動的にセカンダリインスタンスをプライマリに昇格させ、アプリケーションは同じエンドポイントを使用して再接続します。接続文字列を変更する必要はありません。計画的なメンテナンス、アップグレード、またはディザスタリカバリ訓練のために、手動でスイッチオーバーをトリガーすることもできます。
前提条件
開始する前に、RDS High-availability Edition または RDS Cluster Edition を実行しているプライマリ RDS インスタンスがあることを確認してください。
エディション固有の制限事項が適用されます:
RDS Cluster Edition:自動切り替えのみがサポートされています。手動スイッチオーバーを実行するには、Alibaba Cloud のテクニカルサポートにご連絡ください。
RDS Basic Edition:セカンダリインスタンスが提供されていないため、プライマリ/セカンダリ スイッチオーバー機能はサポートされていません。
仕組み
プライマリインスタンスは、すべての読み取りおよび書き込みトラフィックを処理します。セカンダリインスタンスはスタンバイモードで実行され、プライマリインスタンスから継続的にデータをレプリケーションします。セカンダリインスタンスに直接アクセスすることはできません。
スイッチオーバーが自動または手動で発生すると、セカンダリインスタンスがプライマリに昇格します。データベースへの接続に使用されるエンドポイントは変更されませんが、エンドポイントに関連付けられている IP アドレスは変更される場合があります。アプリケーションがエンドポイントを使用して接続している場合、スイッチオーバー後も動作し続けます。
エディションの動作
エディション | 自動切り替え | 手動スイッチオーバー |
High-availability Edition | サポート済み (デフォルトで有効) | サポート済み |
Cluster Edition | サポート済み (デフォルトで有効) | サポート対象外 — Alibaba Cloud のテクニカルサポートにご連絡ください |
Basic Edition | サポート対象外 | サポート対象外 |
自動切り替えをトリガーする要因
プライマリインスタンスに障害が発生した場合、システムはワークロードを自動的にセカンダリインスタンスに切り替えます。詳細については、「プライマリ/セカンダリ スイッチオーバーの理由」をご参照ください。
制限事項
サーバーレスインスタンス:サーバーレス RDS インスタンスは手動スイッチオーバーをサポートしていません。システムはサーバーレスインスタンスのフェールオーバーを自動的に処理します。詳細については、「概要」をご参照ください。
ALTER LOGIN の同期: プライマリ/セカンダリ間の同期メカニズムでは、
ALTER LOGIN文のすべてのパラメーターが複製されるわけではありません。SID、login_name、およびpasswordのみが同期されます。その他すべてのALTER LOGINパラメーターは、セカンダリインスタンスでデフォルト値に復元されます。詳細については、「ALTER LOGIN (Transact-SQL)」をご参照ください。
スイッチオーバーの影響
スイッチオーバーを実行する前に、次の点にご注意ください:
サービス中断:スイッチオーバーにより、約 30 秒のダウンタイムが発生します。切断後にデータベースに自動的に再接続するようにアプリケーションを設定してください。アプリケーションが Druid 接続プールを使用している場合は、Druid をバージョン 1.1.16 以降にアップグレードしてください。それ以前のバージョンでは、切断後に自動的に再接続できない場合があります。
読み取り専用インスタンスのレプリケーションラグ:スイッチオーバー後、読み取り専用インスタンスは新しいプライマリインスタンスへのレプリケーション接続を再確立します。この期間中、数分間のレプリケーションラグが予想されます。
スイッチオーバー中の操作制限:スイッチオーバーの進行中は、データベースやアカウントの管理、ネットワークタイプの変更はできません。
障害発生時のスイッチオーバー時間の延長:インスタンスの障害によってトリガーされたスイッチオーバーは、計画的な手動スイッチオーバーよりも時間がかかる場合があります。
IP アドレスの変更:エンドポイントは同じままですが、エンドポイントに関連付けられている IP アドレスが変更される場合があります。エンドポイントを使用して接続するアプリケーションは影響を受けません。
手動スイッチオーバーを実行するタイミング
以下の状況では、手動スイッチオーバーを検討してください:
メンテナンスとアップグレード:計画的なメンテナンスの影響を最小限に抑えるために、スイッチオーバーの発生タイミングを制御します。
ディザスタリカバリ訓練:実際の障害が発生する前に、アプリケーションがフェールオーバーを正しく処理できることを検証します。
マルチ AZ 近接性:インスタンスがマルチ AZ デプロイを使用しており、アプリケーションを最も近いゾーンに接続させたい場合は、プライマリをそのゾーンに切り替えます。
手動スイッチオーバーの実行
[インスタンス] ページに移動します。上部のナビゲーションバーで、ご利用の RDS インスタンスが存在するリージョンを選択します。インスタンスを見つけて、その ID をクリックします。
左側のナビゲーションウィンドウで、[サービスの可用性] をクリックします。
[可用性情報] セクションで、[プライマリ/セカンダリインスタンスの切り替え] をクリックします。
スイッチオーバーを実行するタイミングを指定し、[OK] をクリックします。
説明[指定された時間範囲内] を選択すると、ピーク時のスイッチオーバーのトリガーを回避できます。スイッチオーバー中は、データベースやアカウントの管理、ネットワークタイプの変更などの操作は利用できません。
自動切り替えの一時的な無効化
デフォルトでは、自動切り替えは有効になっています。プライマリインスタンスに障害が発生すると、システムは即座に切り替わります。大規模な販売促進、主要なアプリケーションのアップグレード、または予期せぬスイッチオーバーが可用性を妨げる可能性のある重要なイベント期間中など、特定の状況では、限られた期間、自動切り替えを抑制したい場合があります。
[インスタンス] ページに移動します。上部のナビゲーションバーで、ご利用の RDS インスタンスが存在するリージョンを選択します。インスタンスを見つけて、その ID をクリックします。
左側のナビゲーションウィンドウで、[サービスの可用性] をクリックします。
[可用性情報] セクションで、[プライマリ/セカンダリの自動切り替え] をクリックします。
説明[プライマリ/セカンダリの自動切り替え] が表示されない場合は、ご利用のインスタンスがすべての前提条件を満たしていることを確認してください。
[一時的に無効化] を選択し、[期限] を設定して、[OK] をクリックします。
説明期限に達すると、自動切り替えは自動的に再度有効になります。[期限] を空白のままにすると、この機能は 1 日間無効になります。最大期限は、現在から 7 日後の 23:59:59 です。
保存後、[サービスの可用性] ページには、自動切り替えが再開される期限が表示されます。
プライマリ/セカンダリ スイッチオーバーログの表示
スイッチオーバーログは、プレミアムローカル SSD を使用する SQL Server 2008 R2 を実行しているインスタンスでのみ利用可能です。
[インスタンス] ページに移動します。上部のナビゲーションバーで、ご利用の RDS インスタンスが存在するリージョンを選択します。インスタンスを見つけて、その ID をクリックします。
左側のナビゲーションウィンドウで、[サービスの可用性] をクリックします。
[プライマリ/セカンダリ切り替えログ] セクションで、時間範囲を選択して、その期間に生成されたスイッチオーバーログを表示します。

よくある質問
スイッチオーバー後、元のプライマリインスタンスに切り戻す必要はありますか?
いいえ。スイッチオーバー後、セカンダリインスタンスが新しいプライマリとなり、すべてのトラフィックを処理します。両方のインスタンスはリアルタイム同期によって同一のデータを保持しているため、手動での切り戻しは不要です。
スイッチオーバー後、約 10 分間アプリケーションの動作が遅くなります。原因は何ですか?
これは通常、スイッチオーバーが発生したときに自動的にクローズされない接続保持をアプリケーションが保持しているために発生します。ソケットタイムアウトが設定されていない場合、アプリケーションはデータベースからの応答を無期限に待ち続けます。接続は開いているように見えますが、リクエストを処理できません。ほとんどのアプリケーションは数分後に切断され、その間 SQL ステートメントは失敗します。
回復時間を短縮するには、connectTimeout および socketTimeout パラメーターを設定します。オンライントランザクションワークロードの場合、connectTimeout を 1~2 秒に、socketTimeout を 60~90 秒に設定します。これらの値は、ワークロードの特性に基づいて調整してください。
API リファレンス
操作 | 説明 |
プライマリノードとセカンダリノード間でワークロードを切り替えます | |
インスタンスのプライマリ/セカンダリ自動切り替えを有効または無効にします | |
インスタンスのプライマリ/セカンダリ自動切り替え設定をクエリします |