物理スタンバイデータベース機能は、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つのクラスタをデプロイするだけで、テナントレベルのプライマリ/スタンバイ構成により業務要件を満たすことができ、データベースクラスタの管理複雑さを大幅に簡素化できます。デプロイメントアーキテクチャ図は以下のとおりです。

プライマリテナントとスタンバイテナントが同一クラスタ内に存在する場合
このデプロイメントプランでは、ユーザーは1つのOceanBaseクラスタしか持たず、プライマリテナントと対応する1つ以上のスタンバイテナントはすべて同一のOceanBaseクラスタ内に存在します。
このデプロイメントプランを使用する可能性のあるシナリオは以下のとおりです:
ある業務テナントが業務アップグレード前にデータベースのスナップショットを保持する必要があると仮定します。この場合、同一クラスタ内にその業務テナントのためのリアルタイム同期スタンバイテナントを作成し、業務のアップグレード操作を実行する前にそのスタンバイテナントの同期を一時停止できます。その後、業務はプライマリテナント上で任意の読み書き操作を実行できます(例えば、業務アップグレードを実行するなど)。これらの操作はすべてスタンバイテナントに影響を与えません。後に業務アップグレードが失敗した場合、現在のプライマリテナントを削除し、スタンバイテナントを新しいプライマリテナントに切り替えることができます(新しいテナント名を元のプライマリテナント名に変更することで、Proxyへのアクセスを変更せずに済みます)。
デプロイメントアーキテクチャ図は以下のとおりです。
