【OceanBase】17.资源单元/资源池/租户/ZONE的管理

1.资源单元,资源池,租户管理。

--1).资源单元
CREATE/ALTER RESOURCE UNIT unitname 
MAX_CPU [=] cpunum, 
MAX_MEMORY [=] memsize, 
MAX_IOPS [=] iopsnum, 
MAX_DISK_SIZE [=] disksize, 
MAX_SESSION_NUM [=] sessionnum, 
[MIN_CPU [=] cpunum,]
[MIN_MEMORY [=] memsize,] 
[MIN_IOPS [=] iopsnum] ;

--删除资源单元
DROP RESOURCE UNIT unitname;
--查看资源单元配置
SELECT * FROM __all_unit_config;

--资源单元操作示例
--创建资源单元
create resource unit ut_5c2g max_cpu=2, max_memory='1G', max_iops=10000,max_disk_size='10G', max_session_num=1000000;
--修改资源单元
alter resource unit ut_5c2g max_cpu=5, max_memory='2G';
--查看资源单元配置
SELECT * FROM __all_unit_config;
--删除资源单元
DROP RESOURCE UNIT ut_5c2g;


--2).资源管理相关操作:资源
创建源池
CREATE RESOURCE POOL poolname
UNIT [=] unitname, 
UNIT_NUM [=] unitnum, ##取值要小于等于对应 Zone 中的 OBServer 个数
ZONE_LIST [=] ('zone' [, 'zone' …]);

--修改资源池
ALTER RESOURCE POOL poolname 
UNIT [=] unitname, 
UNIT_NUM [=] unitnum, 
ZONE_LIST [=] ('zone' [, 'zone' …]);

--查看资源池
SELECT * FROM __all_resource_pool;
--删除资源池
DROP RESOURCE POOL poolname;
--3).资源管理相关操作:资源池操作示例
--创建源池
create resource pool pl_5c2g unit=ut_2c2g, unit_num=1;
--修改资源池
alter resource pool pl_5c2g unit=ut_5c2g;
--查看资源池
SELECT * FROM __all_resource_pool;
--删除资源池
DROP RESOURCE POOL poolname;

--4).新增租户
CREATE TENANT [IF NOT EXISTS] tenantname 
[tenant_characteristic_list] [opt_set_sys_var]

--tenant_characteristic_list: 
tenant_characteristic [, tenant_characteristic...]
tenant_characteristic: 
COMMENT 'string' 
|{CHARACTER SET | CHARSET} [=] charsetname 
|COLLATE [=] collationname
|ZONE_LIST [=] (zone [, zone…]) 
|PRIMARY_ZONE [=] zone 
|DEFAULT TABLEGROUP [=] {NULL | tablegroup}
|RESOURCE_POOL_LIST [=](poolname [, poolname…])
|LOGONLY_REPLICA_NUM [=] num
|LOCALITY [=] 'locality description'

--opt_set_sys_var:
{ SET | SET VARIABLES | VARIABLES } system_var_name = expr [,system_var_name = expr] ...

--修改租户
ALTER TENANT {tenant_name | ALL}
[SET] [tenant_option_list] [opt_global_sys_vars_set]


--tenant_option_list:
tenant_option [, tenant_option ...]
tenant_option:
COMMENT [=]'string' 
|{CHARACTER SET | CHARSET} [=] charsetname 
|COLLATE [=] collationname 
|ZONE_LIST [=] (zone [, zone…]) 
|PRIMARY_ZONE [=] zone 
|RESOURCE_POOL_LIST [=](poolname [, poolname…]) 
|DEFAULT TABLEGROUP [=] {NULL | tablegroupname}
|{READ ONLY / READ WRITE}
|LOGONLY_REPLICA_NUM [=] num
|LOCALITY [=] 'locality description'
|LOCK|UNLOCK; 

--opt_global_sys_vars_set:
VARIABLES system_var_name = expr [,system_var_name = expr] ...

--注:希望对租户进行扩容,可以修改资源单元的规格,不可直接替换租户的资源池,否则将出现错误

--5).租户相关操作
-- 删除租户
DROP TENANT tenant_name [FORCE/PURGE]
 延迟删除
--进入回收站
DROP TENANT tenant_name;
-- 不进入回收站
DROP TENANT tenant_name PURGE;
-- 立即删除
DROP TENANT tenant_name FORCE;
--查看租户
select * from __all_tenant

--租户相关操作示例
--新增租户
create tenant obcp_t1 
charset='utf8mb4', zone_list=('zone1,zone2,zone3'),
primary_zone='zone1,zone2,zone3',resource_pool_list=('pl_5c2g') 
set ob_tcp_invited_nodes='%';
--未设置primary zone,默认均匀分布

