外观
DM 数据同步机制
数据同步的重要性
- 数据保护:防止数据丢失,实现数据冗余
- 高可用性:主库故障时可切换到备库,保证业务连续性
- 读写分离:主库处理写请求,备库处理读请求,提高系统整体性能
- 负载均衡:将读请求分发到多个备库,均衡系统负载
- 灾备解决方案:实现异地数据同步,提高系统抗灾能力
数据同步的核心要素
- 日志生成:主库生成重做日志
- 日志传输:将日志从主库传输到备库
- 日志应用:备库应用日志,更新数据
- 数据一致性:保证主备数据的一致性
- 故障检测:检测主库或备库故障
- 自动切换:主库故障时自动切换到备库
数据同步原理
1. 日志生成机制
DM数据库的日志生成机制基于预写日志(WAL,Write-Ahead Logging)原则,即先写日志,再写数据文件。
日志类型
- 重做日志(Redo Log):记录数据修改操作,用于恢复数据库
- 归档日志(Archive Log):重做日志的归档文件,用于数据同步和恢复
- 事务日志:记录事务的开始、提交、回滚等信息
日志生成过程
- 用户发起写操作
- 数据库引擎生成重做日志
- 将日志写入日志缓冲区
- 日志缓冲区定期或在事务提交时刷新到磁盘
- 生成归档日志(如果启用归档模式)
2. 日志传输机制
日志传输是数据同步的关键环节,负责将主库的日志传输到备库。
传输方式
- 实时传输:主库实时将日志传输到备库
- 批量传输:主库批量将日志传输到备库
- 归档传输:主库生成归档日志后,将归档日志传输到备库
传输协议
- TCP/IP协议:基于网络的日志传输
- 共享存储:基于共享存储的日志访问(如DMDSC)
- MAL系统:DM数据库内部的通信系统
传输流程
- 主库生成日志
- 日志通过MAL系统传输到备库
- 备库接收日志并写入本地日志缓冲区
- 备库将日志写入本地归档日志文件
3. 日志应用机制
日志应用是指备库将接收到的日志应用到本地数据库,实现数据同步。
应用模式
- 实时应用:备库实时应用接收到的日志
- 延迟应用:备库延迟一段时间后应用日志
- 手动应用:手动触发备库应用日志
应用流程
- 备库从本地归档日志文件读取日志
- 解析日志内容,提取数据修改操作
- 将修改操作应用到备库数据文件
- 更新备库的数据字典和索引
- 记录应用进度
4. 数据一致性保证
DM数据库通过多种机制保证主备数据的一致性:
- 预写日志机制:确保日志先于数据写入磁盘
- 日志序列号(LSN):通过LSN跟踪日志生成和应用进度
- 检查点机制:定期将内存中的修改刷新到磁盘
- 锁机制:保证并发访问的数据一致性
- 事务完整性:确保事务在主备库上的原子性
同步模式
DM数据库支持多种同步模式,适应不同的业务需求和网络环境。
1. 异步同步(ASYNC)
特点
- 主库写入日志后立即返回,不等待备库确认
- 备库异步接收和应用日志
- 主备数据可能存在延迟
- 系统性能最高
- 数据一致性要求较低
适用场景
- 网络带宽有限或延迟较高的场景
- 对数据一致性要求不高的场景
- 追求最高性能的场景
工作流程
- 主库执行事务并生成日志
- 主库将日志写入本地日志文件
- 主库向客户端返回事务成功
- 主库异步将日志传输到备库
- 备库接收并应用日志
2. 半同步同步(SEMISYNC)
特点
- 主库写入日志后,等待至少一个备库确认
- 备库接收日志并写入本地归档日志后确认
- 主备数据延迟较小
- 系统性能适中
- 数据一致性要求较高
适用场景
- 对数据一致性要求较高的场景
- 网络条件较好的场景
- 核心业务系统
工作流程
- 主库执行事务并生成日志
- 主库将日志写入本地日志文件
- 主库将日志传输到备库
- 备库接收日志并写入本地归档日志
- 备库向主库发送确认
- 主库收到至少一个备库确认后,向客户端返回事务成功
3. 全同步同步(FULLSYNC)
特点
- 主库写入日志后,等待所有备库确认
- 备库接收日志并写入本地归档日志后确认
- 主备数据几乎实时一致
- 系统性能最低
- 数据一致性要求极高
适用场景
- 对数据一致性要求极高的场景
- 金融、证券等核心业务系统
- 网络条件良好的场景
工作流程
- 主库执行事务并生成日志
- 主库将日志写入本地日志文件
- 主库将日志传输到所有备库
- 所有备库接收日志并写入本地归档日志
- 所有备库向主库发送确认
- 主库收到所有备库确认后,向客户端返回事务成功
4. 异步实时同步(ASYNCREAL)
特点
- 主库实时发送日志,备库实时应用
- 主库不等待备库确认
- 主备数据延迟较小
- 系统性能较高
- 兼顾性能和数据一致性
适用场景
- 需要实时数据同步的场景
- 对系统性能要求较高的场景
- 大多数核心业务系统
工作流程
- 主库执行事务并生成日志
- 主库将日志写入本地日志文件
- 主库向客户端返回事务成功
- 主库实时将日志传输到备库
- 备库实时接收并应用日志
5. 同步模式比较
| 同步模式 | 数据一致性 | 系统性能 | 网络要求 | 适用场景 |
|---|---|---|---|---|
| 异步同步 | 低 | 高 | 低 | 网络条件差,对一致性要求低 |
| 半同步同步 | 中 | 中 | 中 | 网络条件较好,对一致性要求较高 |
| 全同步同步 | 高 | 低 | 高 | 网络条件好,对一致性要求极高 |
| 异步实时同步 | 中高 | 高 | 中 | 网络条件较好,兼顾性能和一致性 |
数据同步架构
1. 主备架构
主备架构是最基本的数据同步架构,由一个主库和一个或多个备库组成。
架构图
特点
- 架构简单,易部署和管理
- 提供基本的高可用性和数据保护
- 支持读写分离
- 主库故障时可切换到备库
2. 级联架构
级联架构是指备库同时作为其他备库的主库,形成级联关系。
架构图
特点
- 减少主库的网络压力
- 适用于远距离数据同步
- 提高系统的扩展性
- 可构建复杂的灾备体系
3. 双向架构
双向架构是指两个库互相作为对方的备库,形成双向同步关系。
架构图
特点
- 适用于双中心部署
- 实现快速切换和负载均衡
- 提高系统的可用性和抗灾能力
- 需注意避免循环复制
数据同步配置
1. 主库配置
归档模式配置
sql
-- 启用归档模式
ALTER DATABASE ARCHIVELOG;
-- 配置归档路径
ALTER SYSTEM SET ARCH_DEST = '/dm/arch';日志传输配置
ini
-- dm.ini配置
DW_TYPE = PRIMARY
DW_MODE = ASYNC
DW_ERROR_TIME = 30
OGUID = 453331
-- dmarch.ini配置
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /dm/arch
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 0
[ARCHIVE_REMOTE1]
ARCH_TYPE = REMOTE
ARCH_DEST = STANDBY_DB
ARCH_INCOMING_PATH = /dm/arch_remote
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 02. 备库配置
备库角色配置
sql
-- 设置备库角色
ALTER DATABASE STANDBY;日志应用配置
ini
-- dm.ini配置
DW_TYPE = STANDBY
DW_MODE = ASYNC
DW_ERROR_TIME = 30
OGUID = 453331
-- dmarch.ini配置
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /dm/arch
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 0
[ARCHIVE_REMOTE1]
ARCH_TYPE = REMOTE
ARCH_DEST = PRIMARY_DB
ARCH_INCOMING_PATH = /dm/arch_remote
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 03. MAL系统配置
ini
-- dmmal.ini配置
[MAL_INST1]
MAL_INST_NAME = PRIMARY_DB
MAL_HOST = 192.168.1.101
MAL_PORT = 61141
MAL_INST_HOST = 192.168.0.101
MAL_INST_PORT = 5236
MAL_DW_PORT = 52141
[MAL_INST2]
MAL_INST_NAME = STANDBY_DB
MAL_HOST = 192.168.1.102
MAL_PORT = 61142
MAL_INST_HOST = 192.168.0.102
MAL_INST_PORT = 5236
MAL_DW_PORT = 52142数据同步监控
1. 监控视图
DM数据库提供了丰富的监控视图,用于监控数据同步状态。
核心监控视图
- V$DATAWATCH:查看DataWatch状态
- V$ARCH_FILE:查看归档文件信息
- V$ARCH_SEND_STATUS:查看日志发送状态
- V$ARCH_APPLY_STATUS:查看日志应用状态
- V$MAL_INS:查看MAL系统状态
- V$INSTANCE:查看实例状态
监控示例
sql
-- 查看DataWatch状态
SELECT * FROM V$DATAWATCH;
-- 查看日志发送状态
SELECT * FROM V$ARCH_SEND_STATUS;
-- 查看日志应用状态
SELECT * FROM V$ARCH_APPLY_STATUS;
-- 查看MAL系统状态
SELECT * FROM V$MAL_INS;2. 监控指标
关键监控指标
- 日志发送延迟:主库发送日志到备库的延迟
- 日志应用延迟:备库应用日志的延迟
- 日志发送速率:主库发送日志的速率
- 日志应用速率:备库应用日志的速率
- 日志积压量:备库未应用的日志量
- 同步状态:主备同步状态
监控方法
- 使用DM管理工具监控
- 使用SQL查询监控视图
- 使用第三方监控工具(如Zabbix、Prometheus)
- 配置告警,及时发现同步异常
数据同步常见问题
1. 主备数据不一致
原因
- 网络故障导致日志传输中断
- 备库应用日志失败
- 主库或备库参数配置错误
- 硬件故障导致日志损坏
解决方法
- 检查网络连接,修复网络故障
- 查看备库日志,分析应用失败原因
- 检查主备参数配置,确保一致
- 使用主库备份恢复备库
- 使用ALTER DATABASE STANDBY REFRESH命令刷新备库
2. 日志传输延迟
原因
- 网络带宽不足
- 网络延迟过高
- 主库负载过高
- 备库接收或应用日志速度慢
解决方法
- 增加网络带宽
- 优化网络配置,减少延迟
- 优化主库性能,减少日志生成量
- 优化备库性能,提高日志应用速度
- 调整同步模式,如从全同步改为半同步
3. 备库应用日志失败
原因
- 日志文件损坏
- 备库数据文件损坏
- 主备版本不一致
- 备库参数配置错误
解决方法
- 检查日志文件完整性
- 检查备库数据文件完整性
- 确保主备版本一致
- 检查备库参数配置
- 重新初始化备库
4. 主库无法发送日志
原因
- MAL系统配置错误
- 备库未启动
- 备库无法访问
- 主库参数配置错误
解决方法
- 检查MAL系统配置
- 确保备库已启动
- 检查备库网络连接
- 检查主库参数配置
- 重启MAL系统或数据库实例
数据同步最佳实践
1. 部署最佳实践
- 网络配置:使用独立网卡分离业务网络和同步网络
- 硬件配置:主备库配置建议相同或相近
- 存储配置:使用RAID 10等冗余存储方案
- 同步模式:根据业务需求选择合适的同步模式
- 监控配置:配置完善的监控和告警
2. 配置最佳实践
- 参数优化:根据系统负载优化同步参数
- 日志配置:配置合理的日志大小和归档策略
- MAL配置:优化MAL系统配置,提高通信效率
- OGUID配置:确保集群OGUID唯一
3. 维护最佳实践
- 定期备份:定期备份主库和备库
- 定期监控:监控同步状态和性能
- 定期测试:测试故障切换和数据一致性
- 定期清理:清理过期的归档日志
- 文档管理:维护详细的同步配置文档
4. 性能优化
- SQL优化:优化SQL语句,减少日志生成量
- 索引优化:合理设计索引,提高查询性能
- 缓存优化:优化缓冲区大小,提高缓存命中率
- I/O优化:优化存储参数,提高I/O性能
- 网络优化:优化网络配置,提高日志同步效率
常见问题(FAQ)
Q1: 如何选择合适的同步模式?
A1: 选择同步模式需要考虑以下因素:
业务对数据一致性的要求
网络带宽和延迟
系统性能要求
可用性要求
异步同步:适用于网络条件差,对一致性要求低的场景
半同步同步:适用于网络条件较好,对一致性要求较高的场景
全同步同步:适用于网络条件好,对一致性要求极高的场景
异步实时同步:适用于兼顾性能和一致性的场景
Q2: 如何处理主备数据不一致?
A2: 处理主备数据不一致的方法:
- 检查数据不一致的原因
- 使用主库的备份恢复备库
- 使用ALTER DATABASE STANDBY REFRESH命令刷新备库
- 重新初始化备库
- 检查并修复网络或硬件故障
Q3: 如何监控数据同步状态?
A3: 监控数据同步状态的方法:
- 使用DM管理工具的监控功能
- 查询V$DATAWATCH、V$ARCH_SEND_STATUS等监控视图
- 使用第三方监控工具
- 配置告警,及时发现同步异常
Q4: 如何优化数据同步性能?
A4: 优化数据同步性能的方法:
- 优化SQL语句,减少日志生成量
- 优化网络配置,提高日志传输效率
- 优化备库性能,提高日志应用速度
- 调整同步模式,平衡性能和一致性
- 配置合理的日志大小和归档策略
Q5: 数据同步和数据备份有什么区别?
A5: 数据同步和数据备份的区别:
- 数据同步:实时或准实时将数据从主库复制到备库,用于高可用和读写分离
- 数据备份:定期将数据备份到其他存储介质,用于数据恢复
- 数据同步提供业务连续性,数据备份提供数据保护
- 数据同步是实时的,数据备份是定期的
版本差异说明
| 版本 | 主要变化 |
|---|---|
| DM 7 | 支持基本的数据同步功能,最多支持一主一备 |
| DM 8 | 增强了数据同步功能,支持一主多备、级联备库等多种部署模式 |
| DM 8.1 | 优化了数据同步性能和可靠性,支持更多的同步模式和故障检测机制 |
在配置和使用数据同步时,需要注意以下几点:
- 选择合适的同步模式和部署架构
- 配置合理的参数和网络
- 定期监控同步状态和性能
- 制定完善的故障处理和恢复策略
- 定期进行测试和演练
通过合理的配置和维护,可以充分发挥数据同步的优势,提高系统的可用性和数据保护能力,为业务提供可靠的数据服务。
