Skip to content

OceanBase 副本同步管理

副本同步架构

1. 复制链路

主从复制架构

  • 主副本接收写入请求
  • 生成Redo日志
  • 发送Redo日志到从副本
  • 从副本应用Redo日志
  • 反馈确认信息给主副本

复制组件

  • LogService:负责Redo日志的生成、存储和复制
  • PaxosGroup:负责Paxos协议的执行
  • ReplicaService:负责副本的管理和同步

2. 同步流程

写入流程

  1. 客户端发送写入请求到主副本
  2. 主副本执行写入操作,生成Redo日志
  3. 主副本通过Paxos协议将Redo日志复制到从副本
  4. 从副本接收并存储Redo日志
  5. 从副本应用Redo日志到内存表
  6. 从副本向主副本发送确认
  7. 主副本收到多数派确认后,返回成功给客户端

同步流程

  1. 主副本生成Redo日志
  2. 主副本将Redo日志发送到从副本
  3. 从副本接收Redo日志并写入本地日志文件
  4. 从副本异步应用Redo日志到内存表
  5. 从副本定期生成SSTable

副本同步状态

1. 副本同步状态类型

ACTIVE

  • 副本正常,与主副本保持同步
  • 可以处理读请求
  • 是健康的副本状态

SYNCING

  • 副本正在同步数据
  • 与主副本存在一定延迟
  • 可以处理读请求,但数据可能不是最新的

INACTIVE

  • 副本不可用
  • 无法与主副本同步
  • 可能是因为网络问题或节点故障

DELETING

  • 副本正在被删除
  • 不再参与同步
  • 数据正在清理中

2. 查看副本同步状态

sql
-- 查看所有副本状态
SELECT * FROM oceanbase.GV$OB_REPLICA_STATUS;

-- 查看特定租户的副本状态
SELECT * FROM oceanbase.GV$OB_REPLICA_STATUS WHERE tenant_id = 1001;

-- 查看同步延迟的副本
SELECT * FROM oceanbase.GV$OB_REPLICA_STATUS WHERE status = 'SYNCING';

副本同步延迟管理

1. 同步延迟定义

延迟原因

  • 网络带宽不足
  • 网络延迟高
  • 从副本负载过高
  • 主副本写入压力大
  • 存储性能瓶颈

延迟影响

  • 读一致性问题
  • 故障切换时间延长
  • 数据丢失风险增加

2. 监控同步延迟

查看同步延迟

sql
-- 查看副本同步延迟
SELECT * FROM oceanbase.GV$OB_REPLICA_SYNC_STATUS;

-- 查看延迟超过1秒的副本
SELECT * FROM oceanbase.GV$OB_REPLICA_SYNC_STATUS WHERE sync_delay > 1000000;

-- 查看特定租户的同步延迟
SELECT * FROM oceanbase.GV$OB_REPLICA_SYNC_STATUS WHERE tenant_id = 1001;

监控指标

指标名称说明正常范围告警阈值
sync_delay副本同步延迟时间(微秒)< 100ms> 500ms 持续 5 分钟
log_disk_used_percentage日志盘使用率< 80%> 90% 持续 5 分钟
log_sync_batch_count日志同步批次数量-> 1000 持续 5 分钟

3. 同步延迟处理

网络优化

sql
-- 调整网络参数
ALTER SYSTEM SET replication_retry_interval = 500; -- 减少重试间隔
ALTER SYSTEM SET replication_timeout = 3000; -- 减少超时时间
ALTER SYSTEM SET redo_transport_compress = 'ON'; -- 启用日志压缩

负载均衡

sql
-- 迁移热点副本
ALTER SYSTEM MIGRATE REPLICA table_name PARTITION partition_name TO '10.0.0.4:2882';

-- 调整从副本负载
ALTER SYSTEM SET replica_thread_count = 8; -- 增加副本线程数

存储优化

sql
-- 调整存储参数
ALTER SYSTEM SET minor_merge_concurrency = 2; -- 调整合并并发度
ALTER SYSTEM SET major_freeze_duty_time = '03:00'; -- 在低峰期执行合并

资源扩容

