暂无图片
暂无图片
5
暂无图片
暂无图片
暂无图片

OceanBase1.4 集群——租户的扩容

原创 gelyon 2020-08-09
2999

一步一步学习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)、租户扩容前:
p2.png

(2)、租户扩容后:
p3.png

到此OB1.4集群租户扩容已完成。

本次OceanBase 1.4集群租户扩容体验,到此结束。

一步一步学习OceanBase系列

下一篇准备进行oceanbase高可用体验————节点故障,数据是怎样自动恢复和转移。。

下次实操继续更新~~~~~


复制
最后修改时间:2020-08-11 09:46:12
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论