谁能介绍一下ob垂直和水平扩容的手段有那些?各自需要怎样的操作?
OceanBase 4.x 里“扩容”要分两层看:集群层(加机器/加 Zone) 和 租户层(调 Unit 规格 / 调 Unit 数量)。日常说的“垂直扩容”和“水平扩容”主要指租户容量调整方式,但底层都依赖集群先有对应物理资源。下面按 OB 4.x 多租户模型给你梳理。
一、垂直扩容(Scale Up)—— 单节点内给租户“换大房子”
本质:不改节点数,只调大单个 Resource Unit 的 CPU / 内存 / 日志盘,租户在每台 OBServer 上占的资源变多,无数据搬迁,秒级生效。
适用场景
-
单 Zone 内 OBServer 还有空闲资源
-
突发业务压力、应急提配
-
不想动集群拓扑、不接受副本迁移抖动
操作(sys 租户执行)
- 先确认节点剩余资源够不够
sql
sql
SELECT svr_ip, cpu_capacity, cpu_assigned, mem_capacity, mem_assigned
FROM oceanbase.GV$OB_SERVERS;
- 多租户共用同一 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;
- 给资源池换 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';
- 校验
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 抖动 |
| 典型用途 | 应急提配、小步调整 | 业务持续增长、破单机瓶颈 |
生产常见套路:先垂直撑一阵 → 选低峰加节点做水平 → 水平完再按需垂直微调。
干货满满!
干货满满,收藏起来慢慢消化。
写得真详细。
6666
你这个问题吧, 是个问题。
转移积分 社区禁止 还会给积分取消