OceanBase分布式架构概述
OceanBase是蚂蚁集团自研的分布式关系型数据库,属于国产数据库阵营中综合能力领先的方案。其架构设计融合了分布式存储、Paxos多副本一致性、分层存储引擎等核心技术,在金融级场景中支撑了支付宝双11峰值交易。与其他NoSQL选型应用方案不同,OceanBase保持完全的MySQL/Oracle兼容性,业务迁移成本较低。
OceanBase的核心架构分层:Zone是物理隔离单元(通常对应机房或机架),Server是单机节点,Zone内包含多个Server。每个Server上运行多个Unit(资源单元),Unit是CPU/内存资源的逻辑划分。租户(Tenant)是资源隔离的基本单位,类似传统数据库的实例概念,每个租户拥有独立的Unit资源池。
数据组织层级:Database -> Table -> Partition -> Replica。Partition是数据分片的基本单位,每个Partition通过Paxos协议维护多个副本(默认3副本),分布在不同的Zone中。
-- 查看集群拓扑结构
SELECT zone, svr_ip, svr_port, status, start_service_time
FROM oceanbase.DBA_OB_SERVERS;
-- 查看租户列表
SELECT tenant_id, tenant_name, tenant_type, compatibility_mode
FROM oceanbase.DBA_OB_TENANTS;
-- 查看资源分配
SELECT tenant_name, unit_config_id, unit_config_name,
max_cpu, min_cpu, max_memory/1024/1024/1024 AS max_mem_gb,
min_memory/1024/1024/1024 AS min_mem_gb
FROM oceanbase.DBA_OB_UNIT_CONFIGS;
-- 查看分区分布
SELECT table_name, partition_id, zone, svr_ip, role, member_status
FROM oceanbase.DBA_OB_TABLE_LOCATIONS
WHERE table_name = 't_order'
LIMIT 20;
Paxos多副本一致性机制
OceanBase使用Multi-Paxos协议实现副本间数据一致性。每个Partition的一个副本作为Leader负责读写,其余副本作为Follower同步数据。Leader通过选举产生,写入需要获得多数派(N/2+1)副本确认即可返回成功。
与传统主从复制不同,Paxos保证了在少数派故障时数据零丢失。以3副本为例,任意1个副本宕机不影响服务,任意2个副本宕机仍能保证数据不丢失(但服务不可用直到至少1个副本恢复)。
-- 查看Leader分布情况
SELECT tenant_id, table_name, partition_id,
svr_ip AS leader_ip, zone AS leader_zone
FROM oceanbase.DBA_OB_TABLE_LOCATIONS
WHERE role = 'LEADER'
ORDER BY tenant_id, table_name;
-- 手动切换Leader到指定Zone(用于容灾演练)
ALTER SYSTEM SWITCH REPLICA
partition_id='p0'
table='t_order'
database='order_db'
leader='zone2';
-- 查看Paxos同步状态
SELECT table_name, partition_id, svr_ip, role,
replica_type, data_size, log_size
FROM oceanbase.DBA_OB_TABLE_LOCATIONS
WHERE table_name = 't_order'
AND partition_id = 0;
写入流程:应用发起写入 -> Leader接收请求并生成redo日志 -> 日志并行发送给所有Follower -> 多数派持久化日志后Leader返回成功 -> 后台异步将日志应用到memtable -> 通过转储和合并将数据持久化到SSTable。
分区策略与负载均衡
OceanBase通过Partition将大表水平拆分到多个节点上,实现分布式存储和并行查询。分区策略支持Range分区、List分区和Hash分区:
-- Hash分区: 适合等值查询
CREATE TABLE t_order (
order_id BIGINT NOT NULL,
user_id BIGINT NOT NULL,
amount DECIMAL(10,2),
status VARCHAR(20),
create_time DATETIME,
PRIMARY KEY (order_id, user_id)
) PARTITION BY HASH(user_id) PARTITIONS 64;
-- Range分区: 适合范围查询,如按时间分区
CREATE TABLE t_order_log (
id BIGINT NOT NULL,
order_id BIGINT,
log_type VARCHAR(50),
create_time DATETIME NOT NULL,
content TEXT,
PRIMARY KEY (id, create_time)
) PARTITION BY RANGE(TO_DAYS(create_time)) (
PARTITION p202601 VALUES LESS THAN (TO_DAYS('2026-02-01')),
PARTITION p202602 VALUES LESS THAN (TO_DAYS('2026-03-01')),
PARTITION p202603 VALUES LESS THAN (TO_DAYS('2026-04-01')),
PARTITION p202604 VALUES LESS THAN (TO_DAYS('2026-05-01')),
PARTITION p_max VALUES LESS THAN MAXVALUE
);
-- 组合分区: 先按Range再按Hash二次拆分
CREATE TABLE t_transaction (
tx_id BIGINT NOT NULL,
tx_date DATE NOT NULL,
account_id BIGINT,
amount DECIMAL(12,2),
PRIMARY KEY (tx_id, tx_date)
) PARTITION BY RANGE(TO_DAYS(tx_date))
SUBPARTITION BY HASH(account_id) SUBPARTITIONS 8 (
PARTITION p2026q3 VALUES LESS THAN (TO_DAYS('2026-10-01')),
PARTITION p2026q4 VALUES LESS THAN (TO_DAYS('2027-01-01'))
);
OceanBase内置自动负载均衡机制,RootService服务持续监控各节点的资源使用情况(CPU、内存、磁盘),当检测到不均衡时自动迁移Partition:
-- 查看资源使用情况
SELECT svr_ip, zone,
cpu_total, cpu_assigned, cpu_assigned_percent,
mem_total/1024/1024/1024 AS mem_total_gb,
mem_assigned/1024/1024/1024 AS mem_assigned_gb
FROM oceanbase.GV$OB_SERVERS;
-- 查看迁移任务
SELECT task_id, tenant_id, table_name, partition_id,
src_svr_ip, dst_svr_ip, task_type, task_status
FROM oceanbase.DBA_OB_BALANCE_JOBS
WHERE task_status != 'SUCCESS';
-- 手动触发负载均衡
ALTER SYSTEM START BALANCE TASK;
-- 暂停负载均衡(维护窗口期)
ALTER SYSTEM STOP BALANCE TASK;
高可用容灾与备份恢复
OceanBase的容灾能力基于多Zone部署。同城三机房(3 Zone同城市)可抵御单机房故障,三地五中心(5 Zone跨城市)可抵御单城市级灾难。
-- 三地五中心部署拓扑
-- Zone1: 北京机房A (主)
-- Zone2: 北京机房B
-- Zone3: 上海机房C
-- Zone4: 深圳机房D
-- Zone5: 广州机房E
-- 设置租户的primary_zone(优先Leader分布)
ALTER TENANT order_tenant SET primary_zone='zone1;zone2,zone3';
-- Locality定义副本分布策略
-- F=全功能副本, R=只读副本, L=日志副本
ALTER TENANT order_tenant SET locality=
'zone1:F,zone2:F,zone3:F,zone4:F,zone5:F';
-- RPO=0的跨城容灾切换
-- 将primary_zone切换到备城市
ALTER TENANT order_tenant SET primary_zone='zone4';
-- 确认所有Leader已迁移
SELECT zone, COUNT(*) AS leader_count
FROM oceanbase.DBA_OB_TABLE_LOCATIONS
WHERE role = 'LEADER' AND tenant_id = 1001
GROUP BY zone;
-- 物理备份配置(NFS存储备份文件)
ALTER SYSTEM SET backup_dest='file:///data/backup/oceanbase';
-- 设置全量备份策略(每天增量,每周全量)
ALTER SYSTEM SET data_backup_dest='file:///data/backup/data';
ALTER SYSTEM SET backup_archive_dest='file:///data/backup/archive';
ALTER SYSTEM SET backup_concurrency=10;
-- 手动触发全量备份
ALTER SYSTEM BACKUP DATABASE;
-- 查看备份进度
SELECT * FROM oceanbase.CDB_OB_BACKUP_JOBS
WHERE status = 'INPROGRESS';
-- 按时间点恢复(PITR)
ALTER SYSTEM RESTORE order_tenant FROM 'file:///data/backup/oceanbase'
UNTIL TIME='2026-09-10 14:30:00';
OceanBase的备份恢复支持秒级RPO和分钟级RTO。物理备份采用全量+增量的方式,日志归档持续进行。恢复时可以指定任意时间点,适用于误操作回滚等场景。与传统MySQL数据备份恢复方案相比,OceanBase的备份恢复在分布式环境下的一致性保证更为完善,无需额外工具协调多个分片的一致性。
与OceanBase兼容性方面,MySQL模式租户支持绝大多数MySQL协议和语法,包括连接池、预处理语句、事务隔离级别等。Oracle模式租户提供PL/SQL兼容,支持存储过程、触发器、包等Oracle特性,适合传统Oracle系统向国产数据库迁移的场景。
原创文章,作者:小编,如若转载,请注明出处:https://www.yunthe.com/oceanbase-guo-chan-shu-ju-ku-jia-gou-jie-xi-fen-bu-shi-cun/