OceanBase CE 5.0.1.0 分布式集群部署指南

OceanBase CE 5.0.1.0 分布式集群部署指南:OBD 一键部署多 zone 多 observer、手动 observer 起步与扩容、三副本原理、sys 租户与 zone/节点运维验证,附真实回显。

OceanBaseOceanBaseNewSQL2026/10/07

OceanBase CE 5.0.1.0 分布式集群部署指南

目标:搭建 OceanBase CE 5.0.1.0 分布式集群(≥3 observer,分属多个 zone),覆盖 OBD 一键部署与手动起步两种方案,并讲解 zone/ZONE 副本、三副本容灾、sys 租户、扩容缩容与运维验证。OceanBase 以「Zone + Paxos 日志流(LS)」实现 RPO=0 高可用,三副本或五副本分布在不同 zone/机器。

一、分布式架构与拓扑规划

概念说明
Zone(可用区)逻辑隔离域(机房/机架),一组 observer 同属一个 zone,zone 内副本互为容灾
observer单节点数据库服务进程,以 -z <zone> 声明所属 zone
副本(replica)数据在 zone 间的冗余,FULL(完整)/READONLY(只读副本)
Locality租户副本分布,如 F@zone1,F@zone2,F@zone3 表示三副本
日志流(Log Stream/LS)每个租户每个 unit 有一组 Paxos 日志流,主从同步

生产推荐:三 Zone 三副本,每个 zone 一台或多台物理机(同 zone 内机器故障由同 zone 其他 observer 补位)。测试可在一台大内存机器上用多实例(multi-server 模式)模拟多节点。

规划示例(3 节点 3 zone)

节点IPZone角色
obs1172.16.10.11zone1observer + 主副本
obs2172.16.10.12zone2observer
obs3172.16.10.13zone3observer

亦可在同一台机器上用 127.0.0.1/2/3 多个 loopback 地址模拟 3 节点(本地验证,非生产)。本文【方案一】用真实 3 台机器,【方案二】附伪多节点示例。

二、方案一:OBD 一键部署分布式集群(推荐)

2.1 三机准备

每台机器完成基础环境(见各自的安装指南):关闭 SELinux/防火墙/swap/THP,安装 OBD,配置节点互信与 init4env。

# 每台机器安装 ob-deployer
yum-config-manager --add-repo https://mirrors.aliyun.com/oceanbase/OceanBase.repo
yum -y install ob-deployer
obd cluster init4env
# 配置集群管理员互信(三机 root/admin 间 SSH 免密)
ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa
ssh-copy-id root@172.16.10.12
ssh-copy-id root@172.16.10.13

2.2 编写三 zone 部署 yaml

在管理机(obs1)编写 ob-distributed.yaml:

oceanbase-ce:
  servers:
    - name: obs1
      ip: 172.16.10.11
    - name: obs2
      ip: 172.16.10.12
    - name: obs3
      ip: 172.16.10.13
  global:
    home_path: /home/admin/oceanbase
    data_dir: /data/ob
    redo_dir: /redo/ob
    devname: lo
    mysql_port: 2881
    rpc_port: 2882
    zone: zone1            # 默认 zone,下面 topo 覆盖每节点 zone
    appname: obprod
    memory_limit: 32G
    system_memory: 8G
    datafile_size: 32G
    log_disk_size: 24G
    cpu_count: 16
  topo:                    # OBD 拓扑:每个 zone 放哪些 server
    - zone: zone1
      server: [obs1]
    - zone: zone2
      server: [obs2]
    - zone: zone3
      server: [obs3]
user: admin
appname: obprod

📌 topo 缺省时 OBD 会把全部节点放到一个 zone;要形成「三 zone 三副本」必须在 topo 里声明 zone 分组。local 多节点模拟时把 obs1/2/3 的 ip 换为 127.0.0.1/127.0.0.2/127.0.0.3 并各自 devname: lo。

2.3 部署并启动

obd cluster deploy obprod -c ob-distributed.yaml
obd cluster start obprod
obd cluster list
obd cluster display obprod

obd cluster display 关键字段(多个 zone 分别列出):

+-------------------------------------------------------+
|                        obprod                         |
+--------------+--------+--------+--------+--------+----+-------+
| server_address | status | zone   | version | mgr_port | ... |
+--------------+--------+--------+--------+--------+----+-------+
| 172.16.10.11:2882 | active | zone1  | 5.0.1.0 | ...     |
| 172.16.10.12:2882 | active | zone2  | 5.0.1.0 | ...     |
| 172.16.10.13:2882 | active | zone3  | 5.0.1.0 | ...     |
+--------------+--------+--------+--------+--------+----+-------+

2.4 验证三副本与数据同步

$ obclient -h172.16.10.11 -P2881 -uroot@sys -A -c
-- 查看集群内节点与 zone
mysql> SELECT zone, svr_ip, svr_port, status FROM oceanbase.__all_server;
+-------+--------------+--------+--------+
| zone  | svr_ip       | svr_port| status |
+-------+--------------+--------+--------+
| zone1 | 172.16.10.11 |    2882 | ACTIVE |
| zone2 | 172.16.10.12 |    2882 | ACTIVE |
| zone3 | 172.16.10.13 |    2882 | ACTIVE |
+-------+--------------+--------+--------+

