物理スタンバイデータベース機能は、OceanBaseデータベースの高可用性ソリューションにおいて重要な部分です。ユーザーの重要なアプリケーションに対して、高可用性、データ保護、災害復旧などの重要な機能を提供します。
物理スタンバイデータベースの概要
物理スタンバイデータベースは、OceanBaseの本番データベースの準リアルタイムホットバックアップとして機能します。プライマリデータベースが計画的または計画外の(多数派レプリカ障害)利用不能状態に陥った場合、スタンバイデータベースがサービスを引き継ぎます。また、無損失切り替え(RPO = 0)と損失あり切り替え(RPO > 0)の2種類の災害復旧能力を提供し、サービス停止時間を最大限短縮し、生じる可能性のあるデータ損失を軽減します。
OceanBaseデータベースは、V4.1.0以前では、物理スタンバイデータベースの製品形態はクラスタレベルのプライマリ/スタンバイでした。クラスタにはプライマリクラスタとスタンバイクラスタの2つのロールがあり、プライマリクラスタの下のすべてのユーザーテナントはプライマリテナント、スタンバイクラスタの下のすべてのユーザーテナントはスタンバイテナントとなり、スタンバイクラスタはプライマリクラスタのテナント変更操作を自動的に同期します。
V4.1.0以降、物理スタンバイデータベースの製品形態はテナントレベルのプライマリ/スタンバイに変更されました。つまり、プライマリまたはスタンバイのロール情報はテナントに属し、プライマリテナントとスタンバイテナントに分かれます。クラスタにはもはやプライマリ/スタンバイの概念はなく、単なるテナントを格納するコンテナとなります。プライマリテナントはユーザーが作成する業務テナントであり、クエリ、DML、DDLなどを含む完全なデータベースサービス機能をサポートします。一方、スタンバイテナントは災害復旧と読み取り専用サービスの機能のみを提供します。1つのプライマリテナントと複数のスタンバイテナントが組み合わさって、テナントレベルの物理スタンバイデータベース高可用性ソリューションを構成します。
説明
OceanBaseデータベースはテナント粒度で物理スタンバイデータベース機能を提供するため、現在のOceanBaseデータベースの製品ドキュメントでは、プライマリデータベースとプライマリテナント、スタンバイデータベースとスタンバイテナントは同じ意味を表します。
物理スタンバイデータベースは、主にログ転送サービスとログストレージサービスを通じてログの転送および保存を実行し、ログ再生サービスを通じてプライマリテナントとスタンバイテナントのデータ一貫性を保証します。具体的には:
ログ転送サービスは、プライマリテナントとスタンバイテナント間でRedoログをリアルタイムに同期します。
現在、OceanBaseデータベースの物理スタンバイデータベースは非同期および同期モードのみを提供しています。
ログストレージサービスは、物理スタンバイデータベースに高可用性・高信頼性のログストレージおよび読み書き機能を提供します。
スタンバイテナントがログストレージサービスに書き込んだログは、ログ再生サービスを通じてメモリのMemStoreにリアルタイムまたは遅延して適用され、プライマリテナントとスタンバイテナントのデータが完全に一致することを保証します。
物理スタンバイデータベースは、OceanBaseデータベースのマルチレプリカに基づく災害復旧ソリューション、アービトレーションに基づく災害復旧ソリューション、物理バックアップ・リカバリ、CDC(Change Data Capture)などの機能と組み合わせて使用することで、顧客の多様なデータ保護および可用性ニーズを満たすことができます。
物理スタンバイデータベースのデプロイメントプラン
物理スタンバイデータベースを使用する一連のプランでは、1つのプライマリテナントと1つ以上のスタンバイテナントを含むことができます。プライマリテナントは業務に対して読み書きサービスを提供し、スタンバイテナントはRedoログをリアルタイムに同期することで、プライマリテナント上に書き込まれたデータを保持します。
1つのプライマリテナントと対応するスタンバイテナントは、近距離または遠距離に位置する複数の異なるOceanBaseクラスタにデプロイすることも、同一のOceanBaseクラスタにデプロイすることもできます。それに応じて、同一のOceanBaseクラスタにはプライマリテナントのみ、スタンバイテナントのみ、またはプライマリテナントとスタンバイテナントの両方を含むことができます。プライマリテナントとスタンバイテナントのテナント名は同じである必要はなく、テナントのリソース仕様、設定、ローカリティなども同じである必要はありません。
さらに、プライマリテナントとスタンバイテナントは、シングルレプリカのテナントであることも、マルチレプリカまたはアービトレーションによる高可用性機能を備えたテナントであることもできます。異なるデプロイ方法は、テナントに異なるレベルのレプリカレベル災害復旧能力を提供します。
テナントレベルの物理スタンバイデータベースは、ユーザーの運用に大きな柔軟性を提供します。以下に、いくつかの代表的なデプロイおよび使用シナリオを紹介します。
クラスタ内にプライマリテナントまたはスタンバイテナントのみ存在する場合
このデプロイメントプランでは、ユーザーは複数のOceanBaseクラスタを持ち、各OceanBaseクラスタに含まれる業務テナントは、すべてプライマリテナントであるか、すべてスタンバイテナントであるかのいずれかです。
このデプロイメントスキームは、最も典型的なデプロイメントモードの一つであり、ユーザーは物理スタンバイデータベース機能を利用して、地理的冗長化による災害復旧など、さまざまな要件を実現できます。
デプロイメントアーキテクチャ図は以下のとおりです。
クラスタ内にプライマリテナントとスタンバイテナントの両方が存在する場合
このデプロイメントスキームでは、ユーザーは複数のOceanBaseクラスタを持ち、各クラスタにはプライマリテナントとスタンバイテナントの両方が存在します。また、クラスタ内のテナントがプライマリテナントのみでスタンバイテナントが存在しない構成も許可されています。
典型的なユースケースは以下のとおりです:
業務が異なる2つの地域で読み書きおよび地理的冗長化による災害復旧を必要とするため、2つの地域にプライマリデータベースとスタンバイデータベースの両方を配置する必要があります。他のデータベースのプライマリ/スタンバイ方式を使用する場合、ユーザーは2つの地域にそれぞれ2つ(またはそれ以上)のクラスタをデプロイし、地域間でクラスタをプライマリ/スタンバイとして相互に接続する必要があります。
OceanBaseデータベースのデプロイメントスキームでは、2つの地域にそれぞれ1つのクラスタをデプロイするだけで、テナントレベルのプライマリ/スタンバイ構成により業務要件を満たせるため、データベースクラスタの管理複雑さを大幅に簡素化できます。デプロイメントアーキテクチャ図は以下のとおりです。
プライマリテナントとスタンバイテナントが同一クラスタ内に存在する場合
このデプロイメントスキームでは、ユーザーはOceanBaseクラスタを1つのみ持ち、プライマリテナントと対応する1つ以上のスタンバイテナントはすべて同一のOceanBaseクラスタ内に存在します。
このデプロイメントスキームを使用する可能性のあるシナリオは以下のとおりです:
ある業務テナントが業務アップグレード前にデータベースのスナップショットを保持する必要がある場合を想定します。この場合、同一クラスタ内にリアルタイム同期のスタンバイテナントを作成し、業務のアップグレード操作を実行する前にそのスタンバイテナントの同期を一時停止できます。その後、プライマリテナント上で任意の読み書き操作を実行できます(例えば、業務アップグレードを実行する)。これらの操作はすべてスタンバイテナントに影響を与えません。後に業務アップグレードが失敗した場合、現在のプライマリテナントを削除し、スタンバイテナントを新しいプライマリテナントに切り替えることができます(新しいテナント名を元のプライマリテナント名に変更することで、Proxyへのアクセスを維持できます)。
デプロイメントアーキテクチャ図は以下のとおりです。