ロジカルデータセンター(Logical Data Center、LDC)ルーティングは、分散リレーショナルデータベースを複数の地域・複数のデータセンターに展開する際に発生するリモートルーティングの遅延問題を解決するために使用されます。
OceanBaseデータベースは、典型的な高可用性分散リレーショナルデータベースとして、Paxosプロトコルを用いてログ同期を行い、自然と複数の地域・複数のデータセンターへの展開方式をサポートし、高い信頼性の災害復旧保証を提供します。しかし、実際に複数の地域・複数のデータセンターに展開する場合、どのデータベースもリモートルーティングの遅延問題に直面します。
ロジカルデータセンター(Logical Data Center、LDC)ルーティングは、この問題を解決するために設計されました。OceanBaseクラスタの各ゾーンにRegion属性とIDC属性を設定し、ODPにIDC名の構成パラメータを指定することで、データリクエストがODPに送信される際、ODPは以下の優先順位でルーティング転送を行います:
当該データセンター内でコンパクション中でないレプリカを選択します。
同一リージョン内のデータセンターでコンパクション中でないレプリカを選択します。
当該データセンター内でコンパクション中のレプリカを選択します。
同一リージョン内のデータセンターでコンパクション中のレプリカを選択します。
ローカルリージョン外のデータセンターからランダムにコンパクション中でないレプリカを選択します。
ローカルリージョン外のデータセンターからランダムにコンパクション中のレプリカを選択します。
LDCルーティングの設定には、以下の3つのステップが必要です:
OceanBaseクラスタのLDC設定。
ODPのLDC設定。
アプリケーションの弱い整合性読み取りの設定。
説明
LDCが設定されていない場合、OceanBaseデータベースを複数の地域・複数のデータセンターに展開すると、弱い整合性読み取りはデータのすべてのプライマリおよびフォロワーレプリカに均等にアクセスします。その結果、ローカルリージョン外のデータセンター上のレプリカにアクセスする際、システムの応答時間が大幅に増加します。
OceanBaseクラスタのLDC設定
OceanBaseデータベースがサポートするクライアントツールを使用して、rootユーザーでクラスタのsysテナントにログインします。
ログイン後、以下のサンプルステートメントを実行してLDCを設定します。
obclient> ALTER SYSTEM MODIFY zone "z1" SET region = "SHANGHAI"; obclient> ALTER SYSTEM MODIFY zone "z1" SET idc = "zue";その中で:
パラメータ
regionはZoneが属するリージョン情報を表し、通常は都市名(大文字と小文字が区別されます)に設定されます。パラメータ
idcはそのZoneが位置するIDC情報を表し、通常はIDC名(小文字)に設定されます。パラメータ
zoneは現在設定されているZoneの名前です。1つのOceanBaseクラスタには複数のRegionがあり、1つのRegionには複数のZoneがあり、1つのZoneは1つのIDC属性に対応します。
OBServerノードのLDC設定が有効になっているかどうか確認します。
クエリステートメントは以下のとおりで、返される結果の該当するZoneのRegionとIDCフィールドの値が設定値と一致するかどうかを確認します。
obclient> SELECT * FROM oceanbase.DBA_OB_ZONES;
ODPのLDC設定
ODPのLDC設定には2つの方法があり、zueはサンプルIDCです:
ODPプロセス起動時にパラメータ指定により設定します(推奨される方法)。サンプルステートメントは以下のとおりです。
cd /opt/taobao/install/obproxy-1.5.5 ./bin/obproxy -o proxy_idc_name=zueOceanBaseデータベースがサポートするクライアントツールで
ALTERステートメントを実行してODP構成パラメータを変更します。サンプルステートメントは以下のとおりです。obclient> ALTER PROXYCONFIG SET proxy_idc_name= 'zue';
上記のサンプルでzue IDCを例にとると、ODPにLDCを設定した後、アプリケーションが上海zue IDCにデプロイされている場合、アプリケーションロジックが弱い整合性読み取りを開始すると、リクエストは優先的に上海IDCに送信されます。
ODPにLDCを設定した後、以下のステートメントを使用して設定が有効になっているかどうか確認できます。
obclient> SHOW PROXYINFO IDC;
返される結果は次のとおりです:

アプリケーションの弱い整合性読み取りの設定
LDCルーティングは、弱い整合性読み取りのシナリオに対してのみ有効になります。アプリケーションの弱い整合性読み取りの設定には、以下の3つの方法があります:
SQLにHINTを含めて指定します。サンプルステートメントは以下のとおりです。
obclient> SELECT /*+read_consistency(weak)*/ * FROM t1;Sessionレベルのシステム変数を設定して指定します(現在のSessionにのみ有効)。サンプルステートメントは以下のとおりです。
obclient> SET @@ob_read_consistency='weak';グローバルレベルのシステム変数を設定して指定します(そのテナントのすべての接続に有効)。サンプルステートメントは以下のとおりです。
obclient> SET @@global.ob_read_consistency='weak';