--修改租户
--修改租户的primary zone
ALTER TENANT obcp_t1 primary_zone='zone2'; 
--删除租户
DROP TENANT obcp_t1 force

--5).查看集群资源由各个节点的聚合情况
select zone,
concat(svr_ip, ':', svr_port) observer,
cpu_capacity,
cpu_total,
cpu_assigned,
cpu_assigned_percent,
mem_capacity,
mem_total,
mem_assigned,
mem_assigned_percent,
unit_Num,
round('load', 2) 'load',
round('cpu_weight', 2) 'cpu_weight',
round('memory_weight', 2) 'mem_weight',
leader_count
from __all_virtual_server_stat
order by zone, svr_ip;

--创建租户时的资源分配
--集群初始化成功(默认租户:sys)
create resource unit S2 max_cpu=20,max_mem=40G,…;
create resource unit S3 max_cpu=20,max_mem=100G,…;
create resource pool p_trade unit=S2,unit_num=1;
create tenant tnt_trade resource pool=p_trade …;
create resource pool p_pay unit=S3,unit_num=2;
create tenant tnt_pay resource pool=p_pay;

--资源单元及租户的相关要点
资源单元(Unit)是资源分配的最小单元,同一个Unit不能跨节点(OBServer)
每个租户在一台observer上只能有一个unit
Unit是数据的容器
一个租户可以拥有若干个资源池
一个资源池只能属于一个租户
资源单元是集群负载均衡的一个基本单位

--创建租户分区表时的资源分配:租户有1个unit
资源池及租户初始化成功(tnt_trade)
Unit4:20C 40G
Unit5:20C 40G
Unit6:20C 40G

create table t1(…);
create table t2(…) primary_zone='zone2';
create table t3(…) partition by hash (<column name>) partitions 3;

每个分区有三个副本,默认leader副本提供读写服务,follower副本不提供服务
每个分区的三副本内容是一样的.


--创建租户分区表时的资源分配:租户有多个Unit
资源池及租户初始化成功(tnt_pay)
create tablegroup tgorder partition by hash partitions 3;
create table t1(…);
create table t3(…) partition by hash(…) partitions 3 tablegroup=tgorder;
create table t4(…) partition by hash(…) partitions 3 tablegroup=tgorder;

unit7:20C 100G
unit8:20C 100G
unit9:20C 100G
每个分区有三个副本,默认leader副本提供读写服务.
同一个分区不能跨Unit,同一个分区表不同分区可以跨Unit.
同号分区组的分区会聚集在同一个Unit内部.

2.租户扩容

--租户扩容方法一:升级规格S2到S3
alter resource pool pool_mysql unit='S3';

--租户扩容方法二:增加Unit的数量
alter resource pool pool_mysql unit_num=2;

租户资源初始状态:unit_num=1
分区分布初始状态:t1, t3, t4
租户资源扩容:unit_num->2
分区复制,分区组聚合一起,Leader打散
切换分区服务
删除旧分区

分区是数据迁移的最小单元,同一个分区不能跨Unit,不同分区可以跨Unit
同号分区组的分区稳定在同一个Unit内部


--Zone管理及状态
--新增ZONE(状态为Inactive)
ALTER SYSTEM ADD ZONE 'zonename';
--删除ZOne(无状态)
ALTER SYSTEM DELETE ZONE 'zonename';
--上线ZONE(状态为Active)
ALTER SYSTEM START ZONE 'zonename';
--下线ZONE(状态为Inactive)
ALTER SYSTEM STOP ZONE 'zonename';
--ZONE的删除必须在停止之后,状态处于INACTIVE;