sql
-- 增加节点资源
ALTER RESOURCE UNIT unit_config SET max_cpu = 8, min_cpu = 4, max_memory = '16G', min_memory = '8G';

-- 增加资源池单元数量
ALTER RESOURCE POOL resource_pool1 UNIT_NUM = 4;

副本同步配置

1. 复制模式配置

设置复制模式

sql
-- 设置租户级复制模式
ALTER TENANT tenant1 SET replication_mode = 'sync';

-- 设置数据库级复制模式
ALTER DATABASE db1 SET replication_mode = 'async';

-- 设置表级复制模式
ALTER TABLE table1 SET replication_mode = 'semi_sync';

复制模式说明

模式特点适用场景
同步复制强一致性,性能较低核心业务,数据一致性要求高
异步复制性能高,可能丢失数据非核心业务,性能要求高
半同步复制平衡一致性和性能一般业务,对一致性和性能有一定要求

2. 同步参数配置

核心同步参数

sql
-- 查看同步相关参数
SHOW PARAMETERS LIKE '%replication%';
SHOW PARAMETERS LIKE '%redo%';

-- 调整Redo日志缓冲区大小
ALTER SYSTEM SET redo_buffer_size = '128M';

-- 调整日志同步批次大小
ALTER SYSTEM SET log_sync_batch_size = 65536;

-- 调整Paxos超时时间
ALTER SYSTEM SET paxos_timeout = '5000';

同步线程配置

sql
-- 调整副本同步线程数
ALTER SYSTEM SET replica_thread_count = 8;

-- 调整日志IO线程数
ALTER SYSTEM SET log_io_thread_count = 4;

-- 调整日志同步并发度
ALTER SYSTEM SET log_sync_concurrency = 4;

副本同步异常处理

1. 同步异常类型

网络异常

  • 网络中断
  • 网络延迟过高
  • 网络丢包

节点异常

  • 节点宕机
  • 节点负载过高
  • 节点资源不足

存储异常

  • 磁盘空间不足
  • 磁盘IO性能瓶颈
  • 文件系统损坏

配置异常

  • 复制模式配置错误
  • 同步参数配置不合理
  • 副本分布不均衡

2. 同步异常诊断

查看同步状态

sql
-- 查看副本状态
SELECT * FROM oceanbase.GV$OB_REPLICA_STATUS WHERE status != 'ACTIVE';

-- 查看同步延迟
SELECT * FROM oceanbase.GV$OB_REPLICA_SYNC_STATUS WHERE sync_delay > 1000000;

-- 查看Paxos状态
SELECT * FROM oceanbase.GV$OB_PAXOS_STATUS;

查看日志信息

bash
# 查看OBServer日志
tail -n 200 /home/admin/oceanbase/log/observer.log | grep -i error

# 查看Paxos日志
tail -n 200 /home/admin/oceanbase/log/paxos.log | grep -i error

# 查看复制日志
tail -n 200 /home/admin/oceanbase/log/replica.log | grep -i error

3. 同步异常恢复

网络异常恢复

  • 修复网络连接
  • 检查网络配置
  • 优化网络架构
  • 调整网络参数

节点异常恢复

  • 重启异常节点
  • 迁移副本到健康节点
  • 增加节点资源
  • 优化节点配置

存储异常恢复

  • 清理磁盘空间
  • 优化存储性能
  • 修复文件系统
  • 更换故障磁盘

配置异常恢复

  • 调整复制模式
  • 优化同步参数
  • 重新分布副本
  • 重启复制服务

副本同步最佳实践

1. 复制模式选择

核心业务

  • 使用同步复制模式
  • 保证数据强一致性
  • 容忍一定的性能开销

非核心业务

  • 使用异步或半同步复制模式
  • 优先保证性能
  • 容忍少量数据丢失风险

混合业务

  • 根据业务重要性选择不同的复制模式
  • 核心表使用同步复制
  • 非核心表使用异步复制

2. 同步参数优化

网络优化

  • 启用Redo日志压缩
  • 调整日志同步批次大小
  • 优化网络连接
  • 配置合理的超时参数

