OB聚合资源的物理表示
OB聚合资源的逻辑表示
OB资源的分配流程
资源管理相关操作:资源单元
创建/修改资源单元
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;
资源管理相关操作:资源池
创建源池
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;
查看资源池
SELECT * FROM __all_resource_pool;
资源管理相关操作:资源池操作示例
创建源池
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;
租户相关操作
新增租户
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]
租户相关操作
删除租户
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=‘%';
修改租户
ALTER TENANT obcp_t1 primary_zone='zone2';
查看租户
select * from __all_tenant;
删除租户
DROP TENANT obcp_t1 force;
资源分配情况
查看集群资源由各个节点的聚合情况
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;
创建租户时的资源分配
资源单元及租户的相关要点
资源单元是资源分配的最小单元,同一个Unit不能跨节点(OBServer)
每个租户在一台observer上只能有一个unit
Unit是数据的容器
一个租户可以拥有若干个资源池
一个资源池只能属于一个租户
资源单元是集群负载均衡的一个基本单位
创建租户分区表时的资源分配:租户有1个unit
每个分区有三个副本,默认leader副本提供 读写服务,follower副本不提供服务
每个分区的三副本内容是一样的
创建租户分区表时的资源分配:租户有多个Unit
资源池及租户初始化成功(tnt_pay)
create tablegroup tgorder partition by hash partitions 3;
每个分区有三个副本,默认leader副本提供读写服务
同一个分区不能跨Unit,同一个分区表不同分区可以跨Unit
同一个分区不能跨Unit,同一个分区表不同分区可以跨Unit
租户扩容
租户扩容方法一:升级规格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 'zone';
删除ZONE(无状态)
ALTER SYSTEM DELETE ZONE ‘zone';
上线ZONE(状态为Active)
ALTER SYSTEM START ZONE 'zonename';
下线ZONE(状态为Inative)
ALTER SYSTEM STOP ZONE ’zonename’;
Server管理及状态
添加Server(状态为Inactive,随后切为active[start_service_time>0])
ALTER SYSTEM ADD SERVER 'ip:port'[ZONE='zone_name'];
删除Server(状态为Deleting)
ALTER SYSTEM DELETE SERVER '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'];
集群扩容
集群初始状态:2-2-2
Unit:每个Zone4个Unit
集群扩容:2-2-2->3-3-3
目标端创建新Unit
分区复制,角色切换
下线多余分区及Unit
Unit是资源调度的最小单元
图中Unit移动是示意图,实际细节是 目标端先创建Unit,然后分区复制和 切换
参数控制 enable_rebalance 和 enable_auto_leader_switch
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;
异地多活会有很多内部请求跨机房