OceanBaseデータベースでは、テナントのレプリカ数、ゾーンリスト、プライマリゾーン、システム変数の値など、ユーザーテナントの属性を変更できます。本記事では、テナント属性の変更方法について説明します。
背景
テナント属性を変更する一般的なシナリオ:
テナントのプライマリゾーンの変更:プライマリゾーンはリーダーレプリカの優先位置を示し、リーダーレプリカは業務の強整合性読み書きトラフィックを担っています。つまり、プライマリゾーンはOceanBaseデータベースのトラフィック分散を決定します。プライマリゾーン属性を変更することで、業務トラフィックを切り替えたり、あるデータセンターから別のデータセンターへ、あるいはある都市から別の都市へ移行したりできます。これは、災害復旧シナリオやスケーリングなどに適しています。
テナントのローカリティの変更:ローカリティはデータの複数レプリカのタイプおよび配置ポリシーを記述します。ローカリティ属性を変更することで、テナントのデプロイメントアーキテクチャを調整できます。これは、データセンターの移転や災害復旧レベルの調整などのシナリオに適しています。
手順
rootユーザーでクラスタのsysテナントにログインします。
obclient -h172.30.xx.xx -P2883 -uroot@sys#cluster -p**** -Aoceanbaseデータベースに入ります。obclient(root@sys)[(none)]> USE oceanbase;DBA_OB_TENANTSビューを使用して、テナントの設定情報を確認します。テナント
mq_t1の設定情報を確認する例を以下に示します:obclient(root@sys)[oceanbase]> SELECT TENANT_ID, TENANT_NAME, TENANT_TYPE, CREATE_TIME, MODIFY_TIME, PRIMARY_ZONE, LOCALITY, COMPATIBILITY_MODE, STATUS FROM oceanbase.DBA_OB_TENANTS WHERE TENANT_NAME = 'mq_t1';クエリ結果は次のとおりです:
+-----------+-------------+-------------+----------------------------+----------------------------+--------------+------------------------------+--------------------+--------+ | TENANT_ID | TENANT_NAME | TENANT_TYPE | CREATE_TIME | MODIFY_TIME | PRIMARY_ZONE | LOCALITY | COMPATIBILITY_MODE | 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 | MYSQL | NORMAL | +-----------+-------------+-------------+----------------------------+----------------------------+--------------+------------------------------+--------------------+--------+ 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:テナントのプライマリゾーンを指定します。RESOURCE_POOL_LIST:リソースプールのリストを指定します。一度に追加または削除できるのは1つのリソースプールのみです。LOCALITY:レプリカのゾーン間分散状況を記述します。例えば、F@zone1,F@zone2,F@zone3はzone1、zone2、zone3がフル機能レプリカであることを意味します。このパラメータでゾーンを追加する場合、テナントのリソースプールのZONE_LISTにそのゾーンが含まれている必要があります。
ALTER TENANTステートメントの詳細については、ALTER TENANTを参照してください。例:
テナント
mq_t1のプライマリゾーンを"zone1,zone2"に、Localityを"F@zone1,F@zone2,F@zone3"に変更します。obclient(root@sys)[oceanbase]> ALTER TENANT mq_t1 PRIMARY_ZONE='zone1,zone2';obclient(root@sys)[oceanbase]> ALTER TENANT mq_t1 LOCALITY="F@zone1,F@zone2,F@zone3";テナントのリソースプールは、一度に1つのみ追加または削除できます。テナントのリソースプールを直接置き換えることはサポートされていません。テナントが元々使用していたリソースプールが
mq_pool_01の場合、以下のコマンドでテナントのリソースプールを直接mq_pool_02に置き換えると、システムはエラーを返します。obclient(root@sys)[oceanbase]> ALTER TENANT mq_t1 RESOURCE_POOL_LIST=('mq_pool_02'); ERROR 1210 (HY000): Incorrect arguments to resource pool list
ビューを確認し、テナント属性の変更結果を確認します。
プライマリゾーンとLocalityを変更するコマンドは、即座にユーザーに戻り、非同期で有効になります。そのため、関連するビューを使用してコマンドの実際の有効化状況を確認する必要があります:
DBA_OB_TENANTSビューを使用して、テナントのプライマリゾーン情報とLocality属性を確認できます。ビューのPRIMARY_ZONEフィールドはユーザーが設定したプライマリゾーン値を、LOCALITYフィールドはユーザーが設定したLocality値を、PREVIOUS_LOCALITYは変更前のLocality値を表します。PREVIOUS_LOCALITYがNULLではない場合、Localityの変更はまだ有効になっていないことを意味します。PREVIOUS_LOCALITYがNULLの場合、Localityの変更が有効になっていることを意味します。- システムテナント内の
CDB_OB_TABLE_LOCATIONSビューを使用して、対応するテナントのテーブルとパーティションの分散情報を確認できます。ユーザーテナント内のDBA_OB_TABLE_LOCATIONSビューを使用して、自身のテナントのテーブルとパーティションの分散情報を確認できます。プライマリゾーンとLocalityを変更するコマンドの最終的有効化は、これらのビューに反映されます。