論理データセンター(Logical Data Center、LDC)ルーティングは、分散リレーショナルデータベースを複数地域・複数センターに展開する際に発生する地理的距離によるルーティング遅延問題を解決するために使用できます。
OceanBaseデータベースは、典型的な高可用性分散リレーショナルデータベースとして、Paxosプロトコルを用いてログの同期を行い、自然と複数地域・複数センターへの展開方式をサポートしており、高い信頼性の災害復旧保証を提供します。しかし、実際に複数地域・複数センターに展開する場合、どのデータベースも地理的距離によるルーティング遅延問題に直面します。
論理データセンター(Logical Data Center、LDC)ルーティングは、この問題を解決するために設計されました。OceanBaseクラスタの各ZoneにRegion属性とIDC属性を設定し、ODPにIDC名パラメータを指定することで、データリクエストがODPに送信された際、ODPは以下の優先順位でルーティング転送を行います:
当該IDCでマージ中でないレプリカを選択します。
同一リージョン内のIDCでマージ中でないレプリカを選択します。
当該IDCでマージ中のレプリカを選択します。
同一リージョン内のIDCでマージ中のレプリカを選択します。
ローカルリージョン外のIDCでマージ中でないレプリカをランダムに選択します。
ローカルリージョン外のIDCでマージ中のレプリカをランダムに選択します。
LDCルーティングの設定には、以下の3つの手順が必要です:
OceanBaseクラスタのLDC設定。
ODPのLDC設定。
アプリケーションで弱い整合性読み取りを設定します。
説明
LDCが設定されていない場合、OceanBaseデータベースを複数地域・複数センターに展開した際、弱い整合性読み取りはデータのすべてのプライマリ/セカンダリレプリカに均等にアクセスします。ローカルリージョン外のIDC上のレプリカにアクセスすると、システム応答時間が大幅に増加します。
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;セッションレベルのシステム変数を設定して指定します(現在のセッションにのみ有効)。例文は以下のとおりです。
obclient> SET @@ob_read_consistency='weak';グローバルレベルのシステム変数を設定して指定します(そのテナントのすべての接続に有効)。例文は以下のとおりです。
obclient> SET @@global.ob_read_consistency='weak';