テナントリソースの垂直管理とは、主にテナントリソースプールのリソース構成を調整することで、テナントのサービス能力を変更することです。テナントリソースプールの構成を調整する方法には、リソース構成の変更とリソース構成の切り替えの2種類があります。
リソース構成の変更
リソースプールのリソース構成を変更するとは、リソース構成のCPUやMemoryなどの値を直接調整し、それによってそのリソースプール上のテナントのリソース仕様とサービス能力に直接的な影響を与えることです。
リソースプール pool1 と pool2 を作成し、両方のリソース構成を uc1 に設定したと仮定します。リソースプールのリソース構成を変更することで、リソース構成 uc1 の MAX_CPU を 6 に、MEMORY_SIZE を 36G に調整できます。その他のオプションは変更せずに済みます。例文は以下のとおりです:
obclient> CREATE RESOURCE UNIT uc1 MAX_CPU 5, MIN_CPU 4, MEMORY_SIZE '36G', MAX_IOPS 10000, MIN_IOPS 10000, LOG_DISK_SIZE = '108G';
obclient>CREATE RESOURCE POOL pool1 UNIT 'uc1', UNIT_NUM 2, ZONE_LIST ('z1', 'z2');
obclient>CREATE RESOURCE POOL pool2 UNIT 'uc1', UNIT_NUM 1, ZONE_LIST ('z3');
obclient>CREATE TENANT tt resource_pool_list=('pool1','pool2');
obclient>ALTER RESOURCE UNIT uc1 MAX_CPU 6, MEMORY_SIZE '36G';
リソース構成の各オプションを調整することで、対応するZone上のテナントのリソースプールのリソース仕様を調整し、結果としてテナントのサービス能力に影響を与えることができます。
リソース構成の切り替え
リソースプールのリソース構成を切り替えるとは、リソースプール内の各リソースユニットのリソース仕様を調整し、それによってそのリソースプール上のテナントのリソース仕様とサービス能力を調整することです。
リソースプール rp1 の以前のリソース構成が uc1 だった場合、リソース構成を切り替えて rp1 のリソース構成を uc1 から uc2 に変更する例文は以下のとおりです:
obclient> ALTER RESOURCE POOL rp1 UNIT 'uc2';
例と制限
通常、リソース構成の変更や切り替えによって、テナントのサービス能力を調整できます。テナントレベルでは、実際にはテナントのリソースユニットの仕様を調整しています。リソース仕様の変更には、一般的にリソース仕様の引き上げと引き下げの2つのシナリオがあります。
リソース仕様の引き上げ
リソース仕様の引き上げは主にテナントのリソース拡張シナリオで使用され、CPUとMemoryを個別に拡張することができます。
例:
例1
リソース構成
u_c0を作成し、リソースプールpool1を作成します。pool1はu_c0を自身のリソース構成として使用します。obclient> CREATE RESOURCE UNIT u_c0 MAX_CPU 5, MIN_CPU 4, MEMORY_SIZE '36G', MAX_IOPS 10000, MIN_IOPS 10000, LOG_DISK_SIZE = '108G'; obclient> CREATE RESOURCE POOL pool1 unit='u_c0', unit_num=3, zone_list=('z1','z2','z3');u_c0のMIN_CPU、MAX_CPU、MEMORY_SIZEを引き上げます。obclient> ALTER RESOURCE UNIT u_c0 MAX_CPU 10, MIN_CPU 8, MEMORY_SIZE '72G';この調整は、リソースプール
pool1のリソース仕様を引き上げ、対応するテナントのサービス能力を向上させることを目的としています。
例2
リソース構成
u_c0とu_c1の2つを作成し、リソースプールpool1を作成します。pool1はu_c0を自身のリソース構成として使用します。obclient> CREATE RESOURCE UNIT u_c0 MAX_CPU 5, MIN_CPU 4, MEMORY_SIZE '36G', MAX_IOPS 10000, MIN_IOPS 10000, LOG_DISK_SIZE = '108G'; obclient> CREATE RESOURCE UNIT u_c1 MAX_CPU 10, MIN_CPU 8, MEMORY_SIZE '72G', MAX_IOPS 10000, MIN_IOPS 10000, LOG_DISK_SIZE = '216G'; obclient> CREATE RESOURCE POOL pool1 unit='u_c0', unit_num=3, zone_list=('z1','z2','z3');pool1のリソース構成をu_c1に調整します。obclient> ALTER RESOURCE POOL pool1 unit='u_c1';この調整は、リソースプール
pool1のリソース仕様を引き上げ、対応するテナントのサービス能力を向上させることを目的としています。
リソース仕様を引き上げる際、リソース構成の変更または切り替えによらず、調整後の総リソース量は以下の要件を満たす必要があります:
Sum(min_cpu) <= CPU_CAPACITY;
Sum(memory_size) <= MEM_CAPACITY;
Sum(max_cpu) <= CPU_CAPACITY * resource_hard_limit;
そうでない場合、システムはエラーを返し、拡張失敗を示します。
リソース仕様の引き下げ
上記のリソース仕様を引き上げる例に基づき、システムはリソースプールのリソース仕様を引き下げることもサポートしています。リソース仕様を引き下げることで、マシンのリソース仕様が十分であることを保証できますが、制限も存在します。この制限は主にリソース仕様を引き下げる際の MEMORY_SIZE オプションに現れます。テナントのある物理マシン上の実際のメモリ使用量は MEM_USED として記録されています。リソース仕様を引き下げる際、テナントにサービスを提供する各物理マシンでは、リソース構成の MEMORY_SIZE がその物理マシン上のテナントの現在の実際の使用メモリ以上である必要があります。調整時に MEMORY_SIZE の値が MEM_USED より小さい場合、そのリソース仕様の調整は失敗し、データのダンプを行ってメモリを解放した後、再度リソースプールの構成仕様を引き下げる試みを行う必要があります。