テナントのスケールアウトまたはスケールインとは、本質的にはテナントのサービス能力、すなわち計算能力やストレージ容量を向上または低下させることです。これは、単一ノードのサービス能力を高めるか、サービスノードを追加することで実現できます。本記事では、テナントのリソース構成(Unit Config)を拡大または縮小することで、単一ノードのサービス能力を向上または低下させ、テナントのスケールアウトまたはスケールインを実現する方法について説明します。
前提条件
テナントのスケールアウトおよびスケールイン操作を実施する前に、以下の操作を行ってください:
アイドル状態のリソースプールも使用中のリソースとしてカウントされるため、スケールアウトを行う前にテナントが削除される場合は、リソースの解放のためにそのテナントに対応するリソースプールも一緒に削除することを推奨します。
リソースプールの削除に関する操作については、リソースプールの削除を参照してください。
テナントのスケールイン操作を実行する前に、テナントが使用中のメモリを解放するため、一度のダンプを実行することを推奨します。
ダンプを手動でトリガーする操作については、ダンプの手動トリガーを参照してください。
注意事項
リソース構成を引き上げる際、リソース構成の変更または切り替えによらず、調整後の総リソース量は以下の要件を満たす必要があります:
Sum(min_cpu) <= CPU_CAPACITY;
Sum(max_cpu) <= CPU_CAPACITY * resource_hard_limit;
Sum(memory_size) <= MEM_CAPACITY;
Sum(log_disk_size) <= LOG_DISK_CAPACITY;
ここで:
CPU_CAPACITY:CPUの総容量を表します。MEM_CAPACITY:メモリの総容量を表します。LOG_DISK_CAPACITY:ログディスクの総容量を表します。ログディスクの総容量は、クラスタレベルの構成パラメータ
log_disk_sizeとlog_disk_percentageによって共同で制御されます。log_disk_sizeはRedoログディスクのサイズを設定し、デフォルト値は0です。log_disk_percentageはRedoログがその配置されているディスクの総容量に占める割合を設定し、デフォルト値は0です。2つの構成パラメータの使用規則は以下のとおりです:log_disk_sizeの値が0でlog_disk_percentageの値が0以外の場合、システムはlog_disk_percentageパラメータで設定された値に基づいてログディスク容量を割り当てます。log_disk_sizeの値が0以外の場合、log_disk_percentageの値が0であるかどうかにかかわらず、システムはlog_disk_sizeパラメータで設定された値に基づいてログディスク容量を割り当てます。log_disk_sizeとlog_disk_percentageの両方の値が0の場合、システムはログとデータが同一ディスクを共有するかどうかに応じて、Redoログがその配置されているディスクの総容量に占める割合を自動的に計算します:共有する場合、Redoログはその配置されているディスクの総容量の30%を占有します。
専有する場合、Redoログはその配置されているディスクの総容量の90%を占有します。
構成パラメータ
log_disk_sizeの詳細については、log_disk_size を参照してください。構成パラメータ
log_disk_percentageの詳細については、log_disk_percentage を参照してください。resource_hard_limit:構成パラメータの値です。Unitを割り当てる際、システムは構成パラメータ
resource_hard_limitの値に基づいてCPUリソースを割り当てます。この構成パラメータのデフォルト値は100で、オーバーコミットを許可しないことを意味します。取り得る範囲は[100, 10000]です。構成パラメータ
resource_hard_limitの詳細については、resource_hard_limit を参照してください。
リソース構成の調整
テナントのリソース構成を拡大または縮小する際、以下の2つのシナリオがあります:
現在のテナントに独立したリソース構成が設定されている場合、直接そのテナントのリソース構成を変更できます。
複数のテナントが同じリソース構成を使用しており、テナントのリソース構成を切り替える必要がある場合。
テナントが使用するリソース仕様IDの取得
テナントが独立したリソース仕様を使用しているかどうかを確認するには、以下のステップで操作対象のテナントが使用するリソース仕様IDを取得します。
rootユーザーでクラスタのsysテナントにログインします。
obclient -h172.30.xxx.xxx -P2883 -uroot@sys#obdemo -pxxxx -A操作対象のテナントが属するリソース構成IDを照会します。
obclient> SELECT a.TENANT_NAME, b.UNIT_CONFIG_ID FROM oceanbase.DBA_OB_TENANTS a,oceanbase.DBA_OB_RESOURCE_POOLS b WHERE b.TENANT_ID=a.TENANT_ID; +----------------+----------------+ | TENANT_NAME | UNIT_CONFIG_ID | +----------------+----------------+ | sys | 1 | | midas0_3790 | 1008 | | midas0_3790 | 1008 | | midas0_3790 | 1007 | | mq_t1 | 1006 | | oracle_tenant1 | 1003 | +----------------+----------------+ 6 rows in set
照会結果によると、現在のテナントに対応するUNIT_CONFIG_IDが他のテナントと同じ場合、複数のテナントが同じリソース仕様を使用していることを意味します。
現在のテナントに対応するUNIT_CONFIG_IDが他のテナントと異なる場合、そのテナントは独立したリソース仕様を使用しています。例えば、テナントmq_t1に対応するUNIT_CONFIG_IDが他のテナントとはすべて異なるため、テナントmq_t1は独立したリソース仕様を使用しています。
テナントに独立したリソース仕様が設定されている場合
操作対象のテナントに独立したリソース仕様が設定されている場合は、テナントの unit_config を直接変更することで、テナントのスケールアウトおよびスケールインを実行できます。
例:
以下では、テナント mq_t1 のリソース仕様を調整し、CPUリソースを増やす例を説明します。
rootユーザーでクラスタのsysテナントにログインします。
obclient -h172.30.xxx.xxx -P2883 -uroot@sys#obdemo -pxxxx -Aoceanbaseデータベースに入ります。obclient>USE oceanbase;操作対象のテナントが使用している
UNIT_CONFIG_IDを確認します。obclient> SELECT a.TENANT_NAME, b.UNIT_CONFIG_ID FROM oceanbase.DBA_OB_TENANTS a,oceanbase.DBA_OB_RESOURCE_POOLS b WHERE b.TENANT_ID=a.TENANT_ID; +----------------+----------------+ | TENANT_NAME | UNIT_CONFIG_ID | +----------------+----------------+ | sys | 1 | | midas0_3790 | 1008 | | midas0_3790 | 1008 | | midas0_3790 | 1007 | | mq_t1 | 1006 | | oracle_tenant1 | 1003 | +----------------+----------------+ 6 rows in set操作対象のテナントのリソース仕様詳細を確認します。
obclient> SELECT * FROM oceanbase.DBA_OB_UNIT_CONFIGS WHERE UNIT_CONFIG_ID='1006'; +----------------+----------------+----------------------------+----------------------------+---------+---------+-------------+---------------+----------+----------+-------------+ | UNIT_CONFIG_ID | NAME | CREATE_TIME | MODIFY_TIME | MAX_CPU | MIN_CPU | MEMORY_SIZE | LOG_DISK_SIZE | MAX_IOPS | MIN_IOPS | IOPS_WEIGHT | +----------------+----------------+----------------------------+----------------------------+---------+---------+-------------+---------------+----------+----------+-------------+ | 1006 | S2_unit_config | 2022-11-03 17:13:29.021410 | 2022-11-03 17:13:29.021410 | 3 | 3 | 12884901888 | 38654705664 | 30000 | 30000 | 3 | +----------------+----------------+----------------------------+----------------------------+---------+---------+-------------+---------------+----------+----------+-------------+ 1 row in setリソース仕様を調整します。
S2_unit_configの設定を増やします。obclient> ALTER RESOURCE UNIT S2_unit_config MAX_CPU 5, MIN_CPU 5;テナントの現在のリソース仕様を確認し、変更が成功したかどうかを確認します。
obclient> SELECT * FROM oceanbase.DBA_OB_UNIT_CONFIGS WHERE UNIT_CONFIG_ID='1006'; +----------------+----------------+----------------------------+----------------------------+---------+---------+-------------+---------------+----------+----------+-------------+ | UNIT_CONFIG_ID | NAME | CREATE_TIME | MODIFY_TIME | MAX_CPU | MIN_CPU | MEMORY_SIZE | LOG_DISK_SIZE | MAX_IOPS | MIN_IOPS | IOPS_WEIGHT | +----------------+----------------+----------------------------+----------------------------+---------+---------+-------------+---------------+----------+----------+-------------+ | 1006 | S2_unit_config | 2022-11-03 17:13:29.021410 | 2023-01-12 10:28:57.606507 | 5 | 5 | 12884901888 | 38654705664 | 30000 | 30000 | 3 | +----------------+----------------+----------------------------+----------------------------+---------+---------+-------------+---------------+----------+----------+-------------+ 1 row in set
クエリ結果に基づき、MAX_CPU と MIN_CPU が対応する値に変更されていれば、実行は成功です。
複数のテナントが同一リソース仕様を使用する場合
複数のテナントが同じリソース仕様を共有している場合、単純にリソース仕様を増減させることでテナントのスケールアウト・スケールインを実現できません。なぜなら、一度変更すると、同じリソース仕様を使用するすべてのテナントが同時にスケールアウトまたはスケールインされてしまうためです。
このような場合は、まず独立したリソース仕様を作成し、その後テナントのリソース仕様を切り替える必要があります。
同じくテナント mq_t1 を例に、CPUリソースを調整する方法を示します。
rootユーザーでクラスタのsysテナントにログインします。
obclient -h172.30.xxx.xxx -P2883 -uroot@sys#obdemo -pxxxx -Aoceanbaseデータベースに入ります。obclient>use oceanbase;操作対象テナントが使用している
UNIT_CONFIG_IDとRESOURCE_POOL_NAMEを確認します。obclient> SELECT a.TENANT_NAME, b.NAME RESOURCE_POOL_NAME, b.UNIT_CONFIG_ID FROM oceanbase.DBA_OB_TENANTS a,oceanbase.DBA_OB_RESOURCE_POOLS b WHERE b.TENANT_ID=a.TENANT_ID; +----------------+---------------------+----------------+ | TENANT_NAME | RESOURCE_POOL_NAME | UNIT_CONFIG_ID | +----------------+---------------------+----------------+ | sys | sys_pool | 1 | | midas0_3790 | midas0_3790_pool_z3 | 1008 | | midas0_3790 | midas0_3790_pool_z2 | 1008 | | midas0_3790 | midas0_3790_pool_z1 | 1007 | | mq_t1 | mq_pool_01 | 1006 | | oracle_tenant1 | oracle_pool_01 | 1003 | +----------------+---------------------+----------------+ 6 rows in set操作対象テナントのリソース仕様詳細を確認します。
obclient> SELECT * FROM oceanbase.DBA_OB_UNIT_CONFIGS WHERE UNIT_CONFIG_ID='1006'; +----------------+----------------+----------------------------+----------------------------+---------+---------+-------------+---------------+----------+----------+-------------+ | UNIT_CONFIG_ID | NAME | CREATE_TIME | MODIFY_TIME | MAX_CPU | MIN_CPU | MEMORY_SIZE | LOG_DISK_SIZE | MAX_IOPS | MIN_IOPS | IOPS_WEIGHT | +----------------+----------------+----------------------------+----------------------------+---------+---------+-------------+---------------+----------+----------+-------------+ | 1006 | S2_unit_config | 2022-11-03 17:13:29.021410 | 2023-01-12 10:28:57.606507 | 5 | 5 | 12884901888 | 38654705664 | 30000 | 30000 | 3 | +----------------+----------------+----------------------------+----------------------------+---------+---------+-------------+---------------+----------+----------+-------------+ 1 row in set独立した新しいリソース仕様を作成します。新しいリソース仕様の各リソース値は、変更後の目標値に設定します。
現在のリソース仕様よりも高い
new_S2_unit_configを作成します。obclient> CREATE RESOURCE UNIT new_S2_unit_config MAX_CPU = 5, MIN_CPU = 5, MEMORY_SIZE = 12884901888,LOG_DISK_SIZE = 38654705664,MAX_IOPS = 30000, MIN_IOPS = 30000, IOPS_WEIGHT=3;操作対象テナントのリソースプールに新しいリソース仕様を適用します。
obclient> ALTER RESOURCE POOL mq_pool_01 unit='new_S2_unit_config';テナントの現在のリソース仕様を確認し、変更が成功したかどうかを確認します。
obclient> SELECT * FROM oceanbase.DBA_OB_UNIT_CONFIGS WHERE UNIT_CONFIG_ID='1006'; +----------------+--------------------+----------------------------+----------------------------+---------+---------+-------------+---------------+----------+----------+-------------+ | UNIT_CONFIG_ID | NAME | CREATE_TIME | MODIFY_TIME | MAX_CPU | MIN_CPU | MEMORY_SIZE | LOG_DISK_SIZE | MAX_IOPS | MIN_IOPS | IOPS_WEIGHT | +----------------+--------------------+----------------------------+----------------------------+---------+---------+-------------+---------------+----------+----------+-------------+ | 1006 | new_S2_unit_config | 2022-12-03 17:13:29.021410 | 2022-12-03 17:13:29.021410 | 5 | 5 | 12884901888 | 38654705664 | 30000 | 30000 | 3 | +----------------+--------------------+----------------------------+----------------------------+---------+---------+-------------+---------------+----------+----------+-------------+ 1 row in set
詳細を見る
GV$OB_SERVERSビューを使用してリソースの上限値を照会します。GV$OB_SERVERSビューの詳細については、GV$OB_SERVERSを参照してください。例:
obclient> SELECT * FROM oceanbase.GV$OB_SERVERS\G *************************** 1. row *************************** SVR_IP: 172.xx.xxx.xxx SVR_PORT: 2882 ZONE: zone1 SQL_PORT: 2881 CPU_CAPACITY: 64 CPU_CAPACITY_MAX: 64 CPU_ASSIGNED: 8 CPU_ASSIGNED_MAX: 8 MEM_CAPACITY: 75161927680 MEM_ASSIGNED: 18253611008 LOG_DISK_CAPACITY: 179583320064 LOG_DISK_ASSIGNED: 56103010304 LOG_DISK_IN_USE: 1409286144 DATA_DISK_CAPACITY: 179593805824 DATA_DISK_ASSIGNED: NULL DATA_DISK_IN_USE: 228589568 DATA_DISK_HEALTH_STATUS: NORMAL MEMORY_LIMIT: 107374182400 DATA_DISK_ALLOCATED: 179593805824 DATA_DISK_ABNORMAL_TIME: NULL SSL_CERT_EXPIRED_TIME: NULL SS_DATA_DISK_OPERATION_SUGGESTED: NULL SS_DATA_DISK_SIZE_SUGGESTED: NULL 1 row in setGV$OB_UNITSビューを使用して、クラスタ内のすべてのテナントのリソース割り当て状況を照会します。GV$OB_UNITSビューの詳細については、GV$OB_UNITSを参照してください。例:
obclient> select SVR_IP,SVR_PORT,UNIT_ID,TENANT_ID,MAX_CPU,MIN_CPU,ceil(MEMORY_SIZE/1024/1024/1024) MEMORY_SIZE_G,MAX_IOPS,MIN_IOPS,IOPS_WEIGHT,ceil(LOG_DISK_SIZE/1024/1024/1024) LOG_DISK_SIZE_G,ceil(LOG_DISK_IN_USE/1024/1024/1024) LOG_DISK_IN_USE_G,ceil(DATA_DISK_IN_USE/1024/1024/1024) DATA_DISK_IN_USE_G,STATUS,CREATE_TIME from oceanbase.GV$OB_UNITS; +--------------+----------+---------+-----------+---------+---------+---------------+----------+----------+-------------+-----------------+-------------------+--------------------+--------+----------------------------+ | SVR_IP | SVR_PORT | UNIT_ID | TENANT_ID | MAX_CPU | MIN_CPU | MEMORY_SIZE_G | MAX_IOPS | MIN_IOPS | IOPS_WEIGHT | LOG_DISK_SIZE_G | LOG_DISK_IN_USE_G | DATA_DISK_IN_USE_G | STATUS | CREATE_TIME | +--------------+----------+---------+-----------+---------+---------+---------------+----------+----------+-------------+-----------------+-------------------+--------------------+--------+----------------------------+ | xx.xx.xx.43 | 2882 | 1 | 1 | 5 | 2 | 32 | 10000 | 10000 | 1 | 32 | 26 | 11 | NORMAL | 2022-11-03 15:36:31.693272 | | xx.xx.xx.43 | 2882 | 1001 | 1001 | NULL | NULL | 4 | NULL | NULL | NULL | 10 | 8 | 16 | NORMAL | 2022-11-03 17:33:15.340453 | | xx.xx.xx.43 | 2882 | 1001 | 1002 | 12 | 12 | 29 | 60000 | 60000 | 6 | 87 | 37 | 21 | NORMAL | 2022-11-03 17:33:15.340453 | | xx.xx.xx.43 | 2882 | 1007 | 1007 | NULL | NULL | 2 | NULL | NULL | NULL | 4 | 0 | 0 | NORMAL | 2023-01-04 23:50:57.990761 | | xx.xx.xx.43 | 2882 | 1007 | 1008 | 5 | 5 | 11 | 30000 | 30000 | 3 | 33 | 2 | 1 | NORMAL | 2023-01-04 23:50:57.990761 | | xx.xx.xx.158 | 2882 | 3 | 1 | 5 | 2 | 32 | 10000 | 10000 | 1 | 32 | 26 | 11 | NORMAL | 2022-11-03 15:36:31.690365 | | xx.xx.xx.158 | 2882 | 1003 | 1001 | NULL | NULL | 4 | NULL | NULL | NULL | 10 | 8 | 16 | NORMAL | 2022-11-03 17:33:15.344035 | | xx.xx.xx.158 | 2882 | 1003 | 1002 | 12 | 12 | 29 | 15000 | 15000 | 1 | 87 | 26 | 21 | NORMAL | 2022-11-03 17:33:15.344035 | | xx.xx.xx.158 | 2882 | 1009 | 1007 | NULL | NULL | 2 | NULL | NULL | NULL | 4 | 0 | 0 | NORMAL | 2023-01-04 23:50:57.998665 | | xx.xx.xx.158 | 2882 | 1009 | 1008 | 5 | 5 | 11 | 30000 | 30000 | 3 | 33 | 2 | 1 | NORMAL | 2023-01-04 23:50:57.998665 | | xx.xx.xx.47 | 2882 | 1004 | 1007 | NULL | NULL | 2 | NULL | NULL | NULL | 4 | 3 | 6 | NORMAL | 2023-01-04 18:32:08.216823 | | xx.xx.xx.47 | 2882 | 1004 | 1008 | 5 | 5 | 11 | 30000 | 30000 | 3 | 33 | 3 | 1 | NORMAL | 2023-01-04 18:32:08.216823 | | xx.xx.xx.47 | 2882 | 1010 | 1009 | NULL | NULL | 1 | NULL | NULL | NULL | 2 | 2 | 3 | NORMAL | 2023-01-06 16:52:53.867318 | | xx.xx.xx.47 | 2882 | 1010 | 1010 | 1.5 | 1.5 | 5 | 15000 | 15000 | 1 | 17 | 2 | 1 | NORMAL | 2023-01-06 16:52:53.867318 | | xx.xx.xx.19 | 2882 | 1006 | 1007 | NULL | NULL | 2 | NULL | NULL | NULL | 4 | 3 | 5 | NORMAL | 2023-01-04 18:32:08.217376 | | xx.xx.xx.19 | 2882 | 1006 | 1008 | 5 | 5 | 11 | 30000 | 30000 | 3 | 33 | 3 | 1 | NORMAL | 2023-01-04 18:32:08.217376 | | xx.xx.xx.81 | 2882 | 1005 | 1007 | NULL | NULL | 2 | NULL | NULL | NULL | 4 | 3 | 6 | NORMAL | 2023-01-04 18:32:08.217390 | | xx.xx.xx.81 | 2882 | 1005 | 1008 | 5 | 5 | 11 | 30000 | 30000 | 3 | 33 | 3 | 1 | NORMAL | 2023-01-04 18:32:08.217390 | | xx.xx.xx.81 | 2882 | 1011 | 1009 | NULL | NULL | 1 | NULL | NULL | NULL | 2 | 2 | 3 | NORMAL | 2023-01-06 16:52:53.867944 | | xx.xx.xx.81 | 2882 | 1011 | 1010 | 1.5 | 1.5 | 5 | 15000 | 15000 | 1 | 17 | 2 | 1 | NORMAL | 2023-01-06 16:52:53.867944 | | xx.xx.xx.106 | 2882 | 2 | 1 | 5 | 2 | 32 | 10000 | 10000 | 1 | 32 | 26 | 11 | NORMAL | 2022-11-03 15:36:31.689252 | | xx.xx.xx.106 | 2882 | 1002 | 1001 | NULL | NULL | 4 | NULL | NULL | NULL | 10 | 8 | 16 | NORMAL | 2022-11-03 17:33:15.344232 | | xx.xx.xx.106 | 2882 | 1002 | 1002 | 12 | 12 | 29 | 15000 | 15000 | 1 | 87 | 26 | 21 | NORMAL | 2022-11-03 17:33:15.344232 | | xx.xx.xx.106 | 2882 | 1008 | 1007 | NULL | NULL | 2 | NULL | NULL | NULL | 4 | 0 | 0 | NORMAL | 2023-01-04 23:50:57.995715 | | xx.xx.xx.106 | 2882 | 1008 | 1008 | 5 | 5 | 11 | 30000 | 30000 | 3 | 33 | 2 | 1 | NORMAL | 2023-01-04 23:50:57.995715 | +--------------+----------+---------+-----------+---------+---------+---------------+----------+----------+-------------+-----------------+-------------------+--------------------+--------+----------------------------+ 25 rows in set