レプリカの概念
レプリカとは、OceanBaseデータベースのストレージエンジンにおける概念であり、同一データが異なるノード上に複製されたものを指します。ここでいうデータとは、ユーザー層面での概念です。
OceanBaseデータベースの観点から見ると、これはデータパーティションを指します。各データパーティションはテナントのローカリティ属性に基づいて複数の冗長化されたコピーを持ち、これにより良好なスケーラビリティと高度な災害復旧能力を提供します。
データパーティションとは、一定のテーブル作成ルールに従って、テーブルまたはインデックスをより小さく、管理しやすい複数の部分に分割したものを指します。各データパーティションは独立したオブジェクトであり、独自の名前とオプションのストレージ特性を持っています。
説明
OceanBaseデータベースはマルチレプリカアーキテクチャで知られており、Paxosプロトコルに基づくマルチレプリカアーキテクチャは高可用性の基盤となっています。マルチレプリカにおける「レプリカ」とは、本質的に同一データが異なるノード上に複製されたものを指します。また、OceanBaseデータベースではデータパーティション、ログストリーム、ユニット、テナントなど、データを保持するための複数のレベルのコンテナが存在します。一般的に「レプリカ」と言及する場合、それは「データパーティションのレプリカ」を指すことが多いです。ただし、文脈によって「レプリカ」が対応するデータベースエンティティが異なる場合があるため注意が必要です。
レプリカの役割
レプリカはOceanBaseデータベースの可用性と耐障害性を向上させます。また、ネットワーク障害やデータセンター障害に対処するため、異なる地理的位置にレプリカを配置することができます。
OceanBaseデータベースは、パーティションレプリケーションやログ同期などの方法でデータを複数のレプリカに複製し、データ損失を防ぎます。これにより、少数のレプリカに障害が発生した場合でも、損失のないデータベースサービスを提供し続けることが可能になります。
レプリカのタイプ
OceanBaseデータベースのストレージエンジンは、階層型LSM-Tree構造を採用しており、データは大きく二つに分かれています:ベースラインデータと増分データです。
ベースラインデータとは、ディスクに永続化されるデータであり、一度生成されると変更されることはありません。これをSSTableと呼びます。
増分データはメモリ上に存在し、ユーザーによる書き込みはまず増分データに対して行われます。これをMemTableと呼び、RedoLogによってトランザクション性が保証されます(CommitLogまたはCLogとも呼ばれます)。
これらのデータは複数の冗長化が施されており(例えば、同一都市内の3センター構成では3つ、3地域5センター構成では5つ)、複数のノードに分散配置されています。トランザクションコミット時にはPaxosプロトコルを用いて複数ノード間でRedoLogを同期し、過半数のコミットを達成することで、レプリカ間のデータ一貫性を維持します。
OceanBaseデータベースの現行バージョンがサポートするレプリカタイプは以下の通りです:
フル機能レプリカ
フル機能レプリカは通常レプリカとも呼ばれ、その名前はFULLで、略称はFです。RedoLog、MemTable、SSTableなど、すべての完全なデータと機能を備えています。
フル機能レプリカには役割という概念があり、データパーティションにもそれぞれLeaderとFollowerという役割が設定されます。Leaderは主に外部への書き込みサービスと強い整合性を持つ読み取りサービスを提供し、弱い整合性を持つ読み取りサービスも提供可能です。Followerは外部へ弱い整合性を持つ読み取りサービスを提供し、Leaderが故障した場合に迅速に切り替わって外部へのサービスを継続できます。
フル機能レプリカは必須レプリカであり、テナントのフル機能レプリカの数は1以上である必要があります。フル機能レプリカの詳細については、フル機能レプリカを参照してください。
読み取り専用レプリカ
読み取り専用レプリカの名前はREADONLYで、略称はRです。フル機能レプリカとは異なり、読み取り専用レプリカは読み取り機能のみを提供し、書き込み機能はありません。ログストリームのフォロワーレプリカとしてのみ機能し、選出やログの投票には参加せず、ログストリームのリーダーレプリカに選出されることもありません。
読み取り専用レプリカはオプションであり、ユーザーは業務上のニーズに応じて導入するかどうかを選択できます。読み取り専用レプリカの詳細については、読み取り専用レプリカを参照してください。
カラムストアレプリカ
カラムストアレプリカの名前はCOLUMNSTOREで、略称はCです。カラムストアレプリカとは、同一ログストリーム上のユーザーテーブルのベースラインデータがすべてカラムストア方式で保存されるレプリカのことです。ここでいうユーザーテーブルには複製テーブルが含まれますが、インデックステーブル、内部テーブル、システムテーブルなどは含まれません。例えば、ユーザーがFレプリカ上に行ストアテーブルを作成した場合、そのテーブルはCレプリカが存在するマシン上でカラムストア形式で保存されます。読み取り専用レプリカRと同様に、カラムストアレプリカも選出やログ投票には参加せず、完全なSSTable、Clog、MemTableを備えています。
カラムストアレプリカはオプションであり、通常は分析処理(AP)シナリオで使用されます。ユーザーは業務上のニーズに応じて導入するかどうかを選択できます。カラムストアレプリカの詳細については、カラムストアレプリカを参照してください。
APシナリオにおけるカラムストアレプリカの詳細な導入方法については、OceanBase AP導入の概要を参照してください。
ログストリームの紹介
ログストリームの概念
ログストリームとは、OceanBaseデータベースが自動的に作成および管理するエンティティであり、複数のデータパーティションと、それらに対するトランザクション操作のログおよびトランザクション管理構造を含む一連のデータ集合を表します。RedoLogはPaxosプロトコルに基づいて実装されたログモジュールであり、複数のレプリカ間でのログ同期を実現し、レプリカ間のデータの一貫性を保証し、データの高可用性を実現しています。TxCtxMgrはトランザクション管理構造であり、ログストリーム内のすべてのデータパーティションの変更はログストリーム内部でアトミックコミットを完了できます。トランザクションが複数のログストリームにまたがる場合は、OceanBaseが最適化した2フェーズコミットプロトコルを使用してトランザクションのアトミックコミットを完了します。ログストリームは分散トランザクションの参加者です。