存储优化

  • 使用高性能存储设备
  • 优化存储参数
  • 合理规划合并时间
  • 定期清理过期数据

资源优化

  • 为副本分配足够的资源
  • 避免资源竞争
  • 实现资源隔离
  • 定期进行资源评估

3. 同步监控

监控指标

  • 副本同步状态
  • 同步延迟时间
  • 日志生成速率
  • 日志应用速率
  • Paxos状态

告警配置

  • 配置同步延迟告警
  • 配置副本状态告警
  • 配置Paxos异常告警
  • 配置日志盘使用率告警

定期检查

  • 每日检查副本同步状态
  • 每周分析同步延迟趋势
  • 每月进行同步性能评估
  • 每季度进行同步配置优化

4. 同步延迟预防

容量规划

  • 提前规划存储容量
  • 预留足够的网络带宽
  • 考虑业务增长趋势
  • 定期进行容量评估

负载均衡

  • 合理分布副本
  • 避免热点副本
  • 实现负载均衡
  • 定期调整副本分布

性能优化

  • 优化写入模式
  • 减少大事务
  • 优化SQL语句
  • 定期进行性能调优

副本同步案例分析

案例一:副本同步延迟过高

问题现象

  • 监控系统告警:副本同步延迟超过500ms持续5分钟
  • 从副本数据落后于主副本
  • 影响读一致性

问题分析

  1. 查看同步延迟

    sql
    SELECT * FROM oceanbase.GV$OB_REPLICA_SYNC_STATUS WHERE sync_delay > 500000;
  2. 查看节点负载

    sql
    SELECT * FROM oceanbase.GV$OB_SERVER_STAT WHERE stat_id = 'cpu_total';
  3. 查看网络状态

    sql
    SELECT * FROM oceanbase.GV$OB_NETWORK_STATUS;
  4. 发现问题:从节点CPU使用率超过90%,网络延迟高

解决方案

  1. 优化从节点资源

    sql
    ALTER RESOURCE UNIT unit_config SET max_cpu = 8, min_cpu = 4;
  2. 调整同步参数

    sql
    ALTER SYSTEM SET replication_retry_interval = 500;
    ALTER SYSTEM SET replication_timeout = 3000;
  3. 优化网络

    • 增加网络带宽
    • 优化网络拓扑
    • 启用日志压缩
  4. 监控效果:观察同步延迟是否下降

案例二:副本同步中断

问题现象

  • 监控系统告警:副本状态变为INACTIVE
  • 从副本无法与主副本同步
  • 影响数据一致性

问题分析

  1. 查看副本状态

    sql
    SELECT * FROM oceanbase.GV$OB_REPLICA_STATUS WHERE status = 'INACTIVE';
  2. 查看节点状态

    sql
    SELECT * FROM oceanbase.GV$OB_SERVER WHERE status != 'ACTIVE';
  3. 查看日志信息

    bash
    tail -n 200 /home/admin/oceanbase/log/observer.log | grep -i error
  4. 发现问题:从节点网络连接中断,无法与主节点通信

解决方案

  1. 修复网络连接

    • 检查网络线缆
    • 检查交换机状态
    • 修复网络配置
  2. 重启复制服务

    sql
    ALTER SYSTEM RESTART REPLICA SERVICE ON '10.0.0.3:2882';
  3. 恢复副本同步

    sql
    ALTER SYSTEM SYNC REPLICA table_name PARTITION partition_name;
  4. 验证同步状态

    sql
    SELECT * FROM oceanbase.GV$OB_REPLICA_STATUS WHERE svr_ip = '10.0.0.3';

副本同步管理工具

1. 内置管理工具

SQL语句管理

sql
-- 查看副本同步状态
SELECT * FROM oceanbase.GV$OB_REPLICA_SYNC_STATUS;

-- 手动同步副本
ALTER SYSTEM SYNC REPLICA table_name PARTITION partition_name;

-- 重启复制服务
ALTER SYSTEM RESTART REPLICA SERVICE ON '10.0.0.3:2882';

-- 调整复制模式
ALTER TENANT tenant1 SET replication_mode = 'sync';

