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_STATUS和GV$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. 定期进行副本同步测试