論理データセンター(Logical Data Center、LDC)ルーティングは、分散リレーショナルデータベースを複数地域・複数センターに展開した際に生じる地理的距離によるルーティング遅延を解決するために使用できます。
OceanBaseデータベースは、代表的な高可用性分散リレーショナルデータベースとして、Paxosプロトコルを用いてログの同期を行い、自然と複数地域・複数センターへの展開方式をサポートしており、高い信頼性の災害復旧保証を提供します。しかし、実際に複数地域・複数センターに展開する場合、どのデータベースも地理的距離によるルーティング遅延に直面します。
論理データセンター(Logical Data Center、LDC)ルーティングは、この問題を解決するために設計されました。OceanBaseクラスタの各Zoneに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はゾーンが存在するリージョン情報を表し、通常は都市名(大文字小文字を区別)に設定します。パラメータ
idcはそのゾーンが所在するデータセンター情報を表し、通常はデータセンター名(小文字)に設定します。パラメータ
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をサンプルデータセンターとします:
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データセンターを例にすると、ODPにLDCを設定した後、アプリケーションを上海のzueデータセンターにデプロイした場合、アプリケーションロジックが弱い一貫性の読み取りを開始すると、リクエストはすべて優先的に上海のデータセンターに送信されます。
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';