OCP管理

  • 登录OCP控制台
  • 进入「租户管理」->「租户列表」
  • 选择要管理的租户
  • 进入「副本管理」标签页
  • 查看和管理副本同步

2. 第三方工具

Prometheus + Grafana

  • 配置Prometheus采集副本同步指标
  • 创建Grafana仪表盘监控副本同步
  • 设置同步延迟告警

自定义监控脚本

  • 使用Shell或Python脚本监控副本同步
  • 定期检查同步状态
  • 发送告警通知
  • 自动执行恢复操作

常见问题及解决方案

1. 同步延迟持续增加

问题描述

  • 副本同步延迟持续增加
  • 从副本无法跟上主副本的写入速度
  • 影响数据一致性

解决方案

  • 增加从副本资源
  • 优化网络带宽
  • 调整复制模式为异步
  • 优化主副本写入性能

2. 副本同步中断

问题描述

  • 副本同步突然中断
  • 副本状态变为INACTIVE
  • 无法恢复同步

解决方案

  • 检查网络连接
  • 重启OBServer进程
  • 重新初始化副本
  • 迁移副本到健康节点

3. Paxos选举频繁

问题描述

  • Paxos频繁选举主副本
  • 影响副本同步效率
  • 导致写入性能下降

解决方案

  • 调整Paxos超时参数
  • 优化网络稳定性
  • 确保多数副本可用
  • 检查节点资源使用情况

4. 日志盘空间不足

问题描述

  • 日志盘使用率接近100%
  • 影响副本同步
  • 可能导致节点故障

解决方案

  • 清理过期日志
  • 扩展日志盘容量
  • 调整日志保留策略
  • 优化合并参数

常见问题(FAQ)

Q1: OceanBase的副本同步机制是什么?

A1: OceanBase使用Multi-Paxos协议实现副本同步,每个分区有一个主副本和多个从副本。主副本负责处理写入请求,生成Redo日志,通过Paxos协议将日志复制到从副本,从副本应用日志并确认,多数派确认机制保证数据一致性。

Q2: 如何查看OceanBase副本同步状态?

A2: 可以通过以下方式查看副本同步状态:

  1. 使用SQL语句查询GV$OB_REPLICA_STATUSGV$OB_REPLICA_SYNC_STATUS视图
  2. 通过OCP控制台查看副本同步状态
  3. 使用第三方监控工具查看同步指标

Q3: 副本同步延迟的原因有哪些?

A3: 副本同步延迟的原因包括:

  • 网络带宽不足
  • 网络延迟高
  • 从副本负载过高
  • 主副本写入压力大
  • 存储性能瓶颈
  • 复制模式选择不当

Q4: 如何优化副本同步性能?

A4: 优化副本同步性能的方法:

  1. 选择合适的复制模式
  2. 优化同步参数配置
  3. 为副本分配足够的资源
  4. 优化网络和存储性能
  5. 实现负载均衡
  6. 定期进行性能调优

Q5: 如何处理副本同步延迟?

A5: 处理副本同步延迟的方法:

  1. 增加从副本资源
  2. 优化网络带宽
  3. 调整复制模式
  4. 优化存储性能
  5. 迁移热点副本
  6. 优化写入模式

Q6: 如何配置OceanBase的复制模式?

A6: 可以通过SQL语句配置OceanBase的复制模式:

sql
-- 租户级配置
ALTER TENANT tenant1 SET replication_mode = 'sync';

-- 数据库级配置
ALTER DATABASE db1 SET replication_mode = 'async';

-- 表级配置
ALTER TABLE table1 SET replication_mode = 'semi_sync';

Q7: 副本同步的监控指标有哪些?

A7: 副本同步的核心监控指标包括:

  • 副本同步状态
  • 同步延迟时间
  • 日志生成速率
  • 日志应用速率
  • Paxos状态
  • 日志盘使用率

Q8: 如何保证副本同步的可靠性?

A8: 保证副本同步可靠性的方法:

  1. 使用同步复制模式
  2. 配置合理的副本数量
  3. 确保多数副本可用
  4. 优化网络稳定性
  5. 定期监控副本同步状态
  6. 建立完善的告警机制
  7. 定期进行副本同步测试