シングルゾーンにデプロイされた ApsaraMQ for Kafka インスタンスは、ゾーンレベルの障害が発生した場合、サービスの利用不可やデータ損失のリスクにさらされます。これを防ぐために、ApsaraMQ for Kafka のコネクタエコシステム統合機能を使用して、メッセージを別のリージョンにあるセカンダリインスタンスにバックアップできます。障害発生時には、トラフィックをセカンダリインスタンスに切り替え、オフセットをリセットすることでサービスを復旧します。
仕組み
このディザスタリカバリのアーキテクチャでは、異なるリージョンにデプロイされた 2 つの ApsaraMQ for Kafka インスタンスを使用します:
プライマリインスタンスは、すべての本番トラフィックを受信し、処理します。
sink コネクタは、プライマリインスタンスから別のリージョンにあるセカンダリインスタンスにメッセージを継続的にバックアップします。
ゾーンレベルの障害によってプライマリインスタンスが中断した場合、クライアントはエンドポイントをセカンダリインスタンスに切り替えます。
コンシューマーはセカンダリインスタンスでオフセットをリセットし、処理を再開します。
前提条件
開始する前に、以下のものが準備できていることを確認してください:
異なるリージョンにある 2 つの ApsaraMQ for Kafka インスタンス
Cloud Enterprise Network (CEN) を介した 2 つのリージョン間の接続性
(推奨) CNAME ベースのトラフィック切り替え用のカスタムドメイン名
注意事項
リージョンレベルの障害から保護するために、プライマリインスタンスとセカンダリインスタンスを異なるリージョンにデプロイしてください。
フェールオーバー後、コンシューマーはセカンダリインスタンスでオフセットをリセットするため、一部のメッセージが再処理される可能性があります。重複消費に対応するために、コンシューマーにメッセージのべき等性を実装してください。
CNAME レコードを使用して、カスタムドメイン名をプライマリインスタンスのエンドポイントに関連付けます。障害発生時には、CNAME のターゲットをセカンダリインスタンスを指すように更新します。これにより、アプリケーションを再起動することなくトラフィックが切り替わります。
ディザスタリカバリの設定
ステップ 1:sink コネクタの作成
ApsaraMQ for Kafka の sink コネクタを作成し、プライマリインスタンスからセカンダリインスタンスへメッセージを継続的にレプリケートします。
手順については、「ApsaraMQ for Kafka sink コネクタの作成」をご参照ください。
ステップ 2:(オプション) CNAME レコードの追加
アプリケーションを再起動せずに迅速なトラフィック切り替えを可能にするには、カスタムドメイン名をプライマリインスタンスのドメイン名に関連付ける CNAME レコードを追加します。
手順については、「CNAME レコード」をご参照ください。
ステップ 3:クライアントエンドポイントの設定
CNAME レコードを設定したかどうかに基づいて、以下のいずれかのアプローチを選択します:
CNAME モード (推奨)
CNAME レコードを持つカスタムドメイン名にクライアントを接続します。
障害発生時には、CNAME のターゲットをセカンダリインスタンスのドメイン名に更新します。これにより、アプリケーションを再起動することなく、トラフィックが自動的に切り替わります。
通常モード
クライアントをプライマリインスタンスのエンドポイントに直接接続します。
障害発生時には、クライアント設定をセカンダリインスタンスのエンドポイントに更新し、アプリケーションを再起動します。
リージョンをまたいで ApsaraMQ for Kafka インスタンスにアクセスするには、Cloud Enterprise Network (CEN) を介して、それらのリージョンにある Virtual Private Cloud (VPC) を接続する必要があります。詳細については、「異なるリージョンの VPC を接続する」をご参照ください。