OBCP第一章 OB 分布式架构高级技术笔记

一、资源分配与管理

1.1 资源单元(Resource Unit)

  • 定义:资源分配的最小单元,不可跨节点(OBServer)。
- **创建/修改/删除**:
  - `CREATE/ALTER RESOURCE UNIT unitname .... ;`
  - `DROP RESOURCE UNIT unitname;`
- **查看配置**:
  - `SELECT * FROM __all_unit_config;`

1.2 资源池(Resource Pool)

  • 定义:由多个资源单元组成,用于分配给租户。
- **创建/修改/删除**:
  - `CREATE/ALTER RESOURCE POOL poolname ...`
  - `DROP RESOURCE POOL poolname;`
- **查看配置**:
  - `SELECT * FROM __all_resource_pool;`

二、租户管理

2.1 新增租户

  • 命令
- `CREATE TENANT [IF NOT EXISTS] tenantname ...`
  • 参数
    • COMMENT 指定注释。
    • CHARACTER SET 指定租户的字符集。
    • COLLATE 指定字符序。
    • ZONE_LIST
    • PRIMARY_ZONE
    • RESOURCE_POOL_LIST
    • LOGONLY_REPLICA_NUM 指定日志副本数。
    • LOCALITY 描述副本在 Zone 间的分布情况。例如:F@z1,F@z2,F@z3,R@z4 表示 z1、z2、z3 为全功能副本,z4 为只读副本。

2.2 修改租户

  • 命令
 - `ALTER TENANT {tenant_name | ALL} ...`
  • 参数:与新增租户类似,可修改租户的各种属性。

2.3 删除租户

  • 命令
    • DROP TENANT tenant_name [FORCE/PURGE];
  • 选项
    • 不加任何选项:打开回收站功能时,进入回收站
    • FORCE:立即删除。
    • PURGE:不进入回收站直接删除。

2.4 查看租户

  • 命令
 - `SELECT * FROM __all_tenant;`

三、资源分配情况与负载均衡

3.1 查看集群资源

  • 命令
 - `SELECT ... FROM __all_virtual_server_stat;`

3.2 创建租户时的资源分配

  • 流程:定义资源规格 -> 创建资源池 -> 分配资源池给租户。

3.3 租户扩容

  • 方法一:升级资源单元规格。
    • ALTER RESOURCE POOL pool_mysql UNIT='S3';
  • 方法二:增加资源单元数量。
    • ALTER RESOURCE POOL pool_mysql UNIT_NUM=2;

四、Zone与Server管理

4.1 Zone管理

  • 新增
    • ALTER SYSTEM ADD ZONE 'zone';
  • 删除
    • ALTER SYSTEM DELETE ZONE 'zone';
  • 上线/下线
    • ALTER SYSTEM START/STOP ZONE 'zonename';
      Zone管理及状态

4.2 Server管理

  • 添加
    • ALTER SYSTEM ADD SERVER 'ip:port' ...;
  • 删除
    • ALTER SYSTEM DELETE SERVER 'ip:port' ...;
  • 取消删除
    • ALTER SYSTEM CANCEL DELETE SERVER 'ip:port' ...;
  • 启动/停止
    • ALTER SYSTEM START/STOP SERVER 'ip:port' ...;
      Server管理及状态

五、集群扩容与缩容

5.1 集群扩容流程

1. 目标端创建新Unit。
2. 分区复制。
3. 角色切换。
4. 下线多余分区及Unit。

5.2 负载均衡参数

- enable_rebalance:是否开启自动负载均衡。
- migrate_concurrency:控制数据迁移的并发度。
- data_copy_concurrency:设置并发执行的数据迁移复制任务的最大并发数。
- server_data_copy_out_concurrency:设置单个节点迁出数据的最大并发数。
- server_data_copy_in_concurrency:设置单个节点迁入数据的最大并发数。

5.3 查看业务租户内部所有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   ----集群中所有的partition meta信息
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   ----role=1为leader; role=2为follower
order by t5.tenant_name,t4.database_name,
t3.tablegroup_name,t2.partition_id;

六、Primary Zone设置与负载均衡策略

Primary Zone设置

6.1 Primary Zone配置

  • 配置示例
    • (z1;z2;z3):主副本只在Zone1存在,适合时延敏感的在线处理业务。
    • (z1,z2,z3):主副本均匀分布,适合批处理场景。
    • (z1,z2;z3):主副本均匀分布到Zone1和Zone2,Zone3为从副本,适合城市容灾方案。

6.2 优先级继承

  • 数据库:继承租户的Primary Zone设置。
  • :继承数据库的Primary Zone设置。
  • 灵活性:数据库和表可以指定各自的Primary Zone,不必和上一级对象保持一致。

七、小结

  1. 资源分配流程:定义资源规格 -> 创建资源池 -> 分配资源池给租户。
  2. Partition自动负载均衡:分区在不同维度上自动调整,达到均衡。
  3. Primary Zone设置:影响租户、数据库、表等对象主副本的分布策略。
  4. 表组(Tablegroup):干预分区分布,避免跨节点请求对性能的影响。
  5. Unit负载均衡:集群扩容或缩容后,Unit自动调整,数据重新均衡,过程在线完成,简化运维难度。
Logo

更多推荐