テナントのスケールアップまたはスケールダウンとは、本質的にはテナントのサービス能力、すなわち計算能力やストレージ容量を向上または低下させることであり、単一ノードのサービス能力を高めることで達成することも、サービスノードを追加することで達成することも可能です。本記事では、テナントのリソース仕様(ユニット構成)を増減することで単一ノードのサービス能力を向上または低下させ、テナントのスケールアップまたはスケールダウンを実現する方法について説明します。
前提条件
テナントのスケーリングアップおよびスケーリングダウン操作を実行する前に、以下の操作が必要です:
空きリソースプールは占有されているリソースとしてカウントされるため、スケーリングアップ前にテナントが削除される場合は、対応するリソースプールも一緒に削除してリソースを解放することを推奨します。
リソースプールの削除に関する操作については、リソースプールの削除を参照してください。
テナントのスケーリングダウン操作を実行する前に、テナントが使用中のメモリを解放するために、一度ディスクフラッシュを実行することを推奨します。
ディスクフラッシュを手動でトリガーする操作については、ディスクフラッシュの手動トリガーを参照してください。
注意事項
リソースのスペックを引き上げる際、リソース設定の変更または切り替えによらず、調整後の総リソース量は以下の要件を満たさなければなりません:
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:構成パラメータの値です。ユニットを割り当てる際、システムは構成パラメータ
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