OceanBase數據庫是多租戶的數據庫系統,一個集群內可包含多個相互獨立的租戶,每個租戶提供獨立的數據庫服務。在OceanBase數據庫中,使用資源配置(Unit Config)、資源單元(Unit)和資源池(Resource Pool)三個概念,對各租戶的可用資源進行管理。
視頻講解如下 |
---|
【趙渝強老師】OceanBase租戶的資源管理 |
一、 資源配置與資源單元
一個資源單元中可以包含多個資源配置。資源配置是用來描述每個單元中可用的CPU、內存、存儲空間和IOPS等的規格。這里需要注意,資源配置指定的是對應資源單元能夠提供的服務能力,而不是資源單元的實時負載。下面展示了創建資源單元的完整語法格式:
CREATE RESOURCE UNIT [IF NOT EXISTS] unit_name
MEMORY_SIZE [=] 'size_value',
MAX_CPU [=] cpu_num,
[MAX_IOPS [=] iops_num,]
[MIN_CPU [=] cpu_num,]
[MIN_IOPS [=] iops_num,]
[IOPS_WEIGHT [=]iopsweight,]
[LOG_DISK_SIZE [=] 'size_value'];
下面的語句將創建一個名叫ru1的資源單元,其中將包含若干個資源配置,如:可以的CPU、內存大小、存儲空間等。
ob> create resource unit ru1 max_cpu 1, min_cpu 1, memory_size '2G',log_disk_size '2G' ;# 提示:Meta租戶沒有獨立的Unit,租戶資源管理過程中不管理Meta租戶。
# 系統在創建租戶時默認為Meta租戶預留資源,各項資源從用戶租戶的資源中扣除。
# 目前Meta租戶的各項資源采用默認配置,不支持用戶指定。
通過DBA_OB_UNIT_CONFIGS視圖,可以查看所有資源配置和資源單元信息。
ob> select * from oceanbase.dba_ob_unit_configs \G;# 輸出的信息如下:
*************************** 1. row ***************************UNIT_CONFIG_ID: 1NAME: sys_unit_configCREATE_TIME: 2025-04-09 14:50:05.982963MODIFY_TIME: 2025-04-09 14:50:05.982963MAX_CPU: 1MIN_CPU: 1MEMORY_SIZE: 2147483648LOG_DISK_SIZE: 2147483648DATA_DISK_SIZE: NULLMAX_IOPS: 9223372036854775807MIN_IOPS: 9223372036854775807IOPS_WEIGHT: 1MAX_NET_BANDWIDTH: 9223372036854775807
NET_BANDWIDTH_WEIGHT: 1
*************************** 2. row ***************************UNIT_CONFIG_ID: 1001NAME: ru1CREATE_TIME: 2025-04-09 14:56:02.348728MODIFY_TIME: 2025-04-09 14:56:02.348728MAX_CPU: 1MIN_CPU: 1MEMORY_SIZE: 2147483648LOG_DISK_SIZE: 2147483648DATA_DISK_SIZE: NULLMAX_IOPS: 9223372036854775807MIN_IOPS: 9223372036854775807IOPS_WEIGHT: 1MAX_NET_BANDWIDTH: 9223372036854775807
NET_BANDWIDTH_WEIGHT: 1
2 rows in set (0.001 sec)
通過使用alter resource unit語句可以修改資源單元的資源配置,例如:
ob> alter resource unit ru1 memory_size '3G';
二、 資源池
資源池由若干個資源單元組成,通過給資源池指定資源配置,可指定資源池下各資源單元的物理資源。下面展示了創建資源池的完整語法格式:
CREATE RESOURCE POOL pool_name
UNIT [=] unit_name,
UNIT_NUM [=] unit_num,
ZONE_LIST [=] ('zone_name' [, 'zone_name' ...]);
在創建資源池之前首先確定集群中的可用區:
ob> use oceanbase;
ob> select zone,status,type from oceanbase.dba_ob_zones;# 輸出的信息如下:
+-------+--------+-----------+
| zone | status | type |
+-------+--------+-----------+
| zone1 | ACTIVE | ReadWrite |
| zone2 | ACTIVE | ReadWrite |
+-------+--------+-----------+
2 rows in set (0.044 sec)
創建資源池的示例語句如下:
ob> create resource pool rp1 unit 'ru1', unit_num 2, zone_list ('zone1', 'zone2');# 此時將出現下面的錯誤信息:
ERROR 4656 (HY000): resource pool unit num is bigger than zone server count# 提示:資源池里一個Zone下的Unit的數目大于這個Zone下Server的數量。
執行下面的語句確定每個Zone下的Server數量:
ob> use oceanbase;
ob> select svr_ip,id, zone from dba_ob_servers;# 輸出信息如下:
+---------------+------+-------+
| svr_ip | id | zone |
+---------------+------+-------+
| 192.168.79.11 | 1 | zone1 |
| 192.168.79.12 | 3 | zone1 |
| 192.168.79.13 | 2 | zone2 |
+---------------+------+-------+# 提示:此時zone2中只包含一個OBServer。
修改上面的資源池創建語句如下:
ob> create resource pool rp1 unit 'ru1', unit_num 1, zone_list ('zone1', 'zone2');
通過DBA_OB_RESOURCE_POOLS視圖,可以查看所有資源池信息。
ob> select * from dba_ob_resource_pools \G;# 輸出的信息如下:
*************************** 1. row ***************************
RESOURCE_POOL_ID: 1NAME: sys_poolTENANT_ID: 1CREATE_TIME: 2025-04-09 14:50:06.003151MODIFY_TIME: 2025-04-09 14:50:06.060751UNIT_COUNT: 1UNIT_CONFIG_ID: 1ZONE_LIST: zone1;zone2REPLICA_TYPE: FULL
*************************** 2. row ***************************
RESOURCE_POOL_ID: 1002NAME: rp1TENANT_ID: NULLCREATE_TIME: 2025-04-09 15:12:09.141263MODIFY_TIME: 2025-04-09 15:12:09.141263UNIT_COUNT: 1UNIT_CONFIG_ID: 1002ZONE_LIST: zone1;zone2REPLICA_TYPE: FULL
2 rows in set (0.001 sec)
切換資源池的資源配置可以調整資源池下每個資源單元的資源規格,進而調整租戶在該資源池上的資源規格和服務能力。例如:
ob> create resource unit ru2 max_cpu 1, min_cpu 1, memory_size '2G',log_disk_size '2G' ;
ob> alter resource pool rp1 unit 'ru2';# 提示:這里將資源池rp1的資源單元配從ru1切換到了ru2上。