数据库教程FGMT78:国产数据库-OceanBase数据库工程师培训实战教程(阿里/淘宝/天猫/蚂蚁/支付宝金融级分布式数据库)
## 一、前言与本套风哥教程大纲介绍
风哥教程本文面向数据库爱好者、在职 DBA 与求职工程师,目标是把 OceanBase 社区版 V4.35 从"认识、安装、运维、开发、备份恢复、扩缩容、高可用、故障处理"完整走一遍。本套风哥教程以银河麒麟 Kylin-Server-V10-SP3-2403-Release 为操作系统底座,以两台物理/虚拟机 fgedu-net-cn1、fgedu-net-cn2(单机规格 64G 内存、8CPU)为实验主机,所有命令均可在实验环境原样复现。
OceanBase 是完全自主研发的原生分布式数据库,最早在阿里、淘宝、天猫、蚂蚁、支付宝的核心交易与账务体系中落地,用普通 PC 服务器实现了金融级高可用。本套风哥教程不做产品宣传,只讲工程师必须掌握的原理与可执行操作:先讲清分布式架构与核心概念,再用大量步骤与命令完成部署、租户、对象、备份、扩缩容与故障处理。
风哥教程本文大纲如下:
- 第一部分 理论:数据库发展演进、OceanBase 简介与版本、原生分布式架构、多副本与 Paxos、多租户模型、核心概念、部署体系与硬件系统要求。
- 第二部分 实战:实验环境准备、OBD 单机部署、OBD 集群部署、OCP 安装与接管、登录与配置项管理、Zone 与节点管理、租户与资源单元/资源池管理、对象管理(库表、分区表、表组、索引、视图、物化视图、序列、触发器)、备份恢复、扩容缩容、高可用与故障处理。
- 第三部分 风哥针对本文总结。
>
> 风哥 itpux-com
---
## 二、理论部分
### 2.1 数据库发展演进与分布式数据库的由来
传统关系型数据库(如集中式 Oracle、MySQL 主从)在业务量增长时面临两个天花板:一是纵向扩容(换更大的机器)成本高、上限明显;二是单点故障与主从切换带来的可用性风险。互联网业务的特点是高并发、大数据量、要求 7×24 不停机,集中式架构逐渐力不从心。
第一代分布式方案多为"分库分表 + 中间件",把数据切碎到多个 MySQL 实例,由中间件路由。它的问题是:跨分片事务弱、全局一致性难保证、扩容要重新分片、运维复杂。第二代是 NewSQL 尝试在分布式环境下保留 SQL 与事务能力。OceanBase 属于第三代原生分布式数据库:数据天然按分区分布在多台普通服务器上,内置一致性协议,不需要应用层分片,同时兼容 MySQL/Oracle 语法,支持 HTAP 混合负载(同一套系统同时跑 OLTP 交易与 OLAP 分析)。
理解演进路线是为了明白一个判断:OceanBase 不是"把 MySQL 堆起来",而是从存储、事务、一致性层面原生设计的分布式系统,这决定了它的部署、运维、故障处理思路都与单机数据库不同。
### 2.2 OceanBase 简介、特点与版本区别
OceanBase 的核心特点可归纳为:
1. **原生分布式**:数据以分区(Partition)为单位分布在集群多节点,单集群可水平扩展到数百节点,扩容在线完成、对应用透明。
2. **金融级高可用**:基于 Paxos 多数派协议,同一份数据写多副本,少数派副本故障不丢数据(RPO=0),Leader 故障后自动选主,RTO 通常在 8 秒以内。
3. **多租户**:一个物理集群内可划分多个逻辑租户,租户之间 CPU、内存、IO 隔离,应用看到的就是一个独立数据库。
4. **单机分布式一体化**:同一套二进制既可以单机部署做测试/边缘,也可以集群部署做生产,架构平滑升级。
5. **HTAP**:支持行列混合存储,交易与分析负载可在同一集群共存。
6. **高兼容**:MySQL 模式高度兼容 MySQL 语法,Oracle 模式兼容大量 Oracle 语法,迁移成本低。
版本上分社区版与企业版。社区版免费开源,覆盖核心分布式能力,适合学习、中小业务与私有化试点;企业版由官方提供商业支持,附带企业级特性、OCP 商业管控、高级备份与认证服务。本套风哥教程使用社区版 V4.35,实验结论与企业版在核心概念上一致。
>
> 上51CTO搜索风哥可以学习全套数据库教程
### 2.3 系统架构:原生分布式、多副本与 Paxos
OceanBase 集群由三类关键角色组成:
- **OBServer(observer 进程)**:真正承载数据与计算的节点,部署在一台物理/虚拟机上,一个节点就是一个进程。
- **Zone(可用区)**:逻辑故障域,通常对应一个机房、一个机架或一组供电网络。副本要分散在不同 Zone,保证一个 Zone 整体故障时多数派仍在。
- **租户(Tenant)**:逻辑数据库,内部再分 SYS 系统租户与普通业务租户。
数据在集群内以"表—分区—副本"三层组织。一张表按主键或分区规则切成若干分区,每个分区在不同 Zone 各存一个副本,形成一主多从:Leader 副本负责读写,Follower 副本只同步日志。写操作先由 Leader 提交,通过 Paxos 把日志复制到多数派(三副本需 2 票、五副本需 3 票)后才算成功,因此只要多数派存活,数据不丢、服务不停。
Paxos 的工程意义在于:它把"一致性"下沉到数据库内核,应用不需要关心主从切换,也不需要自己实现分布式事务。当某个节点宕机,该节点上的 Leader 副本会在其余存活副本中重新选举,业务连接短暂重连即可,这就是 RTO 秒级、RPO=0 的来源。
### 2.4 多租户模型与资源单元、资源池
OceanBase 的资源管理是"三层绑定":
- **资源单元(Resource Unit)**:对单个副本可占用资源的规格定义,声明 MIN/MAX CPU、MIN/MAX MEMORY、IOPS、磁盘等上下限。CPU 可超分,内存是硬资源,必须严格预留。
- **资源池(Resource Pool)**:把若干个相同规格的 Unit 按 Unit_NUM 数量铺到各 Zone,是资源的集合。
- **租户(Tenant)**:绑定一个或多个资源池,拿到的就是可用的计算与存储。
一个 Unit 对应一个分区副本的资源配额。三副本集群里,一个租户要在三个 Zone 各放一个 Unit,才具备三副本高可用。调整租户容量,本质是改 Unit 规格或改 Unit_NUM,再由集群自动做副本迁移与负载均衡(Rebalance)。
>
> 风哥教程 113257174
### 2.5 核心概念速查
- **集群(Cluster)**:一组 OBServer 组成的整体,有唯一集群名。
- **OBProxy**:代理层,接收应用连接并按路由把请求转发到对应租户的 Leader,应用只连代理。
- **SYS 租户**:系统租户,管理集群、节点、配置、资源,root@sys 是最高管理员。
- **普通租户**:业务租户,如本套风哥教程的 fgedudb。
- **表组(Table Group)**:把经常关联查询的多张表的分区放到同一节点,减少分布式 JOIN 的网络开销。
- **主 Zone(Primary Zone)**:指定 Leader 优先放置的 Zone。
- **日志流(Log Stream)**:每个分区副本的redo 日志,Paxos 复制的对象。
### 2.6 部署体系与硬件、操作系统要求
OceanBase 社区版主要有两条部署路径:
1. **OBD(ob-deploy)命令行部署**:通过 YAML 配置文件描述集群,一条命令完成安装、初始化、启动,适合实验与生产脚本化。
2. **OCP(OceanBase Cloud Platform)**:Web 管控平台,支持可视化集群创建、接管、监控、扩缩容、备份,适合生产长期运维。
此外还有 systemd 单机部署、单点一体化快速部署等方式,用于快速验证。
硬件与系统要求(本套风哥教程统一按 64G 内存、8CPU 规格):
- CPU:实验最低 4 核,生产建议 8 核起步;本套风哥教程节点为 8CPU。
- 内存:单节点建议 16G 起步,本套风哥教程节点 64G;其中 system_memory 预留给系统,其余给业务。
- 磁盘:SSD/NVMe 优先,数据盘与日志盘建议分离,预留充足 datafile 与 log_disk 空间。
- 网络:节点间万兆内网,时间必须同步(chrony/NTP),关闭或规范防火墙,主机名可解析。
- 操作系统:银河麒麟 Kylin-Server-V10-SP3、欧拉 openEuler、RHEL/CentOS 7.x/8.x 均可;本套风哥教程主用麒麟,另附欧拉快速部署说明。
- 内核参数:关闭透明大页、调整 ulimit、调整 vm 参数,具体在实战环境准备中给出。
>
> 风哥数据库教程 itpux-com
---
## 三、实战操作部分
### 实战一:实验环境准备(fgedu-net-cn1、fgedu-net-cn2,64G/8CPU)
本套风哥教程使用两台节点:fgedu-net-cn1(192.168.1.11)、fgedu-net-cn2(192.168.1.12),均为 64G 内存、8CPU,操作系统银河麒麟 Kylin-Server-V10-SP3。以下命令在两台节点分别执行,差异处单独标注。
**步骤 1:设置主机名与 hosts 解析。**
fgedu-net-cn1:
```
hostnamectl set-hostname fgedu-net-cn1
```
fgedu-net-cn2:
```
hostnamectl set-hostname fgedu-net-cn2
```
两台节点编辑 /etc/hosts,保证互相解析:
```
cat >> /etc/hosts <<EOF
192.168.1.11 fgedu-net-cn1
192.168.1.12 fgedu-net-cn2
EOF
```
**步骤 2:关闭防火墙与 SELinux(实验环境;生产按安全规范放通端口)。**
```
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
```
**步骤 3:时间同步。**
```
yum install -y chrony
systemctl enable --now chronyd
chronyc sources
```
**步骤 4:资源限制与内核参数。**
```
cat >> /etc/security/limits.conf <<EOF
* soft nofile 655350
* hard nofile 655350
* soft nproc 655350
* hard nproc 655350
EOF
```
关闭透明大页并调优内存回收:
```
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
cat >> /etc/sysctl.conf <<EOF
vm.swappiness = 0
vm.min_free_kbytes = 2097152
net.core.somaxconn = 2048
EOF
sysctl -p
```
**步骤 5:创建统一目录 /fgedudb(替换传统 /u01 路径)。**
```
mkdir -p /fgedudb/observer /fgedudb/log /fgedudb/backup /fgedudb/nfs
useradd -u 1001 obuser 2>/dev/null || true
chown -R obuser:obuser /fgedudb
```
**步骤 6:安装依赖包。**
```
yum install -y net-tools lsof tar wget curl python3 \
gcc gcc-c++ make cmake perl rsync
```
>
> 风哥 itpux-com
### 实战二:OBD 单机部署测试环境
OBD(ob-deploy)是社区版官方命令行部署工具,先在单机上跑通,再扩展到集群。
**步骤 1:安装 OBD。**
```
rpm -ivh ob-deploy-*.rpm
obd --version
```
**步骤 2:生成单机配置模板。**
```
obd cluster deploy fgedudb -o /fgedudb/obd_single.yaml
```
编辑 /fgedudb/obd_single.yaml,单机规格按 64G/8CPU:
```
oceanbase-ce:
servers:
- name: fgedu-net-cn1
ip: 192.168.1.11
global:
home_path: /fgedudb/observer
data_dir: /fgedudb/observer/store
log_dir: /fgedudb/log
memory_limit: 48G
system_memory: 12G
cpu_count: 8
datafile_size: 100G
log_disk_size: 100G
mysql_port: 2881
rpc_port: 2882
devname: eth0
obproxy-ce:
servers:
- name: fgedu-net-cn1
ip: 192.168.1.11
global:
listen_port: 2883
```
**步骤 3:部署并启动。**
```
obd cluster deploy fgedudb -c /fgedudb/obd_single.yaml
obd cluster start fgedudb
obd cluster display fgedudb
```
**步骤 4:用 obclient 连接 SYS 租户。**
```
obclient -h127.0.0.1 -P2881 -uroot@sys -p -A
```
进入后查看集群:
```
SELECT name, value FROM oceanbase.DBA_OB_SERVERS;
s-hOW PARAMETERS LIKE 'memory_limit';
```
单机适合功能验证,生产使用集群。
### 实战三:OBD 集群部署生产环境
生产采用三 Zone 三副本。本套风哥教程以 fgedu-net-cn1、fgedu-net-cn2 两台主机演示,第三节点可按同样模板追加;单台主机也可用不同端口模拟多节点,命令结构一致。
**步骤 1:编写集群配置 /fgedudb/obd_cluster.yaml,每节点 64G/8CPU。**
```
oceanbase-ce:
servers:
- name: fgedu-net-cn1
ip: 192.168.1.11
zone: zone1
- name: fgedu-net-cn2
ip: 192.168.1.12
zone: zone2
global:
home_path: /fgedudb/observer
data_dir: /fgedudb/observer/store
log_dir: /fgedudb/log
memory_limit: 48G
system_memory: 12G
cpu_count: 8
datafile_size: 100G
log_disk_size: 100G
mysql_port: 2881
rpc_port: 2882
devname: eth0
cluster_name: fgedudb_cluster
obproxy-ce:
servers:
- name: fgedu-net-cn1
ip: 192.168.1.11
- name: fgedu-net-cn2
ip: 192.168.1.12
global:
listen_port: 2883
```
**步骤 2:部署、启动并查看。**
```
obd cluster deploy fgedudb_cluster -c /fgedudb/obd_cluster.yaml
obd cluster start fgedudb_cluster
obd cluster display fgedudb_cluster
```
`obd cluster display` 中每个 observer 状态应为 active,zone 为 ONLINE。
**步骤 3:通过 OBProxy 连接。**
```
obclient -h192.168.1.11 -P2883 -uroot@sys#fgedudb_cluster -p -A
```
**步骤 4:校验三副本与 Leader 分布。**
```
SELECT zone, svr_ip, status FROM oceanbase.DBA_OB_SERVERS;
SELECT tenant_id, zone, svr_ip, role FROM oceanbase.DBA_OB_LOG_REPLICA_STAT;
```
### 实战四:OCP 安装与接管集群
OCP 提供 Web 管控。生产可先由 OBD 建集群,再用 OCP 接管。
**步骤 1:准备 OCP 元数据库(可用已有 MySQL 或内置)。**
```
mkdir -p /fgedudb/ocp
```
**步骤 2:用 OCP 安装包一键部署。**
```
cd /fgedudb/ocp
./ocp_s-hturl.cc/Jw install -c /fgedudb/ocp/ocp.yaml
```
ocp.yaml 中填写 OCP 节点地址、元库连接、管理员密码。安装完成后浏览器访问 `[http://192.168.1.11:8080](http://192.168.1.11:8080)`。
**步骤 3:在 OCP 中接管已有集群。** 进入"集群管理 → 接管集群",填入 SYS 租户 root 密码与 OBServer 地址,确认后 OCP 即可展示节点、租户、监控与备份入口。OCP 也支持"集群快速部署":选版本、填主机、填资源规格,平台自动生成配置并下发,适合标准化新建。
>
> 网上搜索风哥教程可以学习全套数据库教程
### 实战五:登录管理与配置项管理
**SYS 租户与业务租户的连接串格式:**
```
# SYS 管理员
obclient -h192.168.1.11 -P2883 -uroot@sys#fgedudb_cluster -p -A
# 业务租户 fgedudb,用户 fgedu
obclient -h192.168.1.11 -P2883 -ufgedu@fgedudb#fgedudb_cluster -p -A
```
**查看与修改配置项(参数)。** 只读查看:
```
s-hOW PARAMETERS LIKE 'memory_limit';
SELECT name, value, section FROM oceanbase.GV$OB_PARAMETERS WHERE name='cpu_count';
```
动态修改某参数(SYS 租户执行):
```
ALTER SYSTEM SET memory_limit='48G' SERVER='192.168.1.11:2882';
ALTER SYSTEM SET cpu_count=8 SERVER='192.168.1.12:2882';
```
查看参数是否动态生效、是否需要重启:
```
SELECT name, value, need_reboot FROM oceanbase.GV$OB_PARAMETERS WHERE name='datafile_size';
```
### 实战六:Zone 与节点管理
**查看节点:**
```
SELECT zone, svr_ip, version, status FROM oceanbase.DBA_OB_SERVERS;
```
**向集群新增一个 OBServer(扩容前置动作):**
```
ALTER SYSTEM ADD SERVER '192.168.1.13:2882' ZONE 'zone3';
```
**下线节点(缩容前置动作,先驱逐副本):**
```
ALTER SYSTEM DELETE SERVER '192.168.1.13:2882';
```
**查询节点下线进度与副本迁移:**
```
SELECT svr_ip, status FROM oceanbase.DBA_OB_SERVERS;
SELECT * FROM oceanbase.DBA_OB_UNITS ORDER BY zone;
```
Zone 管理上,新增 Zone 用 `ALTER SYSTEM ADD ZONE zone3`,删除前需保证该 Zone 无副本。
### 实战七:租户、资源单元与资源池管理
**步骤 1:创建资源单元(64G/8CPU 集群内,给业务单元配 2C/8G)。**
```
CREATE RESOURCE UNIT unit_fgedu
MAX_CPU 2, MIN_CPU 2,
MEMORY_SIZE '8G',
MAX_IOPS 10000, MIN_IOPS 10000,
LOG_DISK_SIZE '2G';
```
**步骤 2:创建资源池,三 Zone 各一个 Unit。**
```
CREATE RESOURCE POOL pool_fgedu
UNIT = 'unit_fgedu',
UNIT_NUM = 1,
ZONE_LIST = ('zone1', 'zone2', 'zone3');
```
**步骤 3:创建业务租户 fgedudb(命令行)。**
```
CREATE TENANT IF NOT EXISTS fgedudb
RESOURCE_POOL_LIST = ('pool_fgedu'),
PRIMARY_ZONE = 'zone1',
SET log_mode = 'ARCHIVE',
charset = 'utf8mb4',
collation = 'utf8mb4_general_ci';
```
**步骤 4:为租户创建业务用户 fgedu 并授权。**
```
SET ob_tenant_id = (SELECT tenant_id FROM oceanbase.DBA_OB_TENANTS WHERE tenant_name='fgedudb');
```
切到租户后:
```
obclient -h192.168.1.11 -P2883 -uroot@fgedudb#fgedudb_cluster -p -A
```
```
CREATE USER fgedu IDENTIFIED BY 'Fgedu@2026';
GRANT ALL PRIVILEGES ON *.* TO 'fgedu';
```
**OCP 方式创建租户**:进入"租户管理 → 新建租户",选资源规格(等价于 Unit)、填 Unit_NUM、选 Zone、设置租户名 fgedudb 与管理员密码,平台自动生成建租户语句。
**调整租户容量**:
```
ALTER RESOURCE UNIT unit_fgedu MAX_CPU 4, MEMORY_SIZE '16G';
ALTER RESOURCE POOL pool_fgedu UNIT_NUM = 2;
```
>
> 风哥教程 113257174
### 实战八:对象管理
以下在 fgedudb 租户内、用户 fgedu 下执行。
**1)创建数据库。**
```
CREATE DATABASE fgedudb DEFAULT CHARACTER SET utf8mb4;
USE fgedudb;
```
**2)创建普通表。**
```
CREATE TABLE t_order (
order_id BIGINT NOT NULL,
buyer VARCHAR(64) NOT NULL,
amount DECIMAL(18,2) NOT NULL DEFAULT 0,
create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (order_id)
) TABLEGROUP tg_fgedu;
```
**3)分区表(哈希分区,8 个分区)。**
```
CREATE TABLE t_order_part (
order_id BIGINT NOT NULL,
buyer VARCHAR(64),
amount DECIMAL(18,2),
create_time DATETIME,
PRIMARY KEY (order_id)
) PARTITION BY HAs-h(order_id) PARTITIONS 8;
```
范围分区示例:
```
CREATE TABLE t_log (
log_id BIGINT NOT NULL,
log_time DATETIME NOT NULL,
content VARCHAR(2000)
) PARTITION BY RANGE(TO_DAYS(log_time)) (
PARTITION p202601 VALUES LESS THAN (TO_DAYS('2026-02-01')),
PARTITION p202602 VALUES LESS THAN (TO_DAYS('2026-03-01')),
PARTITION pmax VALUES LESS THAN (MAXVALUE)
);
```
**4)表组(Table Group)。** 把强关联表放进同一表组,分区共置,JOIN 不下发网络:
```
CREATE TABLEGROUP tg_fgedu LOCALITY='FULL{1}@zone1, FULL{1}@zone2, FULL{1}@zone3';
```
**5)索引。**
```
CREATE INDEX idx_order_buyer ON t_order(buyer);
-- 全局索引(跨分区)
CREATE UNIQUE INDEX uk_order_buyer ON t_order_part(buyer) GLOBAL;
```
查看执行计划判断是否走索引:
```
EXPLAIN SELECT * FROM t_order WHERE buyer='zhangsan';
```
**6)普通视图。**
```
CREATE VIEW v_order_summary AS
SELECT buyer, SUM(amount) total, COUNT(*) cnt
FROM t_order GROUP BY buyer;
SELECT * FROM v_order_summary;
```
**7)物化视图(定时刷新,存计算结果)。**
```
CREATE MATERIALIZED VIEW mv_order_daily
REFREs-h COMPLETE START WITH CURRENT_TIMESTAMP NEXT CURRENT_TIMESTAMP + INTERVAL 1 DAY
AS SELECT DATE(create_time) d, SUM(amount) amt FROM t_order GROUP BY DATE(create_time);
```
手动刷新:
```
REFREs-h MATERIALIZED VIEW mv_order_daily;
```
**8)系统视图查询。**
```
SELECT table_name, table_type FROM oceanbase.DBA_TABLES WHERE owner='fgedu';
s-hOW TABLES;
```
**9)序列 SEQUENCE。**
```
CREATE SEQUENCE seq_fgedu START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE;
SELECT seq_fgedu.NEXTVAL FROM DUAL;
```
**10)触发器 TRIGGER。**
```
CREATE TRIGGER trg_order_audit
AFTER INSERT ON t_order
FOR EACH ROW
INSERT INTO t_audit(order_id, buyer, action)
VALUES (NEW.order_id, NEW.buyer, 'INSERT');
```
### 实战九:备份恢复
**步骤 1:部署 NFS 作为备份介质。** fgedu-net-cn1 上:
```
mkdir -p /fgedudb/nfs/backup
chown -R nobody:nobody /fgedudb/nfs/backup
echo "/fgedudb/nfs/backup *(rw,sync,no_root_squas-h)" >> /etc/exports
exportfs -a
systemctl enable --now nfs-server
```
fgedu-net-cn2 挂载测试:
```
mount -t nfs 192.168.1.11:/fgedudb/nfs/backup /fgedudb/nfs
```
**步骤 2:配置备份路径并打开日志归档(SYS 租户)。**
```
ALTER SYSTEM SET backup_dest='file:///fgedudb/nfs/backup';
ALTER SYSTEM ARCHIVELOG;
```
查看归档状态:
```
SELECT * FROM oceanbase.DBA_OB_TENANTS WHERE tenant_name='fgedudb';
```
**步骤 3:发起全量备份。**
```
ALTER SYSTEM BACKUP DATABASE TENANT = fgedudb;
```
查看备份任务:
```
SELECT * FROM oceanbase.DBA_OB_BACKUP_JOB_HISTORY ORDER BY start_time DESC;
```
**步骤 4:日志归档(增量)持续推进。**
```
ALTER SYSTEM BACKUP LOG TENANT = fgedudb;
```
**步骤 5:恢复。** 新集群上执行恢复命令,指定备份路径与目标时间戳:
```
ALTER SYSTEM RESTORE fgedudb FROM 'file:///fgedudb/nfs/backup'
UNTIL TIME '2026-11-10 08:00:00' WITH 'recovery';
```
恢复进度通过 `DBA_OB_RESTORE_PROGRESS` 观察:
```
SELECT * FROM oceanbase.DBA_OB_RESTORE_PROGRESS;
```
>
> 风哥数据库教程 itpux-com
### 实战十:扩容缩容
**扩容(在线,三副本由 2-2-2 扩到 3-3-3 思路)。**
步骤一:新节点先按实战一完成环境准备,并在新主机安装 observer:
```
obd cluster redeploy fgedudb_cluster -c /fgedudb/obd_cluster.yaml
```
步骤二:SYS 租户把新节点加入集群:
```
ALTER SYSTEM ADD SERVER '192.168.1.13:2882' ZONE 'zone3';
```
步骤三:扩大资源池 Unit_NUM,触发自动 Rebalance:
```
ALTER RESOURCE POOL pool_fgedu UNIT_NUM = 2;
```
步骤四:观察副本迁移与负载均衡:
```
SELECT zone, svr_ip, unit_id, migrate_status FROM oceanbase.DBA_OB_UNITS;
SELECT * FROM oceanbase.DBA_OB_REBALANCE_PROGRESS;
```
**缩容。** 先扩后缩、先迁移后下线:
```
ALTER RESOURCE POOL pool_fgedu UNIT_NUM = 1;
-- 等待副本迁出完成
ALTER SYSTEM DELETE SERVER '192.168.1.13:2882';
```
缩容时关注 `server_permanent_offline_time`,默认 3600s,可按现场调整:
```
ALTER SYSTEM SET server_permanent_offline_time='300s';
```
### 实战十一:高可用与故障处理
**高可用验证:** 三副本下手动停掉 fgedu-net-cn2 上的 observer:
```
obd cluster stop fgedudb_cluster --servers fgedu-net-cn2
```
观察 Leader 自动切换与业务连接重连:
```
SELECT zone, svr_ip, role, status FROM oceanbase.DBA_OB_LOG_REPLICA_STAT;
```
恢复节点:
```
obd cluster start fgedudb_cluster --servers fgedu-net-cn2
```
节点重新加入后自动追日志、补齐副本。
**常见故障处理:**
- 节点无法登录:先查进程 `ps -ef | grep observer`、端口 `netstat -lntp | grep 2881`、日志 `/fgedudb/log`。
- 多数派丢失(三副本挂两台):集群只读,需尽快恢复一台存活节点,不可强行写入。
- 副本不一致:用 `DBA_OB_LOG_REPLICA_STAT` 对比各副本日志位点,等待自动同步,必要时重建故障节点。
- 磁盘写满:先清理 `datafile` 历史快照与备份,禁止直接删数据文件。
>
> 上51CTO搜索风哥可以学习全套数据库教程
---
## 四、风哥针对本文总结
风哥针对本文总结如下:本套风哥教程从数据库演进讲起,说明 OceanBase 作为第三代原生分布式数据库,依靠 Paxos 多副本实现 RPO=0、RTO 秒级的金融级高可用,依靠多租户与资源单元/资源池实现资源隔离与弹性调度。实战部分按"环境准备 → OBD 单机 → OBD 集群 → OCP 接管 → 登录与配置项 → Zone/节点 → 租户资源 → 对象管理 → 备份恢复 → 扩容缩容 → 高可用故障处理"的顺序,给出了在 fgedu-net-cn1、fgedu-net-cn2 两台 64G/8CPU 节点上、以 /fgedudb 为统一路径、fgedudb/fgedudb/fgedu 为库实例用户的完整命令链。
工程师落地时要把握三条主线:一是部署前把内核参数、资源限制、时间同步、目录权限做扎实,否则 observer 启动即报错;二是租户容量永远通过 Unit 规格与 Unit_NUM 调整,不直接动数据;三是扩容缩容、备份恢复、故障切换都依赖自动 Rebalance 与多数派协议,操作前先看副本分布与进度视图,避免破坏多数派。掌握本套风哥教程的命令与思路,即可胜任 OceanBase 社区版的日常部署与运维。
>
> 网上搜索风哥教程可以学习全套数据库教程
---
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/9664900/viewspace-3188305/ ,如需转载,请注明出处,否则将追究法律责任。