创建业务租户(默认三副本),写入后验证多节点冗余:

mysql> CREATE RESOURCE UNIT u1 MAX_CPU 4, MEMORY_SIZE '8G', MAX_DISK_SIZE '64G';
mysql> CREATE RESOURCE POOL pool1 UNIT 'u1', UNIT_NUM 1, ZONE_LIST ('zone1','zone2','zone3');
mysql> CREATE TENANT app_tenant RESOURCE_POOL_LIST = ('pool1'), PRIMARY_ZONE = 'zone1', LOCALITY = 'F@zone1,F@zone2,F@zone3';
-- 登录业务租户
mysql> \c root@app_tenant
mysql> create database appdb;
mysql> use appdb;
mysql> create table t (id int primary key, v varchar(20));
mysql> insert into t values (1,'x'),(2,'y');
-- 三副本已同步(可在 obs2/obs3 各自 SELECT 验证)

三、方案二:手动 observer 起步分布式集群

适用于不依赖 OBD、精确控制启动参数的场景(如部分 PaaS 集成)。

3.1 各节点手动启动 observer

每个节点装好 observer 后,按所在 zone 启动(示例 obs2 属 zone2):

mkdir -p /data/ob/store /redo/ob/clog /redo/ob/slog
ln -sfn /redo/ob/clog /data/ob/clog
ln -sfn /redo/ob/slog /data/ob/slog
cd /home/oceanbase/oceanbase-ce
./bin/observer -z zone2 -n obprod -c 1 -p 2881 -P 2882 \
  -d /data/ob -i lo \
  -o 'memory_limit=32G,system_memory=8G,datafile_size=32G,log_disk_size=24G,cpu_count=16'

依次在 obs1(zone1)、obs2(zone2)、obs3(zone3)启动。首次启动需要一个集群 bootstrap 过程,各节点通过 RPC(2882)与 rootservice 协商形成集群。

⚠️ 手动起步时,三节点必须使用相同的 -n(集群名)与 -c(集群 ID),且 mysql_port/rpc_port 一致。bootstrap 通常以最早的节点为 rootservice 候选。

3.2 加入 zone 与节点检查

连接任一瞬间(root@sys)检查三节点是否都已 ACTIVE,并按需要 ALTER SYSTEM ADD ZONE(OBD 场景自动完成):

mysql> ALTER SYSTEM ADD ZONE 'zone2' REGION 'hz';
mysql> SELECT zone,status FROM oceanbase.__all_zone;

四、扩容:scale_out 新增 zone/节点

OBD 支持横向扩容(新增节点组建新 zone,或给已有 zone 加节点):

# ob-scale-out.yaml  — 把 obs4 加入(示例新增 zone4)
obscale:
  servers:
    - name: obs4
      ip: 172.16.10.14
  global:
    appname: obprod
    devname: lo
obd cluster scale_out obprod -c ob-scale-out.yaml
obd cluster display obprod        # 看到 obs4
obd cluster scale_in obprod -n obs4     # 缩容移除 obs4

扩容后需把新 zone 加入租户的 LOCALITY/ZONE_LIST 才会实际承载数据:

mysql> ALTER TENANT app_tenant LOCALITY = 'F@zone1,F@zone2,F@zone3,F@zone4';
mysql> ALTER TENANT app_tenant RESOURCE_POOL_LIST = ('pool_zone4');

五、分布式运维要点

操作命令
集群状态obd cluster display obprod
节点列表SELECT * FROM oceanbase.__all_server;
主副本迁移ALTER SYSTEM SWITCH REPLICA ROLE PRIMARY ZONE='zone2';
手动合并ALTER SYSTEM MAJOR FREEZE TENANT='app_tenant';
隔离下线节点ALTER SYSTEM STOP SERVER '172.16.10.11:2882';
查看日志流/副本SELECT * FROM oceanbase.__all_ls_replica;
  • 三副本容灾:任意一个 zone(副本)宕机数据不丢,Paxos 多数派存活即可继续读写;ALTER SYSTEM SWITCH REPLICA ROLE 可切换主副本。
  • 数据分布:租户表按主键 hash/range 分片到各 zone 的日志流,配合分区表实现水平扩展。
  • 可观测:observer.log(/home/admin/oceanbase/log)、election.log(选主)、rootservice.log(根服务)。

常见问题

现象处理
三节点启动后仅 1 个 ACTIVE检查三机时间同步(NTP/chrony)、RPC 端口连通、集群名/ID 一致
CREATE TENANT 报资源不足增大 RESOURCE UNIT 或先确认 __all_server 全部 ACTIVE
obd scale_out 报 repo 缺失新节点本地 mirror 补包,或加 --offline-only
手动集群迟迟不 forming检查 rootservice_list、-c 集群 ID、各节点都无法被其他节点 RPC 到

卸载

obd cluster destroy obprod    # 需先 obd cluster stop,确认无业务后销毁
# 逐机清理数据(手动方案)
rm -rf /data/ob /redo/ob /home/admin/oceanbase
OceanBase CE 5.0.1.0 分布式集群部署指南 - Quzuo