谁能介绍一下ob垂直和水平扩容的手段有那些?各自需要怎样的操作?

谁能介绍一下ob垂直和水平扩容的手段有那些?各自需要怎样的操作?

6 个赞

OceanBase 4.x 里“扩容”要分两层看:集群层(加机器/加 Zone)​ 和 租户层(调 Unit 规格 / 调 Unit 数量)。日常说的“垂直扩容”和“水平扩容”主要指租户容量调整方式,但底层都依赖集群先有对应物理资源。下面按 OB 4.x 多租户模型给你梳理。

一、垂直扩容(Scale Up)—— 单节点内给租户“换大房子”

本质:不改节点数,只调大单个 Resource Unit 的 CPU / 内存 / 日志盘,租户在每台 OBServer 上占的资源变多,无数据搬迁,秒级生效。

适用场景

  • 单 Zone 内 OBServer 还有空闲资源

  • 突发业务压力、应急提配

  • 不想动集群拓扑、不接受副本迁移抖动

操作(sys 租户执行)

  1. 先确认节点剩余资源够不够

sql

sql

SELECT svr_ip, cpu_capacity, cpu_assigned, mem_capacity, mem_assigned
FROM oceanbase.GV$OB_SERVERS;
  1. 多租户共用同一 unit 配置时,先建独立 unit 再切换,别直接改公共 unit(否则连带其他租户一起扩)

sql

sql

CREATE RESOURCE UNIT unit_app_large
  MAX_CPU 16, MIN_CPU 16,
  MEMORY_SIZE '64G',
  LOG_DISK_SIZE '200G',
  MAX_IOPS 20000, MIN_IOPS 20000;
  1. 给资源池换 unit 配置(或原地改原 unit 规格)

sql

sql

-- 方式A:切换新规格(推荐,不影响同模板其他租户)
ALTER RESOURCE POOL pool_app UNIT='unit_app_large';

-- 方式B:原地改原 unit(仅当该 unit 只被目标租户用时用)
ALTER RESOURCE UNIT unit_app_old
  MAX_CPU 16, MIN_CPU 16, MEMORY_SIZE '64G';
  1. 校验

sql

sql

SELECT * FROM oceanbase.DBA_OB_UNITS WHERE TENANT_ID=<tid>;

边界

  • 单 Unit 规格不能超过单台 OBServer 可用资源(留 system_memory / 其他租户份额)

  • 受单机物理上限约束,不能无限垂直

  • 缩容时若当前 memstore 已用超过新内存上限,会等租户内部 GC 完才生效

二、水平扩容(Scale Out)—— 加机器把负载摊到更多节点

OB 里水平扩容是两步组合,少一步都不算完整:

2.1 集群层:加 OBServer 节点(或加 Zone)

让集群每个 Zone 的机器数变多,或 Zone 数变多。

黑屏 SQL(以给 zone1 加一台为例)

sql

sql

-- 新机器先装好 observer,同版本,起来后:
ALTER SYSTEM ADD SERVER '10.0.0.4:2882' ZONE 'zone1';

OBD 方式:改 yaml 把新 server 加进对应 zone,跑 obd cluster scale_out <deploy> -c new.yaml

OCP 白屏:集群总览 → 新增 OBServer → 选 Zone → 提交,RS 自动触发 unit 再均衡。

三副本集群水平扩通常做法是 每个 Zone 各加同等数量节点(如 1-1-1 → 2-2-2),保证副本均衡。

2.2 租户层:调大 UNIT_NUM(每 Zone 的 Unit 数)

加完节点后,租户默认不会自动多用新机器,必须显式提高 UNIT_NUM

sql

sql

-- 前提:每个 Zone 的 OBServer 数 >= 新 UNIT_NUM,且 V4 要求各 Zone UNIT_NUM 一致
ALTER RESOURCE POOL pool_app UNIT_NUM 2;
-- 或直接对租户
ALTER RESOURCE TENANT app_tenant UNIT_NUM = 2;

执行后 RootService 自动把新增 Unit 调度到新节点,做 partition 副本迁移 + 主副本均衡(rebalance),期间业务正常,但会有网络 IO 和短暂切主。

适用场景

  • 单机垂直到顶(如 256G 全给一个租户也不够)

  • 读流量大,需要更多节点分担 PX / 副本读

  • 容灾诉求:从单 Zone 扩成多 Zone

边界(V4 强约束)

  • 同租户每个 Zone 的 UNIT_NUM 必须相等

  • 单 Zone 内:UNIT_NUM ≤ 该 Zone OBServer 数

  • 一个 Unit 同一时刻只落在一台 OBServer,同租户两个 Unit 不共存一台

  • rebalance 速度受 balancer 限流影响,大表迁移看数据量,可能几十分钟到几小时

三、还有一种“半水平”:Primary Zone 打散

不加班点、不改 UNIT_NUM,把租户主副本从单 Zone 打散到多 Zone:

sql

sql

ALTER TENANT app_tenant PRIMARY_ZONE='zone1,zone2,zone3';

这不算严格扩容,但能把写主副本分散,减轻单 Zone 压力,常和水平扩容配合使用。

四、两种手段对比(生产选型)

维度 垂直扩容 水平扩容
改什么 Unit 规格(CPU/内存) 加 OBServer + 提 UNIT_NUM
数据搬迁 有(rebalance)
生效速度 秒级 加节点秒级,均衡分钟~小时级
上限 单机物理上限 集群规模上限
风险 极低 低,但有切主/网络 IO 抖动
典型用途 应急提配、小步调整 业务持续增长、破单机瓶颈

生产常见套路:先垂直撑一阵 → 选低峰加节点做水平 → 水平完再按需垂直微调

3 个赞

干货满满!

干货满满,收藏起来慢慢消化。

写得真详细。

6666

你这个问题吧, 是个问题。

转移积分 社区禁止 还会给积分取消