一步一步学习OceanBase系列回顾:
第一篇:OceanBase 1.4 集群手动安装步骤
第二篇:obproxy的安装、配置和使用
第三篇:OceanBase 1.4 集群——租户的创建和使用
第四篇:OceanBase1.4 集群扩容
本篇是第五篇 ob1.4集群下,实操体验租户的扩容。
oceanbase 1.4集群下,租户扩容
一般在生产环境下,如果业务觉得数据库响应慢且瓶颈是在资源,当整个oceanbase集群资源大池还有剩余资源时,则可以对租户的资源能力进行扩容。
当ob集群整个资源大池资源也不够的话,就需要先添加节点,进行集群扩容(如上一篇文章集群扩容介绍),然后再对租户资源进行扩容。
租户扩容有两种方式:一是提升资源单元规格,二是增加资源单元数量。
1、租户内查看自己的资源能力
$ mysql -h192.168.0.151 -uroot@my_test_tent#obdemo -P2883 -padmin123 -c -A oceanbase
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is 25
Server version: 5.6.25 OceanBase 1.4.60 (r1571952-758a58e85846f9efb907b1c14057204cb6353846) (Built Mar 9 2018 14:32:07)
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MySQL [oceanbase]> select tenant_id,tenant_name, unit_id, zone, svr_ip,svr_port,max_cpu,min_cpu,round(max_memory/1024/1024/1024) max_mem_gb,
-> round(min_memory/1024/1024/1024) min_mem_gb, round(max_disk_size/1024/1024/1024) max_disk_size_gb
-> from gv$unit;
+-----------+--------------+---------+-------+---------------+----------+---------+---------+------------+------------+------------------+
| tenant_id | tenant_name | unit_id | zone | svr_ip | svr_port | max_cpu | min_cpu | max_mem_gb | min_mem_gb | max_disk_size_gb |
+-----------+--------------+---------+-------+---------------+----------+---------+---------+------------+------------+------------------+
| 1001 | my_test_tent | 1001 | zone1 | 192.168.0.106 | 2882 | 2 | 1 | 3 | 2 | 10 |
| 1001 | my_test_tent | 1002 | zone2 | 192.168.0.89 | 2882 | 2 | 1 | 3 | 2 | 10 |
| 1001 | my_test_tent | 1003 | zone3 | 192.168.0.143 | 2882 | 2 | 1 | 3 | 2 | 10 |
+-----------+--------------+---------+-------+---------------+----------+---------+---------+------------+------------+------------------+
3 rows in set (0.02 sec)
MySQL [oceanbase]>
2、登录sys租户查看租户扩容前整个OB集群情况:
$ mysql -h192.168.0.151 -uroot@sys#obdemo -P2883 -padmin123 -c -A oceanbase
查看OB集群所有observer节点信息
MySQL [oceanbase]> select zone,svr_ip,svr_port,inner_port,with_rootserver,status,gmt_create from __all_server order by zone, svr_ip;
+-------+---------------+----------+------------+-----------------+--------+----------------------------+
| zone | svr_ip | svr_port | inner_port | with_rootserver | status | gmt_create |
+-------+---------------+----------+------------+-----------------+--------+----------------------------+
| zone1 | 192.168.0.106 | 2882 | 2881 | 0 | active | 2020-08-07 18:21:17.519966 |
| zone1 | 192.168.0.151 | 2882 | 2881 | 1 | active | 2020-08-07 11:30:28.623847 |
| zone2 | 192.168.0.43 | 2882 | 2881 | 0 | active | 2020-08-07 11:30:28.604907 |
| zone2 | 192.168.0.89 | 2882 | 2881 | 0 | active | 2020-08-07 18:21:23.741350 |
| zone3 | 192.168.0.143 | 2882 | 2881 | 0 | active | 2020-08-07 18:21:29.227633 |
| zone3 | 192.168.0.41 | 2882 | 2881 | 0 | active | 2020-08-07 11:30:28.613459 |
+-------+---------------+----------+------------+-----------------+--------+----------------------------+
6 rows in set (0.01 sec)
查看OB集群所有租户
MySQL [oceanbase]> select tenant_id, tenant_name, zone_list, locality ,gmt_modified from __all_tenant;
+-----------+--------------+-------------------+---------------------------------------------+----------------------------+
| tenant_id | tenant_name | zone_list | locality | gmt_modified |
+-----------+--------------+-------------------+---------------------------------------------+----------------------------+
| 1 | sys | zone1;zone2;zone3 | FULL{1}@zone1, FULL{1}@zone2, FULL{1}@zone3 | 2020-08-07 11:30:29.946393 |
| 1001 | my_test_tent | zone1;zone2;zone3 | FULL{1}@zone1, FULL{1}@zone2, FULL{1}@zone3 | 2020-08-07 14:00:48.039985 |
+-----------+--------------+-------------------+---------------------------------------------+----------------------------+
2 rows in set (0.01 sec)
查看OceanBase集群所有节点可用资源情况
MySQL [oceanbase]> select zone, svr_ip, svr_port,inner_port, cpu_total, cpu_assigned,
-> round(mem_total/1024/1024/1024) mem_total_gb,
-> round(mem_assigned/1024/1024/1024) mem_ass_gb,
-> round(disk_total/1024/1024/1024) disk_total_gb,
-> unit_num, substr(build_version,1,6) version
-> from __all_virtual_server_stat
-> order by zone, svr_ip, inner_port;
+-------+---------------+----------+------------+-----------+--------------+--------------+------------+---------------+----------+---------+
| zone | svr_ip | svr_port | inner_port | cpu_total | cpu_assigned | mem_total_gb | mem_ass_gb | disk_total_gb | unit_num | version |
+-------+---------------+----------+------------+-----------+--------------+--------------+------------+---------------+----------+---------+
| zone1 | 192.168.0.106 | 2882 | 2881 | 6 | 1 | 10 | 2 | 83 | 1 | 1.4.60 |
| zone1 | 192.168.0.151 | 2882 | 2881 | 6 | 2.5 | 10 | 2 | 83 | 1 | 1.4.60 |
| zone2 | 192.168.0.43 | 2882 | 2881 | 6 | 2.5 | 10 | 2 | 83 | 1 | 1.4.60 |
| zone2 | 192.168.0.89 | 2882 | 2881 | 6 | 1 | 10 | 2 | 83 | 1 | 1.4.60 |
| zone3 | 192.168.0.143 | 2882 | 2881 | 6 | 1 | 10 | 2 | 83 | 1 | 1.4.60 |
| zone3 | 192.168.0.41 | 2882 | 2881 | 6 | 2.5 | 10 | 2 | 83 | 1 | 1.4.60 |
+-------+---------------+----------+------------+-----------+--------------+--------------+------------+---------------+----------+---------+
6 rows in set (0.00 sec)
MySQL [oceanbase]> select a.zone,concat(a.svr_ip,':',a.svr_port) observer, cpu_total, (cpu_total-cpu_assigned) cpu_free,
-> round(mem_total/1024/1024/1024) mem_total_gb, round((mem_total-mem_assigned)/1024/1024/1024) mem_free_gb,
-> round(disk_total/1024/1024/1024) disk_total_gb,
-> substr(a.build_version,1,6) version,usec_to_time(b.start_service_time) start_service_time
-> from __all_virtual_server_stat a join __all_server b on (a.svr_ip=b.svr_ip and a.svr_port=b.svr_port)
-> order by a.zone, a.svr_ip;
+-------+--------------------+-----------+----------+--------------+-------------+---------------+---------+----------------------------+
| zone | observer | cpu_total | cpu_free | mem_total_gb | mem_free_gb | disk_total_gb | version | start_service_time |
+-------+--------------------+-----------+----------+--------------+-------------+---------------+---------+----------------------------+
| zone1 | 192.168.0.106:2882 | 6 | 5 | 10 | 8 | 83 | 1.4.60 | 2020-08-09 10:28:38.058235 |
| zone1 | 192.168.0.151:2882 | 6 | 3.5 | 10 | 7 | 83 | 1.4.60 | 2020-08-09 10:27:09.728171 |
| zone2 | 192.168.0.43:2882 | 6 | 3.5 | 10 | 7 | 83 | 1.4.60 | 2020-08-09 10:27:11.822337 |
| zone2 | 192.168.0.89:2882 | 6 | 5 | 10 | 8 | 83 | 1.4.60 | 2020-08-09 10:28:38.418461 |
| zone3 | 192.168.0.143:2882 | 6 | 5 | 10 | 8 | 83 | 1.4.60 | 2020-08-09 10:28:48.238842 |
| zone3 | 192.168.0.41:2882 | 6 | 3.5 | 10 | 7 | 83 | 1.4.60 | 2020-08-09 10:27:25.831402 |
+-------+--------------------+-----------+----------+--------------+-------------+---------------+---------+----------------------------+
6 rows in set (0.00 sec)
查看集群资源池具体使用情况
MySQL [oceanbase]> select t1.name resource_pool_name, t2.`name` unit_config_name, t2.max_cpu, t2.min_cpu,
-> round(t2.max_memory/1024/1024/1024) max_mem_gb, round(t2.min_memory/1024/1024/1024) min_mem_gb,
-> t3.unit_id, t3.zone, concat(t3.svr_ip,':',t3.`svr_port`) observer,t4.tenant_id, t4.tenant_name
-> from __all_resource_pool t1 join __all_unit_config t2 on (t1.unit_config_id=t2.unit_config_id)
-> join __all_unit t3 on (t1.`resource_pool_id` = t3.`resource_pool_id`)
-> left join __all_tenant t4 on (t1.tenant_id=t4.tenant_id)
-> order by t1.`resource_pool_id`, t2.`unit_config_id`, t3.unit_id
-> ;
+--------------------+------------------+---------+---------+------------+------------+---------+-------+--------------------+-----------+--------------+
| resource_pool_name | unit_config_name | max_cpu | min_cpu | max_mem_gb | min_mem_gb | unit_id | zone | observer | tenant_id | tenant_name |
+--------------------+------------------+---------+---------+------------+------------+---------+-------+--------------------+-----------+--------------+
| sys_pool | sys_unit_config | 5 | 2.5 | 3 | 2 | 1 | zone1 | 192.168.0.151:2882 | 1 | sys |
| sys_pool | sys_unit_config | 5 | 2.5 | 3 | 2 | 2 | zone2 | 192.168.0.43:2882 | 1 | sys |
| sys_pool | sys_unit_config | 5 | 2.5 | 3 | 2 | 3 | zone3 | 192.168.0.41:2882 | 1 | sys |
| my_pool_test | my_unit_1c2g | 2 | 1 | 3 | 2 | 1001 | zone1 | 192.168.0.106:2882 | 1001 | my_test_tent |
| my_pool_test | my_unit_1c2g | 2 | 1 | 3 | 2 | 1002 | zone2 | 192.168.0.89:2882 | 1001 | my_test_tent |
| my_pool_test | my_unit_1c2g | 2 | 1 | 3 | 2 | 1003 | zone3 | 192.168.0.143:2882 | 1001 | my_test_tent |
+--------------------+------------------+---------+---------+------------+------------+---------+-------+--------------------+-----------+--------------+
6 rows in set (0.00 sec)
查看OB集群资源单元unit配置情况
MySQL [oceanbase]> select unit_config_id,name,max_cpu,min_cpu,round(max_memory/1024/1024/1024) max_mem_gb,
-> round(min_memory/1024/1024/1024) min_mem_gb, round(max_disk_size/1024/1024/1024) max_disk_size_gb
-> from __all_unit_config
-> order by unit_config_id;
+----------------+-----------------+---------+---------+------------+------------+------------------+
| unit_config_id | name | max_cpu | min_cpu | max_mem_gb | min_mem_gb | max_disk_size_gb |
+----------------+-----------------+---------+---------+------------+------------+------------------+
| 1 | sys_unit_config | 5 | 2.5 | 3 | 2 | 83 |
| 1001 | my_unit_1c2g | 2 | 1 | 3 | 2 | 10 |
+----------------+-----------------+---------+---------+------------+------------+------------------+
2 rows in set (0.00 sec)
MySQL [oceanbase]>
租户扩容前,从以上可以看出:
业务租户 my_test_tent 资源占用1cpu2g内存,所在节点106、89、143,还可用5cpu+8g内存。
系统sys租户资源占用2.5cpu+3g内存,所在节点151、43、41,还可用3.5cpu+7g内存。
业务租户my_test_tent下testdb库下,所有的表分区主备副本节点分布情况:
MySQL [oceanbase]> SELECT t1.tenant_id,t1.tenant_name,t2.database_name,t3.table_id,t3.table_Name,t3.tablegroup_id,t3.part_num,t4.partition_Id,
-> t4.zone,t4.svr_ip,t4.role, round(t4.data_size/1024/1024) data_size_mb
-> from `gv$tenant` t1
-> join `gv$database` t2 on (t1.tenant_id = t2.tenant_id)
-> join gv$table t3 on (t2.tenant_id = t3.tenant_id and t2.database_id = t3.database_id and t3.index_type = 0)
-> left join `gv$partition` t4 on (t2.tenant_id = t4.tenant_id and ( t3.table_id = t4.table_id or t3.tablegroup_id = t4.table_id ) and t4.role in (1,2))
-> where t1.tenant_id = 1001
-> order by t3.tablegroup_id, t3.table_name,t4.partition_Id ;
+-----------+--------------+---------------+------------------+------------+---------------+----------+--------------+-------+---------------+------+--------------+
| tenant_id | tenant_name | database_name | table_id | table_Name | tablegroup_id | part_num | partition_Id | zone | svr_ip | role | data_size_mb |
+-----------+--------------+---------------+------------------+------------+---------------+----------+--------------+-------+---------------+------+--------------+
| 1001 | my_test_tent | testdb | 1100611139453777 | test | -1 | 1 | 0 | zone2 | 192.168.0.89 | 2 | 0 |
| 1001 | my_test_tent | testdb | 1100611139453777 | test | -1 | 1 | 0 | zone3 | 192.168.0.143 | 2 | 0 |
| 1001 | my_test_tent | testdb | 1100611139453777 | test | -1 | 1 | 0 | zone1 | 192.168.0.106 | 1 | 0 |
| 1001 | my_test_tent | testdb | 1100611139453778 | test_hash | -1 | 3 | 0 | zone2 | 192.168.0.89 | 2 | 0 |
| 1001 | my_test_tent | testdb | 1100611139453778 | test_hash | -1 | 3 | 0 | zone3 | 192.168.0.143 | 2 | 0 |
| 1001 | my_test_tent | testdb | 1100611139453778 | test_hash | -1 | 3 | 0 | zone1 | 192.168.0.106 | 1 | 0 |
| 1001 | my_test_tent | testdb | 1100611139453778 | test_hash | -1 | 3 | 1 | zone2 | 192.168.0.89 | 2 | 0 |
| 1001 | my_test_tent | testdb | 1100611139453778 | test_hash | -1 | 3 | 1 | zone3 | 192.168.0.143 | 2 | 0 |
| 1001 | my_test_tent | testdb | 1100611139453778 | test_hash | -1 | 3 | 1 | zone1 | 192.168.0.106 | 1 | 0 |
| 1001 | my_test_tent | testdb | 1100611139453778 | test_hash | -1 | 3 | 2 | zone3 | 192.168.0.143 | 2 | 0 |
| 1001 | my_test_tent | testdb | 1100611139453778 | test_hash | -1 | 3 | 2 | zone1 | 192.168.0.106 | 1 | 0 |
| 1001 | my_test_tent | testdb | 1100611139453778 | test_hash | -1 | 3 | 2 | zone2 | 192.168.0.89 | 2 | 0 |
+-----------+--------------+---------------+------------------+------------+---------------+----------+--------------+-------+---------------+------+--------------+
12 rows in set (0.05 sec)
MySQL [oceanbase]>
my_test_tent下testdb库,非分区表test的p0号分区,主副本在zone1下的106节点,两个备副本在节点89、143。
test_hash分区表的p0-p2三个分区的主副本也都在zone1下的106节点,两个备副本在节点89、143。
3、开始租户扩容
租户扩容有两个思路,一是提升资源单元规格,二是增加资源单元数量。
mysql -h192.168.0.151 -uobdemo:sys:root -P2883 -padmin123 -c -A oceanbase
方式一:增大unit规格
create resource unit my_unit_2c3g20g max_cpu=3, min_cpu=2, max_memory='5g', min_memory='3g', max_iops=10000, min_iops=1000, max_session_num=1000000, max_disk_size='20g';
alter resource pool my_pool_test unit = 'my_unit_2c3g20g';
也可以直接修改:
alter resource unit my_unit_1c2g max_cpu=3, min_cpu=2, max_memory='5g', min_memory='3g',max_disk_size='20g';
方式二:增加unit_num个数
alter resource pool my_pool_test unit_num = 2;
缩容同理
减少unit_num个数或降低unit规格
alter resource pool my_pool_test unit_num = 1;
租户扩容示例:
这里体验直接修改unit大小和个数,来实现租户的扩容。
alter resource unit my_unit_1c2g max_cpu=3, min_cpu=2, max_memory='5g', min_memory='3g',max_disk_size='20g';
alter resource pool my_pool_test unit_num = 2;
以下是实操步骤,最终比对租户扩容后,数据分区分布情况:
$ mysql -h192.168.0.151 -uroot@sys#obdemo -P2883 -padmin123 -c -A oceanbase
MySQL [oceanbase]> select unit_config_id,name,max_cpu,min_cpu,round(max_memory/1024/1024/1024) max_mem_gb, round(min_memory/1024/1024/1024) min_mem_gb, round(max_disk_size/1024/1024/1024) max_disk_size_gb
-> from __all_unit_config
-> order by unit_config_id;
+----------------+-----------------+---------+---------+------------+------------+------------------+
| unit_config_id | name | max_cpu | min_cpu | max_mem_gb | min_mem_gb | max_disk_size_gb |
+----------------+-----------------+---------+---------+------------+------------+------------------+
| 1 | sys_unit_config | 5 | 2.5 | 3 | 2 | 83 |
| 1001 | my_unit_config | 2 | 1 | 3 | 2 | 10 |
+----------------+-----------------+---------+---------+------------+------------+------------------+
2 rows in set (0.00 sec)
MySQL [oceanbase]>
--修改unit大小
MySQL [oceanbase]> alter resource unit my_unit_1c2g max_cpu=3, min_cpu=2, max_memory='5g', min_memory='3g',max_disk_size='20g';
Query OK, 0 rows affected (0.00 sec)
MySQL [oceanbase]> select unit_config_id,name,max_cpu,min_cpu,round(max_memory/1024/1024/1024) max_mem_gb, round(min_memory/1024/1024/1024) min_mem_gb, round(max_disk_size/1024/1024/1024) max_disk_size_gb
-> from __all_unit_config
-> order by unit_config_id;
+----------------+-----------------+---------+---------+------------+------------+------------------+
| unit_config_id | name | max_cpu | min_cpu | max_mem_gb | min_mem_gb | max_disk_size_gb |
+----------------+-----------------+---------+---------+------------+------------+------------------+
| 1 | sys_unit_config | 5 | 2.5 | 3 | 2 | 83 |
| 1001 | my_unit_config | 3 | 2 | 5 | 3 | 20 |
+----------------+-----------------+---------+---------+------------+------------+------------------+
2 rows in set (0.00 sec)
MySQL [oceanbase]>
--修改unit大小后,查看资源可用情况:
MySQL [oceanbase]> select a.zone,concat(a.svr_ip,':',a.svr_port) observer, cpu_total, (cpu_total-cpu_assigned) cpu_free,
-> round(mem_total/1024/1024/1024) mem_total_gb, round((mem_total-mem_assigned)/1024/1024/1024) mem_free_gb,
-> round(disk_total/1024/1024/1024) disk_total_gb,
-> substr(a.build_version,1,6) version,usec_to_time(b.start_service_time) start_service_time
-> from __all_virtual_server_stat a join __all_server b on (a.svr_ip=b.svr_ip and a.svr_port=b.svr_port)
-> order by a.zone, a.svr_ip;
+-------+--------------------+-----------+----------+--------------+-------------+---------------+---------+----------------------------+
| zone | observer | cpu_total | cpu_free | mem_total_gb | mem_free_gb | disk_total_gb | version | start_service_time |
+-------+--------------------+-----------+----------+--------------+-------------+---------------+---------+----------------------------+
| zone1 | 192.168.0.106:2882 | 6 | 4 | 10 | 7 | 83 | 1.4.60 | 2020-08-09 10:28:38.058235 |
| zone1 | 192.168.0.151:2882 | 6 | 3.5 | 10 | 7 | 83 | 1.4.60 | 2020-08-09 10:27:09.728171 |
| zone2 | 192.168.0.43:2882 | 6 | 3.5 | 10 | 7 | 83 | 1.4.60 | 2020-08-09 10:27:11.822337 |
| zone2 | 192.168.0.89:2882 | 6 | 4 | 10 | 7 | 83 | 1.4.60 | 2020-08-09 10:28:38.418461 |
| zone3 | 192.168.0.143:2882 | 6 | 4 | 10 | 7 | 83 | 1.4.60 | 2020-08-09 10:28:48.238842 |
| zone3 | 192.168.0.41:2882 | 6 | 3.5 | 10 | 7 | 83 | 1.4.60 | 2020-08-09 10:27:25.831402 |
+-------+--------------------+-----------+----------+--------------+-------------+---------------+---------+----------------------------+
6 rows in set (0.00 sec)
MySQL [oceanbase]>
MySQL [oceanbase]> select t1.name resource_pool_name, t2.`name` unit_config_name, t2.max_cpu, t2.min_cpu,
-> round(t2.max_memory/1024/1024/1024) max_mem_gb, round(t2.min_memory/1024/1024/1024) min_mem_gb,
-> t3.unit_id, t3.zone, concat(t3.svr_ip,':',t3.`svr_port`) observer,t4.tenant_id, t4.tenant_name
-> from __all_resource_pool t1 join __all_unit_config t2 on (t1.unit_config_id=t2.unit_config_id)
-> join __all_unit t3 on (t1.`resource_pool_id` = t3.`resource_pool_id`)
-> left join __all_tenant t4 on (t1.tenant_id=t4.tenant_id)
-> order by t1.`resource_pool_id`, t2.`unit_config_id`, t3.unit_id
-> ;
+--------------------+------------------+---------+---------+------------+------------+---------+-------+--------------------+-----------+--------------+
| resource_pool_name | unit_config_name | max_cpu | min_cpu | max_mem_gb | min_mem_gb | unit_id | zone | observer | tenant_id | tenant_name |
+--------------------+------------------+---------+---------+------------+------------+---------+-------+--------------------+-----------+--------------+
| sys_pool | sys_unit_config | 5 | 2.5 | 3 | 2 | 1 | zone1 | 192.168.0.151:2882 | 1 | sys |
| sys_pool | sys_unit_config | 5 | 2.5 | 3 | 2 | 2 | zone2 | 192.168.0.43:2882 | 1 | sys |
| sys_pool | sys_unit_config | 5 | 2.5 | 3 | 2 | 3 | zone3 | 192.168.0.41:2882 | 1 | sys |
| my_pool_test | my_unit_1c2g | 3 | 2 | 5 | 3 | 1001 | zone1 | 192.168.0.106:2882 | 1001 | my_test_tent |
| my_pool_test | my_unit_1c2g | 3 | 2 | 5 | 3 | 1002 | zone2 | 192.168.0.89:2882 | 1001 | my_test_tent |
| my_pool_test | my_unit_1c2g | 3 | 2 | 5 | 3 | 1003 | zone3 | 192.168.0.143:2882 | 1001 | my_test_tent |
+--------------------+------------------+---------+---------+------------+------------+---------+-------+--------------------+-----------+--------------+
6 rows in set (0.00 sec)
MySQL [oceanbase]>
从以上可以看出,增大unit大小后,即每个unit资源单元大小调整为2cpu+3g内存。
业务租户 my_test_tent 资源占用2-3个cpu,3-5g内存,所在节点106、89、143,还可用4cpu+7g内存。
系统sys租户所在节点151、43、41,还可用3.5cpu+7g内存。
--再调整unit个数
MySQL [oceanbase]> alter resource pool my_pool_test unit_num = 2;
Query OK, 0 rows affected (0.02 sec)
MySQL [oceanbase]> select unit_config_id,name,max_cpu,min_cpu,round(max_memory/1024/1024/1024) max_mem_gb, round(min_memory/1024/1024/1024) min_mem_gb, round(max_disk_size/1024/1024/1024) max_disk_size_gb
-> from __all_unit_config
-> order by unit_config_id;
+----------------+-----------------+---------+---------+------------+------------+------------------+
| unit_config_id | name | max_cpu | min_cpu | max_mem_gb | min_mem_gb | max_disk_size_gb |
+----------------+-----------------+---------+---------+------------+------------+------------------+
| 1 | sys_unit_config | 5 | 2.5 | 3 | 2 | 83 |
| 1001 | my_unit_config | 3 | 2 | 5 | 3 | 20 |
+----------------+-----------------+---------+---------+------------+------------+------------------+
2 rows in set (0.00 sec)
查看资源可用情况:
MySQL [oceanbase]> select zone, svr_ip, svr_port,inner_port, cpu_total, cpu_assigned,
-> round(mem_total/1024/1024/1024) mem_total_gb,
-> round(mem_assigned/1024/1024/1024) mem_ass_gb,
-> round(disk_total/1024/1024/1024) disk_total_gb,
-> unit_num, substr(build_version,1,6) version
-> from __all_virtual_server_stat
-> order by zone, svr_ip, inner_port;
+-------+---------------+----------+------------+-----------+--------------+--------------+------------+---------------+----------+---------+
| zone | svr_ip | svr_port | inner_port | cpu_total | cpu_assigned | mem_total_gb | mem_ass_gb | disk_total_gb | unit_num | version |
+-------+---------------+----------+------------+-----------+--------------+--------------+------------+---------------+----------+---------+
| zone1 | 192.168.0.106 | 2882 | 2881 | 6 | 2 | 10 | 3 | 83 | 1 | 1.4.60 |
| zone1 | 192.168.0.151 | 2882 | 2881 | 6 | 4.5 | 10 | 5 | 83 | 2 | 1.4.60 |
| zone2 | 192.168.0.43 | 2882 | 2881 | 6 | 4.5 | 10 | 5 | 83 | 2 | 1.4.60 |
| zone2 | 192.168.0.89 | 2882 | 2881 | 6 | 2 | 10 | 3 | 83 | 1 | 1.4.60 |
| zone3 | 192.168.0.143 | 2882 | 2881 | 6 | 2 | 10 | 3 | 83 | 1 | 1.4.60 |
| zone3 | 192.168.0.41 | 2882 | 2881 | 6 | 4.5 | 10 | 5 | 83 | 2 | 1.4.60 |
+-------+---------------+----------+------------+-----------+--------------+--------------+------------+---------------+----------+---------+
6 rows in set (0.00 sec)
MySQL [oceanbase]>
MySQL [oceanbase]> select a.zone,concat(a.svr_ip,':',a.svr_port) observer, cpu_total, (cpu_total-cpu_assigned) cpu_free,
-> round(mem_total/1024/1024/1024) mem_total_gb, round((mem_total-mem_assigned)/1024/1024/1024) mem_free_gb,
-> round(disk_total/1024/1024/1024) disk_total_gb,
-> substr(a.build_version,1,6) version,usec_to_time(b.start_service_time) start_service_time
-> from __all_virtual_server_stat a join __all_server b on (a.svr_ip=b.svr_ip and a.svr_port=b.svr_port)
-> order by a.zone, a.svr_ip;
+-------+--------------------+-----------+----------+--------------+-------------+---------------+---------+----------------------------+
| zone | observer | cpu_total | cpu_free | mem_total_gb | mem_free_gb | disk_total_gb | version | start_service_time |
+-------+--------------------+-----------+----------+--------------+-------------+---------------+---------+----------------------------+
| zone1 | 192.168.0.106:2882 | 6 | 4 | 10 | 7 | 83 | 1.4.60 | 2020-08-09 10:28:38.058235 |
| zone1 | 192.168.0.151:2882 | 6 | 1.5 | 10 | 4 | 83 | 1.4.60 | 2020-08-09 10:27:09.728171 |
| zone2 | 192.168.0.43:2882 | 6 | 1.5 | 10 | 4 | 83 | 1.4.60 | 2020-08-09 10:27:11.822337 |
| zone2 | 192.168.0.89:2882 | 6 | 4 | 10 | 7 | 83 | 1.4.60 | 2020-08-09 10:28:38.418461 |
| zone3 | 192.168.0.143:2882 | 6 | 4 | 10 | 7 | 83 | 1.4.60 | 2020-08-09 10:28:48.238842 |
| zone3 | 192.168.0.41:2882 | 6 | 1.5 | 10 | 4 | 83 | 1.4.60 | 2020-08-09 10:27:25.831402 |
+-------+--------------------+-----------+----------+--------------+-------------+---------------+---------+----------------------------+
6 rows in set (0.00 sec)
MySQL [oceanbase]> select t1.name resource_pool_name, t2.`name` unit_config_name, t2.max_cpu, t2.min_cpu,
-> round(t2.max_memory/1024/1024/1024) max_mem_gb, round(t2.min_memory/1024/1024/1024) min_mem_gb,
-> t3.unit_id, t3.zone, concat(t3.svr_ip,':',t3.`svr_port`) observer,t4.tenant_id, t4.tenant_name
-> from __all_resource_pool t1 join __all_unit_config t2 on (t1.unit_config_id=t2.unit_config_id)
-> join __all_unit t3 on (t1.`resource_pool_id` = t3.`resource_pool_id`)
-> left join __all_tenant t4 on (t1.tenant_id=t4.tenant_id)
-> order by t1.`resource_pool_id`, t2.`unit_config_id`, t3.unit_id
-> ;
+--------------------+------------------+---------+---------+------------+------------+---------+-------+--------------------+-----------+--------------+
| resource_pool_name | unit_config_name | max_cpu | min_cpu | max_mem_gb | min_mem_gb | unit_id | zone | observer | tenant_id | tenant_name |
+--------------------+------------------+---------+---------+------------+------------+---------+-------+--------------------+-----------+--------------+
| sys_pool | sys_unit_config | 5 | 2.5 | 3 | 2 | 1 | zone1 | 192.168.0.151:2882 | 1 | sys |
| sys_pool | sys_unit_config | 5 | 2.5 | 3 | 2 | 2 | zone2 | 192.168.0.43:2882 | 1 | sys |
| sys_pool | sys_unit_config | 5 | 2.5 | 3 | 2 | 3 | zone3 | 192.168.0.41:2882 | 1 | sys |
| my_pool_test | my_unit_1c2g | 3 | 2 | 5 | 3 | 1001 | zone1 | 192.168.0.106:2882 | 1001 | my_test_tent |
| my_pool_test | my_unit_1c2g | 3 | 2 | 5 | 3 | 1002 | zone2 | 192.168.0.89:2882 | 1001 | my_test_tent |
| my_pool_test | my_unit_1c2g | 3 | 2 | 5 | 3 | 1003 | zone3 | 192.168.0.143:2882 | 1001 | my_test_tent |
| my_pool_test | my_unit_1c2g | 3 | 2 | 5 | 3 | 1004 | zone1 | 192.168.0.151:2882 | 1001 | my_test_tent |
| my_pool_test | my_unit_1c2g | 3 | 2 | 5 | 3 | 1005 | zone2 | 192.168.0.43:2882 | 1001 | my_test_tent |
| my_pool_test | my_unit_1c2g | 3 | 2 | 5 | 3 | 1006 | zone3 | 192.168.0.41:2882 | 1001 | my_test_tent |
+--------------------+------------------+---------+---------+------------+------------+---------+-------+--------------------+-----------+--------------+
9 rows in set (0.01 sec)
MySQL [oceanbase]>
从以上结果可以看出,由于每个unit资源单元大小为2cpu+3g内存,每个zone下的observer节点都可以再分配一个此大小的unit单元资源。
当unit_num修改为2个后,整个OB集群下observer资源再次发生了改变。
业务租户 my_test_tent 资源占用2-3个cpu,3-5g内存,从之前只在节点106、89、143上,变为所有6个节点都有分布了。
再次体现了OceanBase集群负载均衡的特点。
最终租户扩容后,
节点106、89、143,还可用4cpu+7g内存,此三个节点上只分布有业务租户my_test_tent。
节点151、43、41,还可用1.5cpu+4g内存,此三个节点上分布有系统sys租户和业务租户my_test_tent。
4、最后,再来看业务租户my_test_tent下的testdb库所有分区主备副本的变化情况:
租户扩容前,业务租户my_test_tent下testdb库下,所有的表分区主备副本节点分布情况:
MySQL [oceanbase]> SELECT t1.tenant_id,t1.tenant_name,t2.database_name,t3.table_id,t3.table_Name,t3.tablegroup_id,t3.part_num,t4.partition_Id,
-> t4.zone,t4.svr_ip,t4.role, round(t4.data_size/1024/1024) data_size_mb
-> from `gv$tenant` t1
-> join `gv$database` t2 on (t1.tenant_id = t2.tenant_id)
-> join gv$table t3 on (t2.tenant_id = t3.tenant_id and t2.database_id = t3.database_id and t3.index_type = 0)
-> left join `gv$partition` t4 on (t2.tenant_id = t4.tenant_id and ( t3.table_id = t4.table_id or t3.tablegroup_id = t4.table_id ) and t4.role in (1,2))
-> where t1.tenant_id = 1001
-> order by t3.tablegroup_id, t3.table_name,t4.partition_Id ;
+-----------+--------------+---------------+------------------+------------+---------------+----------+--------------+-------+---------------+------+--------------+
| tenant_id | tenant_name | database_name | table_id | table_Name | tablegroup_id | part_num | partition_Id | zone | svr_ip | role | data_size_mb |
+-----------+--------------+---------------+------------------+------------+---------------+----------+--------------+-------+---------------+------+--------------+
| 1001 | my_test_tent | testdb | 1100611139453777 | test | -1 | 1 | 0 | zone2 | 192.168.0.89 | 2 | 0 |
| 1001 | my_test_tent | testdb | 1100611139453777 | test | -1 | 1 | 0 | zone3 | 192.168.0.143 | 2 | 0 |
| 1001 | my_test_tent | testdb | 1100611139453777 | test | -1 | 1 | 0 | zone1 | 192.168.0.106 | 1 | 0 |
| 1001 | my_test_tent | testdb | 1100611139453778 | test_hash | -1 | 3 | 0 | zone2 | 192.168.0.89 | 2 | 0 |
| 1001 | my_test_tent | testdb | 1100611139453778 | test_hash | -1 | 3 | 0 | zone3 | 192.168.0.143 | 2 | 0 |
| 1001 | my_test_tent | testdb | 1100611139453778 | test_hash | -1 | 3 | 0 | zone1 | 192.168.0.106 | 1 | 0 |
| 1001 | my_test_tent | testdb | 1100611139453778 | test_hash | -1 | 3 | 1 | zone2 | 192.168.0.89 | 2 | 0 |
| 1001 | my_test_tent | testdb | 1100611139453778 | test_hash | -1 | 3 | 1 | zone3 | 192.168.0.143 | 2 | 0 |
| 1001 | my_test_tent | testdb | 1100611139453778 | test_hash | -1 | 3 | 1 | zone1 | 192.168.0.106 | 1 | 0 |
| 1001 | my_test_tent | testdb | 1100611139453778 | test_hash | -1 | 3 | 2 | zone3 | 192.168.0.143 | 2 | 0 |
| 1001 | my_test_tent | testdb | 1100611139453778 | test_hash | -1 | 3 | 2 | zone1 | 192.168.0.106 | 1 | 0 |
| 1001 | my_test_tent | testdb | 1100611139453778 | test_hash | -1 | 3 | 2 | zone2 | 192.168.0.89 | 2 | 0 |
+-----------+--------------+---------------+------------------+------------+---------------+----------+--------------+-------+---------------+------+--------------+
12 rows in set (0.05 sec)
MySQL [oceanbase]>
租户扩容前,my_test_tent下testdb库,非分区表test的p0号分区,主副本在zone1下的106节点,两个备副本都在节点89、143。
test_hash分区表的p0-p2三个分区的主副本也都在zone1下的106节点,两个备副本都在节点89、143。
租户扩容后:
MySQL [oceanbase]> SELECT t1.tenant_id,t1.tenant_name,t2.database_name,t3.table_id,t3.table_Name,t3.tablegroup_id,t3.part_num,t4.partition_Id,
-> t4.zone,t4.svr_ip,t4.role, round(t4.data_size/1024/1024) data_size_mb
-> from `gv$tenant` t1
-> join `gv$database` t2 on (t1.tenant_id = t2.tenant_id)
-> join gv$table t3 on (t2.tenant_id = t3.tenant_id and t2.database_id = t3.database_id and t3.index_type = 0)
-> left join `gv$partition` t4 on (t2.tenant_id = t4.tenant_id and ( t3.table_id = t4.table_id or t3.tablegroup_id = t4.table_id ) and t4.role in (1,2))
-> where t1.tenant_id = 1001
-> order by t3.tablegroup_id, t3.table_name,t4.partition_Id ;
+-----------+--------------+---------------+------------------+------------+---------------+----------+--------------+-------+---------------+------+--------------+
| tenant_id | tenant_name | database_name | table_id | table_Name | tablegroup_id | part_num | partition_Id | zone | svr_ip | role | data_size_mb |
+-----------+--------------+---------------+------------------+------------+---------------+----------+--------------+-------+---------------+------+--------------+
| 1001 | my_test_tent | testdb | 1100611139453777 | test | -1 | 1 | 0 | zone2 | 192.168.0.89 | 2 | 0 |
| 1001 | my_test_tent | testdb | 1100611139453777 | test | -1 | 1 | 0 | zone3 | 192.168.0.143 | 1 | 0 |
| 1001 | my_test_tent | testdb | 1100611139453777 | test | -1 | 1 | 0 | zone1 | 192.168.0.106 | 2 | 0 |
| 1001 | my_test_tent | testdb | 1100611139453778 | test_hash | -1 | 3 | 0 | zone2 | 192.168.0.89 | 2 | 0 |
| 1001 | my_test_tent | testdb | 1100611139453778 | test_hash | -1 | 3 | 0 | zone1 | 192.168.0.151 | 1 | 0 |
| 1001 | my_test_tent | testdb | 1100611139453778 | test_hash | -1 | 3 | 0 | zone3 | 192.168.0.143 | 2 | 0 |
| 1001 | my_test_tent | testdb | 1100611139453778 | test_hash | -1 | 3 | 1 | zone2 | 192.168.0.43 | 2 | 0 |
| 1001 | my_test_tent | testdb | 1100611139453778 | test_hash | -1 | 3 | 1 | zone3 | 192.168.0.143 | 1 | 0 |
| 1001 | my_test_tent | testdb | 1100611139453778 | test_hash | -1 | 3 | 1 | zone1 | 192.168.0.106 | 2 | 0 |
| 1001 | my_test_tent | testdb | 1100611139453778 | test_hash | -1 | 3 | 2 | zone3 | 192.168.0.41 | 1 | 0 |
| 1001 | my_test_tent | testdb | 1100611139453778 | test_hash | -1 | 3 | 2 | zone1 | 192.168.0.106 | 2 | 0 |
| 1001 | my_test_tent | testdb | 1100611139453778 | test_hash | -1 | 3 | 2 | zone2 | 192.168.0.89 | 2 | 0 |
+-----------+--------------+---------------+------------------+------------+---------------+----------+--------------+-------+---------------+------+--------------+
12 rows in set (0.06 sec)
MySQL [oceanbase]>
租户扩容后,my_test_tent下testdb库,非分区表test的p0号分区,主备副本进行了切换,新的主副本从zone1下的106节点切换到了zone3下的143节点,两个备副本在zone1的106节点和zone2的89节点。
test_hash分区表的p0-p2三个分区的主备副本也都重新进行了分布:
test_hash分区表的p0分区主副本在zone1下的151节点,两个备副本在zone2的89节点和zone3的143节点。
test_hash分区表的p1分区主副本在zone3下的143节点,两个备副本在zone1的106节点和zone2的43节点。
test_hash分区表的p2分区主副本在zone3下的41节点。两个备副本在zone1的106节点和zone2的89节点。
6、最后以图形式,来展现租户扩容前后资源的分布和表数据分区的分布情况
(1)、租户扩容前:

(2)、租户扩容后:

到此OB1.4集群租户扩容已完成。
本次OceanBase 1.4集群租户扩容体验,到此结束。
一步一步学习OceanBase系列
下一篇准备进行oceanbase高可用体验————节点故障,数据是怎样自动恢复和转移。。
下次实操继续更新~~~~~
最后修改时间:2020-08-11 09:46:12
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




