OceanBaseデータベースは、ユーザーテナントのプロパティを変更することをサポートしており、テナントのレプリカ数、ゾーンリスト、プライマリゾーン、システム変数値などを変更できます。本記事では、テナントプロパティの変更方法について説明します。
背景
テナント属性を変更する一般的なシナリオ:
テナントのプライマリゾーンを変更する:プライマリゾーンはリーダーフォロワーの優先位置を示しており、リーダーフォロワーは業務の強整合性読み書きトラフィックを担っています。つまり、プライマリゾーンはOceanBaseデータベースのトラフィック分布を決定します。プライマリゾーン属性を変更することで、業務トラフィックを切り替えたり、あるデータセンターから別のデータセンターへ、あるいはある都市から別の都市へ移行したりできます。これは、災害復旧シナリオやスケーリングなどに適しています。
テナントのローカリティを変更する:ローカリティはデータの複数のレプリカのタイプと配置戦略を示しています。ローカリティ属性を変更することで、テナントのデプロイメントアーキテクチャを調整できます。これは、データセンターの移転や災害復旧レベルの調整などのシナリオに適しています。
操作手順
rootユーザーでクラスタのsysテナントにログインします。
obclient -h172.30.xx.xx -P2883 -uroot@sys#cluster -p**** -Aoceanbaseデータベースに移動します。USE oceanbase;DBA_OB_TENANTSビューを使用して、テナントの構成情報を確認します。テナント
mq_t1の構成情報を照会する例を挙げます:obclient [oceanbase]> SELECT * FROM oceanbase.DBA_OB_TENANTS WHERE TENANT_NAME = 'mq_t1'; +-----------+-------------+-------------+----------------------------+----------------------------+--------------+------------------------------+-------------------+--------------------+--------+---------------+--------+-------------+-------------------+------------------+---------------------+---------------------+---------------------+---------------------+--------------+----------------------------+ | TENANT_ID | TENANT_NAME | TENANT_TYPE | CREATE_TIME | MODIFY_TIME | PRIMARY_ZONE | LOCALITY | PREVIOUS_LOCALITY | COMPATIBILITY_MODE | STATUS | IN_RECYCLEBIN | LOCKED | TENANT_ROLE | SWITCHOVER_STATUS | SWITCHOVER_EPOCH | SYNC_SCN | REPLAYABLE_SCN | READABLE_SCN | RECOVERY_UNTIL_SCN | LOG_MODE | ARBITRATION_SERVICE_STATUS | +-----------+-------------+-------------+----------------------------+----------------------------+--------------+------------------------------+-------------------+--------------------+--------+---------------+--------+-------------+-------------------+------------------+---------------------+---------------------+---------------------+---------------------+--------------+----------------------------+ | 1006 | mq_t1 | USER | 2023-05-18 15:48:57.447657 | 2023-05-18 15:49:12.857944 | zone1;zone2 | FULL{1}@zone1, FULL{1}@zone2 | NULL | MYSQL | NORMAL | NO | NO | PRIMARY | NORMAL | 0 | 1684396167132057328 | 1684396167132057328 | 1684396167051160964 | 4611686018427387903 | NOARCHIVELOG | DISABLED | +-----------+-------------+-------------+----------------------------+----------------------------+--------------+------------------------------+-------------------+--------------------+--------+---------------+--------+-------------+-------------------+------------------+---------------------+---------------------+---------------------+---------------------+--------------+----------------------------+ 1 row in setDBA_OB_TENANTSビューの詳細については、DBA_OB_TENANTSを参照してください。ALTER TENANTステートメントを使用して、テナントのプロパティを変更します。注意
このステートメントは、システムテナント内でrootユーザーとして実行する必要があります。
構文は次のとおりです:
ALTER TENANT {tenant_name | all } [SET] [tenant_option_list] [opt_global_sys_vars_set] tenant_option_list: tenant_option [, tenant_option ...] tenant_option: COMMENT [=]'string' |PRIMARY_ZONE [=] zone |RESOURCE_POOL_LIST [=](poolname [, poolname...]) |DEFAULT TABLEGROUP [=] {NULL | tablegroupname} |LOCALITY [=] 'locality description'; opt_global_sys_vars_set: VARIABLES system_var_name = expr [,system_var_name = expr] ...パラメータの説明:
{tenant_name | all }:変更対象のテナントを指定します。allはすべてのテナントを意味します。PRIMARY_ZONE:テナントのPrimary Zoneを指定します。RESOURCE_POOL_LIST:リソースプールのリストを指定します。一度に追加または削除できるのは1つのリソースプールのみです。LOCALITY:ゾーン間のレプリカの分散状況を記述します。例えば、F@zone1,F@zone2,F@zone3はzone1、zone2、zone3がフル機能レプリカであることを示します。このパラメータでゾーン設定を追加する場合、テナントのリソースプールのZONE_LISTにそのゾーンが含まれている必要があります。
ALTER TENANTステートメントの詳細については、ALTER TENANTを参照してください。例:
テナント
mq_t1のPrimary Zoneを"zone1,zone2"に、Localityを"F@zone1,F@zone2,F@zone3"に変更します。obclient [oceanbase]> ALTER TENANT mq_t1 PRIMARY_ZONE='zone1,zone2'; Query OK, 0 rows affected obclient [oceanbase]> ALTER TENANT mq_t1 LOCALITY="F@zone1,F@zone2,F@zone3"; Query OK, 0 rows affectedテナントのリソースプールは一度に追加または削除できるのは1つのリソースプールのみです。テナントのリソースプールを直接置き換えることはサポートされていません。テナントが元々使用していたリソースプールが
mq_pool_01の場合、以下のコマンドでテナントのリソースプールを直接mq_pool_02に置き換えると、システムからエラーが返されます。obclient [oceanbase]> ALTER TENANT mq_t1 RESOURCE_POOL_LIST=('mq_pool_02'); ERROR 1210 (HY000): Incorrect arguments to resource pool list
ビューを確認して、テナントプロパティの変更結果を確認します。
Primary ZoneとLocalityを変更するコマンドは即座にユーザーに返され、非同期で有効になります。そのため、関連するビューを使用してコマンドの実際の有効化状況を確認する必要があります:
DBA_OB_TENANTSビューを使用して、テナントのPrimary Zone情報とLocalityプロパティを確認できます。ビューのPRIMARY_ZONEフィールドはユーザーが設定したPrimary Zone値を、LOCALITYフィールドはユーザーが設定したLocality値を、PREVIOUS_LOCALITYは変更前のLocality値を示します。PREVIOUS_LOCALITYが空でない場合、Localityの変更はまだ有効になっていないことを意味します。PREVIOUS_LOCALITYが空の場合、Localityの変更が有効になっていることを意味します。- システムテナント内の
CDB_OB_TABLE_LOCATIONSビューを使用して、対応するテナントのテーブルとパーティションの分散情報を確認できます。ユーザーテナント内のDBA_OB_TABLE_LOCATIONSビューを使用して、そのテナントのテーブルとパーティションの分散情報を確認できます。Primary ZoneとLocalityを変更するコマンドの最終的な有効化は、これらのビューに反映されます。