外观
OceanBase 副本同步管理
副本同步架构
1. 复制链路
主从复制架构
- 主副本接收写入请求
- 生成Redo日志
- 发送Redo日志到从副本
- 从副本应用Redo日志
- 反馈确认信息给主副本
复制组件
- LogService:负责Redo日志的生成、存储和复制
- PaxosGroup:负责Paxos协议的执行
- ReplicaService:负责副本的管理和同步
2. 同步流程
写入流程
- 客户端发送写入请求到主副本
- 主副本执行写入操作,生成Redo日志
- 主副本通过Paxos协议将Redo日志复制到从副本
- 从副本接收并存储Redo日志
- 从副本应用Redo日志到内存表
- 从副本向主副本发送确认
- 主副本收到多数派确认后,返回成功给客户端
同步流程
- 主副本生成Redo日志
- 主副本将Redo日志发送到从副本
- 从副本接收Redo日志并写入本地日志文件
- 从副本异步应用Redo日志到内存表
- 从副本定期生成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 error3. 同步异常恢复
网络异常恢复
- 修复网络连接
- 检查网络配置
- 优化网络架构
- 调整网络参数
节点异常恢复
- 重启异常节点
- 迁移副本到健康节点
- 增加节点资源
- 优化节点配置
存储异常恢复
- 清理磁盘空间
- 优化存储性能
- 修复文件系统
- 更换故障磁盘
配置异常恢复
- 调整复制模式
- 优化同步参数
- 重新分布副本
- 重启复制服务
副本同步最佳实践
1. 复制模式选择
核心业务
- 使用同步复制模式
- 保证数据强一致性
- 容忍一定的性能开销
非核心业务
- 使用异步或半同步复制模式
- 优先保证性能
- 容忍少量数据丢失风险
混合业务
- 根据业务重要性选择不同的复制模式
- 核心表使用同步复制
- 非核心表使用异步复制
2. 同步参数优化
网络优化
- 启用Redo日志压缩
- 调整日志同步批次大小
- 优化网络连接
- 配置合理的超时参数
存储优化
- 使用高性能存储设备
- 优化存储参数
- 合理规划合并时间
- 定期清理过期数据
资源优化
- 为副本分配足够的资源
- 避免资源竞争
- 实现资源隔离
- 定期进行资源评估
3. 同步监控
监控指标
- 副本同步状态
- 同步延迟时间
- 日志生成速率
- 日志应用速率
- Paxos状态
告警配置
- 配置同步延迟告警
- 配置副本状态告警
- 配置Paxos异常告警
- 配置日志盘使用率告警
定期检查
- 每日检查副本同步状态
- 每周分析同步延迟趋势
- 每月进行同步性能评估
- 每季度进行同步配置优化
4. 同步延迟预防
容量规划
- 提前规划存储容量
- 预留足够的网络带宽
- 考虑业务增长趋势
- 定期进行容量评估
负载均衡
- 合理分布副本
- 避免热点副本
- 实现负载均衡
- 定期调整副本分布
性能优化
- 优化写入模式
- 减少大事务
- 优化SQL语句
- 定期进行性能调优
副本同步案例分析
案例一:副本同步延迟过高
问题现象
- 监控系统告警:副本同步延迟超过500ms持续5分钟
- 从副本数据落后于主副本
- 影响读一致性
问题分析
查看同步延迟:
sqlSELECT * FROM oceanbase.GV$OB_REPLICA_SYNC_STATUS WHERE sync_delay > 500000;查看节点负载:
sqlSELECT * FROM oceanbase.GV$OB_SERVER_STAT WHERE stat_id = 'cpu_total';查看网络状态:
sqlSELECT * FROM oceanbase.GV$OB_NETWORK_STATUS;发现问题:从节点CPU使用率超过90%,网络延迟高
解决方案
优化从节点资源:
sqlALTER RESOURCE UNIT unit_config SET max_cpu = 8, min_cpu = 4;调整同步参数:
sqlALTER SYSTEM SET replication_retry_interval = 500; ALTER SYSTEM SET replication_timeout = 3000;优化网络:
- 增加网络带宽
- 优化网络拓扑
- 启用日志压缩
监控效果:观察同步延迟是否下降
案例二:副本同步中断
问题现象
- 监控系统告警:副本状态变为INACTIVE
- 从副本无法与主副本同步
- 影响数据一致性
问题分析
查看副本状态:
sqlSELECT * FROM oceanbase.GV$OB_REPLICA_STATUS WHERE status = 'INACTIVE';查看节点状态:
sqlSELECT * FROM oceanbase.GV$OB_SERVER WHERE status != 'ACTIVE';查看日志信息:
bashtail -n 200 /home/admin/oceanbase/log/observer.log | grep -i error发现问题:从节点网络连接中断,无法与主节点通信
解决方案
修复网络连接:
- 检查网络线缆
- 检查交换机状态
- 修复网络配置
重启复制服务:
sqlALTER SYSTEM RESTART REPLICA SERVICE ON '10.0.0.3:2882';恢复副本同步:
sqlALTER SYSTEM SYNC REPLICA table_name PARTITION partition_name;验证同步状态:
sqlSELECT * 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: 可以通过以下方式查看副本同步状态:
- 使用SQL语句查询
GV$OB_REPLICA_STATUS和GV$OB_REPLICA_SYNC_STATUS视图 - 通过OCP控制台查看副本同步状态
- 使用第三方监控工具查看同步指标
Q3: 副本同步延迟的原因有哪些?
A3: 副本同步延迟的原因包括:
- 网络带宽不足
- 网络延迟高
- 从副本负载过高
- 主副本写入压力大
- 存储性能瓶颈
- 复制模式选择不当
Q4: 如何优化副本同步性能?
A4: 优化副本同步性能的方法:
- 选择合适的复制模式
- 优化同步参数配置
- 为副本分配足够的资源
- 优化网络和存储性能
- 实现负载均衡
- 定期进行性能调优
Q5: 如何处理副本同步延迟?
A5: 处理副本同步延迟的方法:
- 增加从副本资源
- 优化网络带宽
- 调整复制模式
- 优化存储性能
- 迁移热点副本
- 优化写入模式
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: 保证副本同步可靠性的方法:
- 使用同步复制模式
- 配置合理的副本数量
- 确保多数副本可用
- 优化网络稳定性
- 定期监控副本同步状态
- 建立完善的告警机制
- 定期进行副本同步测试