--Server管理及状态
--添加Server(状态为Inactive,随后切为active[start_service_time>0])
ALTER SYSTEM ADD SERVER 'ip:port' [,'ip:port'…][ZONE='zone_name'];
--删除Server(状态为Deleting)
ALTER SYSTEM DELETE SERVER 'ip:port' [,'ip:port'…][ZONE='zone_name'];
--取消删除Server(状态为Active[start_service_time>0 或 stop_time>0])
ALTER SYSTEM CANCEL DELETE SERVER 'ip:port' [,'ip:port'…] [ZONE='zone_name'];
--Start Server (状态为Active[start_service_time>0 且 Active[stop_time=0])
ALTER SYSTEM START SERVER 'ip:port' [,'ip:port'...][ZONE='zone'];
--Stop Server (状态为Active[stop_time>0])
ALTER SYSTEM STOP SERVER 'ip:port' [,'ip:port'...] [ZONE='zone'];

start_service_time=0 && stop_time=0(added)--刚添加进来.
start_service_time=> && stop_time=0(started) --启动并处于活跃状态:可以delete;
start_service_time=> && stop_time=>(stopped) --停止并处于活跃状态:可以delete; 
deleting状态可以取消删除。

3.集群扩容

集群初始状态:2-2-2
✓Unit:每个Zone 4个Unit
✓集群扩容:2-2-2 -> 3-3-3
✓目标端创建新Unit
✓分区复制
✓角色切换
✓下线多余分区及Unit

Unit 是资源调度的最小单元
◼ 图中Unit移动是示意图,实际细节是目标端先创建Unit,然后分区复制和切换
◼ 参数控制 enable_rebalance 和 enable_auto_leader_switch

4.OceanBase 的资源弹性伸缩与负载均衡相关参数

--负载均衡功能参数
⚫ enable_rebalance
是否开启自动负载均衡的功能

--控制负载均衡时Partition迁移的速度和影响
⚫ migrate_concurrency
用于控制内部数据迁移的并发度
⚫ data_copy_concurrency
用于设置系统中并发执行的数据迁移复制任务的最大并发数
⚫ server_data_copy_out_concurrency
用于设置单个节点迁出数据的最大并发数
⚫ server_data_copy_in_concurrency
用于设置单个节点迁入数据的最大并发数

--查看业务租户内部所有leader副本的位置
select t5.tenant_name,t4.database_name,t3.tablegroup_name,t1.table_id,
t1.table_name,t2.partition_id,t2.role,t2.zone,
concat(t2.svr_ip,':',t2.svr_port) observer,
round(t2.data_size / 1024 / 1024) data_size_mb,
t2. row_count
from __all_virtual_table t1
join gv$partition t2
on (t1.tenant_id = t2.tenant_id and t1.table_id = t2.table_id)
left join __all_tablegroup t3
on (t1.tenant_id = t3.tenant_id and t1.tablegroup_id = t3.tablegroup_id)
join __all_database t4
on (t1.tenant_Id = t4.tenant_id and t1.database_id = t4.database_id)
join __all_tenant t5
on (t1.tenant_id = t5.tenant_id)
where t5.tenant_id = 1020
and t2.role = 1
order by t5.tenant_name,t4.database_name,
t3.tablegroup_name,t2.partition_id;

5.ZONE的管理

--异地多活会有很多内部请求跨机房
通过Primary Zone设置优先级,适配不同业务
--配置1:(z1,z2,z3) 意义:ZONE_1 =ZONE_2 = ZONE_3
主副本(Leader)均匀分布到各机器
适合批处理场景,希望尽快跑完,不关注某一个sql的执行时间,期望让整体任务尽快完成

--配置2:(z1;z2;z3) 意义:ZONE_1 >ZONE_2 > ZONE_3
主副本(Leader)只在Zone1存在,Zone2和Zone3均是从副本
适合对时延敏感的在线处理业务,业务量不大,不超过一台机器的处理能力,可以尽量避免跨服务器访问,从而降低时延。

--配置3:(z1,z2;z3) 意义:(ZONE_1 = ZONE_2) > ZONE_3
主副本(Leader)均匀分布到Zone1和Zone2,Zone3均是从副本
适合城市容灾方案,将业务汇聚到距离较近的城市,距离较远的城市只承担从副本的角色(只读)

通过为不同的租户配置不同的Primary Zone,可以将业务流量集中到若干Zone中,减少跨服务器的操作。

--Primary Zone有租户、数据库和表不同的级别
优先级:表>数据库>租户

表:(z1 , z2 ; z3):主副本将集中到Zone1和Zone2内机器中
数据库:(z1 ; z2 ; z3):(如没有特殊指定)该数据库下的所有表的主副本将集中到Zone1内机器中(可能是多台)
租户:(z1 , z2 , z3):主副本均匀分布到3个Zone中,满足大部分表的应用场景

如无特殊指定,自动继承上级对象的primary_zone:database继承租户的primary_zone设置,
table继承database的primary_zone设置。

database和table可以指定各自的primary_zone,不必和上一级对象的设置保持一致;
提供更加灵活的负载均衡策略。

6.小结

1.OB 的资源分配流程是:定义资源规格 -> 创建资源池 -> 分配资源池给租户。
2.Partition自动负载均衡:同一个分区表的不同分区、租户内的所有分区、不同租户间的分区会自动调
整,使得分区分布在多个维度上都达到均衡。
3.管理员可以通过设置primary_zone,影响租户、数据库、表等对象主副本的分布策略。
4.对于关系密切的表,可以通过表组(tablegroup)干预它们的分区分布,使表组内所有的同号分区在
同一个 Unit 内部,避免跨节点请求对性能的影响。
5.Unit负载均衡:集群扩容后或缩容后,Unit自动在不同的observer之间调整,租户的数据自动在Unit
之间重新均衡;整个过程在线完成,极大简化运维难度。

  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值