テナントの拡張と縮小は、本質的には計算能力やストレージ容量を含むサービス能力の向上または低下を意味します。これは、単一ノードのサービス能力を縦方向(スケールアップ/ダウン)に向上または低下させることで達成することも、横方向(スケールアウト/イン)に向上または低下させることで達成することもできます。本記事では、プライマリゾーンを変更することで計算ノードを横方向に増減し、テナント全体のサービス能力を向上または低下させることで、テナントの拡張または縮小を実現する方法について説明します。
前提条件
テナントのスケールアウトおよびスケールイン操作を実行する前に、以下の操作を行う必要があります:
テナント内のロードバランシングポリシーを設定します。
テナント内のロードバランシングポリシーは、テナントレベルの構成パラメータ
enable_rebalanceとenable_transferによって共同で制御されます。パラメータ
enable_rebalanceは、システムテナントではテナント間のロードバランシングを有効にするかどうかを制御し、ユーザーテナントではテナント内のロードバランシングを有効にするかどうかを制御します。テナントのスケールアウトまたはスケールイン操作を実行する際には、テナント内のロードバランシングを有効にする必要があります。この構成パラメータのデフォルト値はtrueであり、ロードバランシングが有効であることを意味します。設定後はOBServerノードを再起動する必要がなく、即時に反映されます。パラメータ
enable_transferは、テナントのTransfer機能を有効にするかどうかを制御します。デフォルト値はtrueです。設定後はOBServerノードを再起動する必要がなく、即時に反映されます。構成パラメータenable_transferの値の意味は、構成パラメータenable_rebalanceの値に依存します:構成パラメータ
enable_rebalanceの値がfalseの場合、構成パラメータenable_transferの値がtrueであってもfalseであっても、システムは自動ロードバランシングを実行しません。構成パラメータ
enable_rebalanceの値がtrueかつenable_transferの値もtrueの場合、テナントのスケールアウトまたはスケールイン操作時にシステムが自動的にパーティションの分散を調整し、ロードバランシングを実現することを示します。構成パラメータ
enable_rebalanceの値がtrueかつenable_transferの値がfalseの場合、テナントのスケールアウトまたはスケールイン操作時にシステムがTransfer操作を開始できず、ログストリーム移行による限定的なロードバランシングのみが可能であることを示します。
設定方法は以下のとおりです:
システムテナントで指定テナントのロードバランシングポリシーを設定する
システムテナントで指定テナントのテナント内ロードバランシングおよびテナントのTransfer機能を有効にする
ALTER SYSTEM SET enable_rebalance = true TENANT = 'tenant_name';ALTER SYSTEM SET enable_transfer = true TENANT = 'tenant_name';上記のステートメントは、指定テナント内の構成パラメータ
enable_rebalanceとenable_transferの値をtrueに設定することを意味します。システムテナントですべてのユーザーテナント(
sysテナントとMetaテナントを除く)のテナント内ロードバランシングおよびテナントのTransfer機能を有効にするALTER SYSTEM SET enable_rebalance = true TENANT = all_user;ALTER SYSTEM SET enable_transfer = true TENANT = all_user;または
ALTER SYSTEM SET enable_rebalance = true TENANT = all;ALTER SYSTEM SET enable_transfer = true TENANT = all;上記のステートメントは、すべてのユーザーテナント内の構成パラメータ
enable_rebalanceとenable_transferの値をtrueに設定することを意味します。説明
OceanBaseデータベースはV4.2.1バージョンから、
TENANT = all_userとTENANT = allの意味が同じになりました。適用範囲をすべてのユーザーテナントに設定する場合は、TENANT = all_userの使用を推奨します。TENANT = allは今後廃止されます。
ユーザーテナントで自身のテナントのロードバランシングポリシーを設定する
MySQLモードOracleモードMySQLテナントで、そのテナント内のロードバランシングおよびテナント下のTransfer機能を有効にするステートメントは以下のとおりです:
ALTER SYSTEM SET enable_rebalance = true;ALTER SYSTEM SET enable_transfer = true;Oracleテナントで、当該テナント内のロードバランシングおよびテナント内のTransfer機能を有効にするステートメントは以下のとおりです:
ALTER SYSTEM SET enable_rebalance = 'true';ALTER SYSTEM SET enable_transfer = 'true';
enable_rebalanceおよびenable_transferの構成パラメータの詳細については、enable_rebalanceおよびenable_transferを参照してください。テナントのスケールアウトまたはスケールイン操作を実行する前に、期待される効果を得るために、事前にテナントのリソース計画を立てることを推奨します。
テナントのスケールアウトおよびスケールインのリソース計画の詳細な操作については、テナントのスケールアウトおよびスケールインのリソース計画を参照してください。
プライマリゾーンの追加
rootユーザーでクラスタのsysテナントにログインします。obclient -h172.30.xxx.xxx -P2883 -uroot@sys#obdemo -pxxxx -Aoceanbaseデータベースに入ります。use oceanbase;テナント
mysql001の基本情報を照会します。例えば、TENANT_IDやPRIMARY_ZONEなどの情報です。obclient> SELECT TENANT_ID, TENANT_NAME, PRIMARY_ZONE FROM oceanbase.DBA_OB_TENANTS WHERE TENANT_NAME = 'mysql001';クエリ結果は次のとおりです:
+-----------+-------------+--------------+ | TENANT_ID | TENANT_NAME | PRIMARY_ZONE | +-----------+-------------+--------------+ | 1004 | mysql001 | zone1;zone2 | +-----------+-------------+--------------+ 1 row in setクエリ結果から、テナント
mysql001のTENANT_IDは1004、PRIMARY_ZONEの第一優先ゾーンはzone1であることがわかります。テナント
mysql001の現在のログストリームリーダーレプリカの配置情報を照会します。obclient> SELECT TENANT_ID, LS_ID, SVR_IP, SVR_PORT, ZONE, ROLE, REPLICA_TYPE FROM oceanbase.CDB_OB_LS_LOCATIONS WHERE TENANT_ID = 1004 AND LS_ID != 1 AND ROLE = 'LEADER';クエリ結果は次のとおりです:
+-----------+-------+---------------+----------+--------+--------+--------------+ | TENANT_ID | LS_ID | SVR_IP | SVR_PORT | ZONE | ROLE | REPLICA_TYPE | +-----------+-------+---------------+----------+--------+--------+--------------+ | 1004 | 1001 | 172.xx.xxx.xx | 2882 | zone1 | LEADER | FULL | | 1004 | 1012 | 172.xx.xxx.xx | 2882 | zone1 | LEADER | FULL | +-----------+-------+---------------+----------+--------+--------+--------------+ 2 rows in setクエリ結果から、テナント
mysql001には2つのリーダーレプリカがサービスを提供しており、それぞれzone1の異なる2台のマシンに均等に分散していることがわかります。テナント
mysql001のPRIMARY_ZONE属性を変更し、第一優先ゾーンの数を1から2に調整します。obclient> ALTER TENANT mysql001 PRIMARY_ZONE='zone1,zone2';プライマリゾーン追加タスクの実行状態を確認します。
obclient> SELECT * FROM oceanbase.DBA_OB_TENANT_JOBS WHERE JOB_TYPE='ALTER_TENANT_PRIMARY_ZONE' AND TENANT_ID = 1004;クエリ結果は次のとおりです:
+--------+---------------------------+------------+-------------+----------+----------------------------+----------------------------+-----------+--------------------------------------------------+----------------------------------------+----------------+-------------+ | JOB_ID | JOB_TYPE | JOB_STATUS | RESULT_CODE | PROGRESS | START_TIME | MODIFY_TIME | TENANT_ID | SQL_TEXT | EXTRA_INFO | RS_SVR_IP | RS_SVR_PORT | +--------+---------------------------+------------+-------------+----------+----------------------------+----------------------------+-----------+--------------------------------------------------+----------------------------------------+----------------+-------------+ | 4 | ALTER_TENANT_PRIMARY_ZONE | SUCCESS | 0 | 100 | 2024-12-18 17:26:00.069089 | 2024-12-18 17:26:20.919021 | 1004 | ALTER TENANT mysql001 PRIMARY_ZONE='zone1,zone2' | FROM: 'zone1;zone2', TO: 'zone1,zone2' | 172.xx.xxx.xx | 2882 | +--------+---------------------------+------------+-------------+----------+----------------------------+----------------------------+-----------+--------------------------------------------------+----------------------------------------+----------------+-------------+ 1 row in setクエリ結果において、以下のフィールドに基づいて対応するタスクレコードを見つけます:
START_TIME:タスクの開始時間。SQL_TEXT:タスクに対応するSQL文。EXTRA_INFO:変更前後のプライマリゾーン情報。
対応するタスクレコードの
JOB_STATUS値がSUCCESSの場合、プライマリゾーンの追加タスクは正常に実行されたことを意味します。ビュー
DBA_OB_TENANT_JOBSの詳細なフィールド説明については、DBA_OB_TENANT_JOBSを参照してください。テナント
mysql001の基本情報を照会し、PRIMARY_ZONE属性が正常に変更されたことを確認します。第一優先ゾーンはzone1からzone1,zone2に変更されました。obclient> SELECT PRIMARY_ZONE FROM oceanbase.DBA_OB_TENANTS WHERE TENANT_ID = 1004;クエリ結果は次のとおりです:
+--------------+ | PRIMARY_ZONE | +--------------+ | zone1,zone2 | +--------------+ 1 row in set再度テナント
mysql001のログストリームリーダーレプリカの配置情報を照会します。obclient> SELECT TENANT_ID, LS_ID, SVR_IP, SVR_PORT, ZONE, ROLE, REPLICA_TYPE FROM oceanbase.CDB_OB_LS_LOCATIONS WHERE TENANT_ID = 1004 AND LS_ID != 1 AND ROLE = 'LEADER';クエリ結果は次のとおりです:
+-----------+-------+---------------+----------+-------+--------+--------------+ | TENANT_ID | LS_ID | SVR_IP | SVR_PORT | ZONE | ROLE | REPLICA_TYPE | +-----------+-------+---------------+----------+-------+--------+--------------+ | 1004 | 1001 | 172.xx.xxx.xx | 2882 | zone1 | LEADER | FULL | | 1004 | 1012 | 172.xx.xxx.xx | 2882 | zone1 | LEADER | FULL | | 1004 | 1013 | 172.xx.xxx.xx | 2882 | zone2 | LEADER | FULL | | 1004 | 1014 | 172.xx.xxx.xx | 2882 | zone2 | LEADER | FULL | +-----------+-------+---------------+----------+-------+--------+--------------+ 4 rows in setクエリ結果から、テナント
mysql001はzone1とzone2にそれぞれ2つのリーダーレプリカがあり、合計4つのリーダーレプリカがサービスを提供していることがわかります。
上記の例では、変更前はテナントmysql001のPRIMARY_ZONEの第一優先ゾーンの数が1で、2つのリーダーレプリカがサービスを提供していました。変更後は、テナントmysql001のPRIMARY_ZONEの第一優先ゾーンの数が1から2に変更され、サービスを提供するリーダーレプリカが2つから4つに増加し、計算ノードが追加されることで、テナントの拡張が実現されました。
プライマリゾーンの削減
rootユーザーでクラスタのsysテナントにログインします。obclient -h172.30.xxx.xxx -P2883 -uroot@sys#obdemo -pxxxx -Aoceanbaseデータベースに入ります。use oceanbase;テナント
mysql001の基本情報を照会します。例えば、TENANT_IDやPRIMARY_ZONEなどの情報です。obclient> SELECT TENANT_ID, TENANT_NAME, PRIMARY_ZONE FROM oceanbase.DBA_OB_TENANTS WHERE TENANT_NAME = 'mysql001';クエリ結果は次のとおりです:
+-----------+-------------+--------------+ | TENANT_ID | TENANT_NAME | PRIMARY_ZONE | +-----------+-------------+--------------+ | 1004 | mysql001 | zone1,zone2 | +-----------+-------------+--------------+ 1 row in setクエリ結果によると、テナント
mysql001のTENANT_IDは1004、PRIMARY_ZONEの第一優先ゾーンはzone1とzone2です。テナント
mysql001の現在のログストリームリーダーレプリカの配置情報を照会します。obclient> SELECT TENANT_ID, LS_ID, SVR_IP, SVR_PORT, ZONE, ROLE, REPLICA_TYPE FROM oceanbase.CDB_OB_LS_LOCATIONS WHERE TENANT_ID = 1004 AND LS_ID != 1 AND ROLE = 'LEADER';クエリ結果は次のとおりです:
+-----------+-------+---------------+----------+-------+--------+--------------+ | TENANT_ID | LS_ID | SVR_IP | SVR_PORT | ZONE | ROLE | REPLICA_TYPE | +-----------+-------+---------------+----------+-------+--------+--------------+ | 1004 | 1001 | 172.xx.xxx.xx | 2882 | zone1 | LEADER | FULL | | 1004 | 1012 | 172.xx.xxx.xx | 2882 | zone1 | LEADER | FULL | | 1004 | 1013 | 172.xx.xxx.xx | 2882 | zone2 | LEADER | FULL | | 1004 | 1014 | 172.xx.xxx.xx | 2882 | zone2 | LEADER | FULL | +-----------+-------+---------------+----------+-------+--------+--------------+ 4 rows in setクエリ結果によると、テナント
mysql001には4つのリーダーレプリカがサービスを提供しており、それぞれzone1とzone2の2台のマシンに均等に分散しています。テナント
mysql001のPRIMARY_ZONE属性を変更し、第一優先ゾーンの数を2から1に調整します。obclient> ALTER TENANT mysql001 PRIMARY_ZONE='zone1;zone2';プライマリゾーン削減タスクの実行状態を確認します。
obclient> SELECT * FROM oceanbase.DBA_OB_TENANT_JOBS WHERE JOB_TYPE='ALTER_TENANT_PRIMARY_ZONE' AND TENANT_ID = 1004;クエリ結果は次のとおりです:
+--------+---------------------------+------------+-------------+----------+----------------------------+----------------------------+-----------+--------------------------------------------------+------------------------------------------+----------------+-------------+ | JOB_ID | JOB_TYPE | JOB_STATUS | RESULT_CODE | PROGRESS | START_TIME | MODIFY_TIME | TENANT_ID | SQL_TEXT | EXTRA_INFO | RS_SVR_IP | RS_SVR_PORT | +--------+---------------------------+------------+-------------+----------+----------------------------+----------------------------+-----------+--------------------------------------------------+------------------------------------------+----------------+-------------+ | 4 | ALTER_TENANT_PRIMARY_ZONE | SUCCESS | 0 | 100 | 2024-12-18 17:26:00.069089 | 2024-12-18 17:26:20.919021 | 1004 | ALTER TENANT mysql001 PRIMARY_ZONE='zone1,zone2' | FROM: 'zone1;zone2', TO: 'zone1,zone2' | 172.xx.xxx.xx | 2882 | | 5 | ALTER_TENANT_PRIMARY_ZONE | SUCCESS | 0 | 100 | 2024-12-18 17:41:44.412459 | 2024-12-18 17:41:54.965873 | 1004 | ALTER TENANT mysql001 PRIMARY_ZONE='zone1;zone2' | FROM: 'zone1,zone2', TO: 'zone1;zone2' | 172.xx.xxx.xx | 2882 | +--------+---------------------------+------------+-------------+----------+----------------------------+----------------------------+-----------+--------------------------------------------------+------------------------------------------+----------------+-------------+ 2 rows in setクエリ結果において、以下のフィールドに基づいて対応するタスクレコードを見つけます:
START_TIME:タスクの開始時間。SQL_TEXT:タスクに対応するSQL文。EXTRA_INFO:変更前後のプライマリゾーン情報。
対応するタスクレコードの
JOB_STATUS値がSUCCESSの場合、プライマリゾーンの削減タスクは正常に実行されたことを意味します。ビュー
DBA_OB_TENANT_JOBSの詳細なフィールド説明については、DBA_OB_TENANT_JOBSを参照してください。テナント
mysql001の基本情報を照会し、PRIMARY_ZONE属性が正常に変更されたことを確認します。zone1,zone2からzone1;zone2に変更されました。obclient> SELECT PRIMARY_ZONE FROM oceanbase.DBA_OB_TENANTS WHERE TENANT_ID = 1004;クエリ結果は次のとおりです:
+--------------+ | PRIMARY_ZONE | +--------------+ | zone1;zone2 | +--------------+ 1 row in set再度テナント
mysql001のログストリームリーダーレプリカの配置情報を照会します。obclient> SELECT TENANT_ID, LS_ID, SVR_IP, SVR_PORT, ZONE, ROLE, REPLICA_TYPE FROM oceanbase.CDB_OB_LS_LOCATIONS WHERE TENANT_ID = 1004 AND LS_ID != 1 AND ROLE = 'LEADER';クエリ結果は次のとおりです:
+-----------+-------+---------------+----------+--------+--------+--------------+ | TENANT_ID | LS_ID | SVR_IP | SVR_PORT | ZONE | ROLE | REPLICA_TYPE | +-----------+-------+---------------+----------+--------+--------+--------------+ | 1004 | 1001 | 172.xx.xxx.xx | 2882 | zone1 | LEADER | FULL | | 1004 | 1012 | 172.xx.xxx.xx | 2882 | zone1 | LEADER | FULL | +-----------+-------+---------------+----------+--------+--------+--------------+ 2 rows in setクエリ結果によると、テナント
mysql001はzone1上に2つのリーダーレプリカがサービスを提供しています。
上記の例では、変更前はテナントmysql001のPRIMARY_ZONEの第一優先ゾーンの数が2で、4つのリーダーレプリカがサービスを提供していました。変更後は、テナントmysql001のPRIMARY_ZONEの第一優先ゾーンの数が2から1に変更され、サービスを提供するリーダーレプリカも4から2に変更されました。これにより計算ノードが削減され、テナントのスケールダウンが実現されました。