このトピックでは、ApsaraDB for MongoDB のプライマリ/セカンダリスイッチオーバーの問題について説明します。
インスタンスでプライマリ/セカンダリスイッチオーバーが発生する理由
インスタンスのプライマリ/セカンダリスイッチオーバーは、次の原因で発生します。
手動スイッチオーバー:お客様または承認された Alibaba Cloud の技術専門家が、手動でプライマリ/セカンダリスイッチオーバーをトリガーします。
潜在的なリスク:Alibaba Cloud は、インスタンスに通常のサービスに影響を与える可能性のある潜在的なリスクがあることを検出します。 ApsaraDB for MongoDB は、脆弱性を修正するための O&M タスクを開始し、指定されたメンテナンスウィンドウ内でプライマリ/セカンダリスイッチオーバーを実行します。
処理済みの O&M タスクは 履歴イベント でクエリでき、保留中の O&M タスクは スケジュール済みイベント で管理できます。
ホストのオフライン:インスタンス内のノードがデプロイされているホストで例外が発生し、インスタンスの通常のサービスに影響を与える可能性があります。 ApsaraDB for MongoDB は、ホストがオフラインであると見なし、リスクのあるノードを置き換えるためにプライマリ/セカンダリスイッチオーバーをトリガーします。
インスタンスの例外:Alibaba Cloud がインスタンスに障害があり、正常に動作できないことを検出した場合、ApsaraDB for MongoDB はすぐにプライマリ/セカンダリスイッチオーバーをトリガーして、インスタンスをタイムリーに回復し、ダウンタイムを短縮します。
ホストのオフラインまたはインスタンスの例外が原因でプライマリ/セカンダリスイッチオーバーがトリガーされた場合、次の形式で内部メッセージまたはメールで通知を受け取ります。
[Alibaba Cloud] **** 様: ApsaraDB for MongoDB インスタンス dds-bp****(名前:****)に例外が発生しました。高可用性システムは、インスタンスの安定した実行を確保するためにスイッチオーバーをトリガーしました。 アプリケーションがまだインスタンスに接続されているかどうかを確認し、アプリケーションがインスタンスに自動的に再接続するように構成することをお勧めします。
プライマリ/セカンダリスイッチオーバーの影響
影響:
プライマリ/セカンダリスイッチオーバー中は、約 30 秒間の一時的な切断が発生します。
アプリケーションをプライマリノードに接続している場合、アプリケーションの読み取り/書き込み操作はプライマリ/セカンダリスイッチオーバーの影響を受けます。
ビジネスデプロイメントの推奨事項:
ビジネスの継続性を保護するために、切断後にアプリケーションをインスタンスに再接続し、例外を処理できるようにすることをお勧めします。
本番環境では、SRV 接続文字列 URI または接続文字列 URI を使用してアプリケーションをインスタンスに接続することをお勧めします。 ノードに障害が発生した場合、アプリケーションの読み取りおよび書き込み操作は、プライマリ/セカンダリスイッチオーバーの影響を受けません。 詳細については、「レプリカセットインスタンスへの接続」または「シャードクラスターインスタンスへの接続」をご参照ください。
手動プライマリ/セカンダリスイッチオーバーを構成する方法
ApsaraDB for MongoDB では、手動プライマリ/セカンダリスイッチオーバーを構成できるため、リアルタイムの災害復旧訓練を実行し、クライアントの例外処理機能を検証できます。 インスタンスが複数のゾーンにデプロイされている場合は、アプリケーションが最も近いノードに接続できるように手動スイッチオーバーを構成することもできます。
スタンドアロンインスタンスは、アーキテクチャの制限により、プライマリ/セカンダリスイッチオーバーをサポートしていません。
レプリカセットインスタンスにデータを書き込むときにエラーが発生する理由
問題の説明
レプリカセットインスタンスにデータを書き込むときに、次のいずれかのエラーメッセージが表示されます:"errmsg": "not master", "code": 10107, "codeName": "NotMaster"、"errmsg": "not master", "code": 10107, "codeName": "NotWritablePrimary"、または Time out after 30000ms while waiting for a server that matches writableServerSelector.
原因
レプリカセットインスタンスでプライマリ/セカンダリスイッチオーバーが発生し、ノードのロールが変更されます。 アプリケーションをプライマリノードに接続している場合、プライマリ/セカンダリスイッチオーバー後にノードはセカンダリノードになります。 そのため、書き込み操作は失敗します。
解決策
ノードのロールを手動で 切り替えて、アプリケーションが接続するノードをプライマリノードに戻します。
本番環境では、SRV 接続文字列 URI または接続文字列 URI を使用してアプリケーションをインスタンスに接続することをお勧めします。 ノードに障害が発生した場合、アプリケーションの読み取りおよび書き込み操作は、プライマリ/セカンダリスイッチオーバーの影響を受けません。 詳細については、「レプリカセットインスタンスへの接続」をご参照ください。
ビジネスの継続性を保護するために、切断後にアプリケーションをインスタンスに再接続し、例外を処理できるようにすることをお勧めします。