ログストリームはOceanBaseデータベースV4.0で新たに導入された概念であり、OceanBaseデータベースV4.0とOceanBaseデータベースV3.xとの最大の違いは、トランザクションコミットの基本単位が変更されたことであり、これによりリソース、パフォーマンス、機能の3つの側面で大きな価値がもたらされました。
OceanBaseデータベースV3.xでは、OceanBaseデータベースはパーティション単位でトランザクションをコミットし、パーティション内の変更はパーティション内WALによって変更の原子性が保証されます。各パーティションは2フェーズコミットの参加者となり、トランザクションコミットの基本単位はパーティションです。
OceanBaseデータベースV4.xでは、OceanBaseデータベースはログストリーム単位でトランザクションをコミットし、ログストリーム内の変更はログストリーム内WALによって変更の原子性が保証されます。各ログストリームは2フェーズコミットの参加者となり、トランザクションコミットの基本単位はログストリームです。
ブロードキャストログストリーム
V4.2.0バージョンから、OceanBaseデータベースはブロードキャストログストリームという新しい概念を導入しました。あるテナントの最初のレプリケーションテーブルが作成されると同時に、システムはブロードキャストログストリームと呼ばれる特別なログストリームを作成します。その後、新しく作成されるレプリケーションテーブルはすべてこのブロードキャストログストリームに作成されます。ブロードキャストログストリームと通常のログストリームの違いは、ブロードキャストログストリームは自動的にテナント内の各OBServerノードにレプリカをデプロイし、理想的な状況下ではレプリケーションテーブルが任意のOBServerノードで強い一貫性を持つ読み取りを提供できることを保証する点にあります。
一般的に、一貫性プロトコルの投票に参加するレプリカが多すぎると、過半数を得るまでに必要な時間が長くなります。テナント内のOBServerノードが多い場合、すべてのOBServer上のレプリカが投票に参加することは自然には不可能です。そのため、投票に参加する必要がないOBServer上にはRレプリカ(READONLYレプリカ、読み取り専用レプリカ)を、投票に参加する必要があるOBServerノード上には通常のFレプリカ(FULLレプリカ、すなわちフル機能レプリカ)をデプロイします。
ブロードキャストログストリームと通常のログストリームのレプリカに関する違いは以下の通りです:
通常のログストリームについては、各Zoneには1つのレプリカしか存在せず、そのレプリカタイプはLocalityで指定されたレプリカタイプと一致している必要があります。
ブロードキャストログストリームについては、各Zone内にはLocalityで記述されたそのzoneのレプリカタイプに加えて、そのZone内に他のユニットリソースを持つマシンにもそれぞれ1つの読み取り専用レプリカが配置されます。Localityでレプリカタイプが指定されていないZoneには、レプリカは配置されません。
ブロードキャストログストリームの使用制限は以下の通りです:
sysテナントおよびすべてのMetaテナントにはブロードキャストログストリームがなく、レプリケーションテーブルの作成はサポートされていません。各ユーザーテナントには最大1つのブロードキャストログストリームしかありません。
ブロードキャストログストリームと通常のログストリーム間のプロパティ変換はサポートされていません。
ブロードキャストログストリームの手動削除はサポートされておらず、現在はテナントの削除に伴ってのみブロードキャストログストリームの削除が可能です。
ログストリームの基本情報を確認する
DBA_OB_LSビューを使用すると、このテナント内のすべてのログストリームの基本情報(ステータス、ログ進捗状況など)を確認できます。例えば:
通常のログストリームの情報を確認する
システムテナントとユーザーテナントは、それぞれのテナントに対応するログストリームの基本情報を確認できます。たとえば、以下の例はシステムテナントで実行され、システムテナントに固有の1番のログストリームが表示されています。
SELECT * FROM oceanbase.DBA_OB_LS limit 10;結果は次のとおりです。
+-------+--------+----------------------------------------+---------------+-------------+------------+----------+----------+--------------+-----------+ | LS_ID | STATUS | PRIMARY_ZONE | UNIT_GROUP_ID | LS_GROUP_ID | CREATE_SCN | DROP_SCN | SYNC_SCN | READABLE_SCN | FLAG | +-------+--------+----------------------------------------+---------------+-------------+------------+----------+----------+--------------+-----------+ | 1 | NORMAL | sa128_obv4_2;sa128_obv4_1,sa128_obv4_3 | 0 | 0 | NULL | NULL | NULL | NULL | | +-------+--------+----------------------------------------+---------------+-------------+------------+----------+----------+--------------+-----------+ 1 row in setブロードキャストログストリームの情報を確認する
ブロードキャストログストリームの情報はユーザーテナントのみが確認でき、システムテナントにはブロードキャストログストリームはありません。以下の例はユーザーテナントで実行され、ユーザーテナントのブロードキャストログストリームの情報が示されています。コピー・テーブルはこのログストリーム上に作成されます。
SELECT * FROM oceanbase.DBA_OB_LS WHERE flag LIKE "%DUPLICATE%";結果は次のとおりです。
+-------+--------+--------------+---------------+-------------+---------------------+----------+---------------------+---------------------+-----------+ | LS_ID | STATUS | PRIMARY_ZONE | UNIT_GROUP_ID | LS_GROUP_ID | CREATE_SCN | DROP_SCN | SYNC_SCN | READABLE_SCN | FLAG | +-------+--------+--------------+---------------+-------------+---------------------+----------+---------------------+---------------------+-----------+ | 1003 | NORMAL | z1;z2 | 0 | 0 | 1683267390195713284 | NULL | 1683337744205408139 | 1683337744205408139 | DUPLICATE | +-------+--------+--------------+---------------+-------------+---------------------+----------+---------------------+---------------------+-----------+
ログストリームの位置情報とロール情報の確認
ログストリームには位置情報があり、どのノードに配置されているかを記録しています。oceanbase.DBA_OB_LS_LOCATIONSビューのMEMBER_LISTフィールドとLEARNER_LISTフィールドを使用して、フル機能レプリカと読み取り専用レプリカの配置状況をそれぞれ確認できます。データパーティションはもはや独立した位置情報を持たず、所属するログストリームの位置によって決定されます。ログストリームは、パフォーマンスの均等化と災害復旧を目的として、異なるノード間で移行および複製をサポートします。
ログストリームにはロール情報があり、LEADERかFOLLOWERかを記録しています。oceanbase.DBA_OB_LS_LOCATIONSビューのROLEフィールドを使用して確認できます。データパーティションはもはや独立したロール情報を持たず、所属するログストリームのロールによって決定されます。ログストリームのロールは選出プロトコルによって生成されます。
ビューoceanbase.DBA_OB_LS_LOCATIONSの詳細については、DBA_OB_LS_LOCATIONSを参照してください。
データパーティションからログストリームへのマッピングの確認
DBA_OB_TABLE_LOCATIONSビューを使用して、テナント内のデータパーティションからログストリームへのマッピングを確認できます。各データパーティションの各レプリカは1件のレコードであり、そのデータパーティションの基本情報と、所属するログストリームの情報を記録しています。
ビューoceanbase.DBA_OB_TABLE_LOCATIONSの詳細については、DBA_OB_TABLE_LOCATIONSを参照してください。