外观
DM 数据守护(DMDataWatch)
DMDataWatch的特点
- 基于日志复制:通过重做日志实现主备数据同步
- 多种部署模式:支持一主一备、一主多备、级联备库等
- 自动故障切换:主库故障时自动切换到备库
- 读写分离:支持主库写、备库读的读写分离架构
- 灵活的同步策略:支持异步、半同步、全同步等同步模式
- 数据一致性:保证主备数据的一致性
- 易部署和管理:提供丰富的管理工具和监控视图
- 与DMDSC结合:可以与DMDSC集群结合使用,实现更高的可用性
DMDataWatch的应用场景
- 关键业务系统:对可用性要求高的核心业务系统
- 数据保护:实现数据的异地备份和保护
- 读写分离:缓解主库压力,提高系统整体性能
- 灾备解决方案:实现异地灾备,提高系统的抗灾能力
- 负载均衡:将读请求分发到备库,实现负载均衡
DMDataWatch架构
1. 整体架构
DMDataWatch由以下几个核心组件组成:
- 主库(PRIMARY):负责处理所有写请求,生成重做日志
- 备库(STANDBY):接收主库的重做日志,应用到备库
- 监视器(MONITOR):监控主备库状态,实现故障检测和自动切换
- MAL系统:主备库之间的通信系统,用于传递日志和控制信息
- 本地归档:主库生成的归档日志,用于备库恢复
- 远程归档:主库发送给备库的归档日志
2. 同步模式
DMDataWatch支持多种同步模式,适应不同的业务需求:
- 异步同步(ASYNC):主库写入日志后立即返回,不等待备库确认
- 半同步同步(SEMISYNC):主库写入日志后,等待至少一个备库确认后返回
- 全同步同步(FULLSYNC):主库写入日志后,等待所有备库确认后返回
- 异步实时同步(ASYNCREAL):主库实时发送日志,备库实时应用
3. 部署模式
一主一备
- 最简单的部署模式
- 一个主库和一个备库
- 提供基本的高可用性和数据保护
一主多备
- 一个主库和多个备库
- 提供更高的可用性和数据保护
- 可以实现读写分离
级联备库
- 主库 -> 备库1 -> 备库2
- 适用于远距离数据同步
- 减少主库的网络压力
双向备库
- 两个库互相作为对方的备库
- 适用于双中心部署
- 实现快速切换和负载均衡
4. 架构图
DMDataWatch部署
1. 部署准备
硬件准备
- 服务器:主备库服务器配置建议相同或相近
- CPU:建议8核以上
- 内存:建议16GB以上
- 存储:建议使用RAID 10等冗余存储方案
- 网络:建议使用千兆或万兆以太网,主备库之间网络延迟应小于10ms
软件准备
- DM数据库软件:DM 8及以上版本
- 操作系统:支持的Linux或Windows版本
- 监视器软件:DM提供的监视器工具
网络规划
- 业务网络:用于客户端访问
- 同步网络:用于主备库之间的日志同步
- 管理网络:用于监视器访问
2. 部署步骤
1. 安装主库
- 安装DM数据库软件
- 创建主库实例
- 配置主库参数
- 启动主库
2. 准备备库
- 安装DM数据库软件
- 使用主库的备份恢复备库
- 配置备库参数
- 启动备库到mount状态
sql
-- 主库备份
BACKUP DATABASE FULL TO BACKUP_FILE1 BACKUPSET '/dm/backup/full_backup';
-- 备库恢复
RESTORE DATABASE FROM '/dm/backup/full_backup';
RECOVER DATABASE FROM '/dm/backup/full_backup';
ALTER DATABASE STANDBY;3. 配置MAL系统
在主备库上配置dmmal.ini文件,用于主备库之间的通信。
ini
-- dmmal.ini配置示例
[MAL_INST1]
MAL_INST_NAME = DMSERVER1
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 = DMSERVER2
MAL_HOST = 192.168.1.102
MAL_PORT = 61142
MAL_INST_HOST = 192.168.0.102
MAL_INST_PORT = 5236
MAL_DW_PORT = 521424. 配置归档
在主库上配置dmarch.ini文件,启用本地归档和远程归档。
ini
-- 主库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 = DMSERVER2
ARCH_INCOMING_PATH = /dm/arch_remote
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 0在备库上配置dmarch.ini文件,启用本地归档和远程归档。
ini
-- 备库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 = DMSERVER1
ARCH_INCOMING_PATH = /dm/arch_remote
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 05. 配置dm.ini参数
在主备库上修改dm.ini文件,配置DataWatch相关参数。
ini
-- 主库dm.ini配置
INSTANCE_NAME = DMSERVER1
PORT_NUM = 5236
DW_TYPE = PRIMARY
DW_MODE = ASYNC
DW_ERROR_TIME = 30
-- 备库dm.ini配置
INSTANCE_NAME = DMSERVER2
PORT_NUM = 5236
DW_TYPE = STANDBY
DW_MODE = ASYNC
DW_ERROR_TIME = 306. 配置监视器
创建监视器配置文件dmmonitor.ini,用于监控主备库状态。
ini
-- dmmonitor.ini配置示例
MON_DW_CONFIRM = 1
MON_LOG_PATH = /dm/monitor/log
MON_LOG_INTERVAL = 60
MON_LOG_FILE_SIZE = 32
MON_LOG_SPACE_LIMIT = 0
[GRP1]
MON_INST_OGUID = 453331
MON_DW_IP = 192.168.1.101:52141
MON_DW_IP = 192.168.1.102:521427. 启动DMDataWatch
- 启动主库到open状态
- 启动备库到open状态
- 启动监视器
- 注册OGUID
- 启动数据守护
sql
-- 主库注册OGUID
SP_SET_PARA_VALUE(2, 'OGUID', 453331);
ALTER DATABASE PRIMARY;
-- 备库注册OGUID
SP_SET_PARA_VALUE(2, 'OGUID', 453331);
ALTER DATABASE STANDBY;
-- 启动监视器
./dmmonitor /dm/monitor/dmmonitor.iniDMDataWatch配置管理
1. 参数配置
DataWatch相关参数
- DW_TYPE:数据库角色(PRIMARY/STANDBY)
- DW_MODE:同步模式(ASYNC/SEMISYNC/FULLSYNC/ASYNCREAL)
- DW_ERROR_TIME:故障检测时间(秒)
- OGUID:集群唯一标识
- RLOG_SEND_THRESHOLD:日志发送阈值
- RLOG_APPLY_THRESHOLD:日志应用阈值
配置方法
sql
-- 查看DataWatch参数
SELECT NAME, VALUE FROM V$DM_INI WHERE NAME LIKE '%DW%' OR NAME LIKE '%OGUID%';
-- 修改DataWatch参数
SP_SET_PARA_VALUE(2, 'DW_MODE', 'SEMISYNC');2. 实例管理
切换主备角色
sql
-- 手动切换主备角色
ALTER DATABASE PRIMARY TO STANDBY;
ALTER DATABASE STANDBY TO PRIMARY;添加备库
- 准备新的备库实例
- 使用主库的备份恢复备库
- 配置备库的参数文件
- 启动备库到mount状态
- 注册OGUID
- 启动备库到open状态
- 在监视器中添加备库
删除备库
- 停止备库
- 在监视器中移除备库
- 清理备库相关配置
切换同步模式
sql
-- 切换同步模式
ALTER DATABASE PRIMARY SWITCH LOGFILE TO SEMISYNC;
ALTER DATABASE PRIMARY SWITCH LOGFILE TO ASYNC;DMDataWatch监控与维护
1. 监控视图
DMDataWatch提供了丰富的监控视图,用于监控主备库状态和性能:
- 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管理工具:图形界面监控DataWatch状态
- DM性能监控工具:实时监控DataWatch性能
- dmmonitor工具:命令行监控主备库状态
- dmrman工具:管理备份和恢复
3. 日常维护
定期备份
- 定期备份主库和备库
- 定期备份归档日志
- 定期测试备份的可用性
性能监控
- 监控主备库的性能指标
- 监控日志同步延迟
- 监控网络带宽使用情况
- 监控磁盘I/O性能
日志管理
- 定期清理归档日志
- 监控归档空间使用情况
- 配置合理的归档策略
健康检查
- 定期检查主备库状态
- 定期检查日志同步状态
- 定期测试故障切换功能
- 定期检查监视器状态
DMDataWatch故障处理
1. 常见故障类型
主库故障
- 主库进程崩溃
- 主库无法连接
- 主库硬件故障
备库故障
- 备库进程崩溃
- 备库无法连接
- 备库应用日志失败
网络故障
- 主备库之间网络中断
- 网络延迟过高
- 网络不稳定
监视器故障
- 监视器进程崩溃
- 监视器无法连接到主备库
2. 故障处理流程
主库故障处理
- 监视器检测到主库故障
- 监视器自动将备库切换为主库
- 应用程序切换到新的主库
- 修复原主库
- 将原主库重新加入DataWatch作为备库
备库故障处理
- 监视器检测到备库故障
- 主库停止向故障备库发送日志
- 修复备库
- 将备库重新加入DataWatch
- 主库开始向备库发送日志
网络故障处理
- 监视器检测到网络故障
- 尝试重新建立网络连接
- 如果网络恢复,主备库自动恢复同步
- 如果网络无法恢复,根据配置决定是否切换主库
手动故障切换
sql
-- 手动故障切换
ALTER DATABASE STANDBY TO PRIMARY FORCE;3. 数据一致性检查
sql
-- 检查主备库数据一致性
SELECT * FROM V$DATAWATCH WHERE CONSISTENT_STATUS != 'Y';
-- 修复数据不一致
ALTER DATABASE STANDBY REFRESH;DMDataWatch最佳实践
1. 部署最佳实践
- 硬件配置:使用高性能服务器和存储设备
- 网络配置:配置专用的同步网络,确保网络带宽和延迟满足要求
- 存储配置:使用RAID 10等冗余存储方案
- 同步模式:根据业务需求选择合适的同步模式
- 监视器配置:配置冗余监视器,提高监视器的可用性
2. 配置最佳实践
- 参数优化:根据系统负载优化DataWatch参数
- 日志配置:配置合适的日志大小和归档策略
- 内存配置:合理分配内存资源
- 并发配置:根据CPU核心数配置并发参数
- 监控配置:配置完善的监控和告警
3. 维护最佳实践
- 定期备份:制定合理的备份策略
- 定期检查:定期检查主备库状态和性能
- 定期优化:定期优化数据库和DataWatch配置
- 定期演练:定期进行故障演练和恢复测试
- 文档管理:维护详细的DataWatch文档
4. 性能优化
- SQL优化:优化SQL语句,减少日志生成量
- 索引优化:合理设计索引,提高查询性能
- 缓存优化:优化缓冲区大小,提高缓存命中率
- I/O优化:优化存储参数,提高I/O性能
- 网络优化:优化网络配置,提高日志同步效率
常见问题(FAQ)
Q1: DMDataWatch和DMDSC有什么区别?
A1: DMDataWatch是基于日志复制的主备复制解决方案,主备库有各自独立的数据副本;DMDSC是基于共享存储的集群解决方案,多个实例共享同一份数据。DMDataWatch适用于数据保护和读写分离,DMDSC适用于高可用性和负载均衡。
Q2: 如何选择合适的同步模式?
A2: 选择同步模式需要考虑以下因素:
业务对数据一致性的要求
网络带宽和延迟
系统性能要求
可用性要求
异步同步:适用于网络带宽有限或延迟较高的场景
半同步同步:适用于对数据一致性要求较高的场景
全同步同步:适用于对数据一致性要求极高的场景
异步实时同步:适用于需要实时数据同步的场景
Q3: 如何处理主备库数据不一致?
A3: 处理主备库数据不一致的方法:
- 检查数据不一致的原因
- 使用主库的备份恢复备库
- 使用ALTER DATABASE STANDBY REFRESH命令刷新备库
- 重新初始化备库
Q4: 如何监控DMDataWatch的性能?
A4: 监控DMDataWatch性能的方法:
- 使用V$DATAWATCH、V$ARCH_SEND_STATUS等视图
- 使用DM管理工具的DataWatch监控功能
- 使用DM性能监控工具
- 配置性能告警,及时发现性能问题
Q5: 如何备份DMDataWatch?
A5: 备份DMDataWatch的方法:
- 定期备份主库和备库
- 定期备份归档日志
- 备份DataWatch配置文件
- 备份监视器配置文件
Q6: 如何升级DMDataWatch?
A6: 升级DMDataWatch的方法:
- 制定详细的升级计划
- 备份主备库数据和配置
- 停止监视器
- 升级备库
- 升级主库
- 启动主备库
- 启动监视器
- 验证升级结果
Q7: 如何扩展DMDataWatch?
A7: 扩展DMDataWatch的方法:
- 添加新的备库实例
- 配置新备库的参数文件
- 使用主库的备份恢复新备库
- 启动新备库并加入DataWatch
- 在监视器中添加新备库
Q8: 如何处理监视器故障?
A8: 处理监视器故障的方法:
- 配置冗余监视器,提高监视器的可用性
- 定期备份监视器配置文件
- 监控监视器状态,及时发现故障
- 故障发生时,手动启动备用监视器
Q9: 如何实现读写分离?
A9: 实现读写分离的方法:
- 配置DMDataWatch主备架构
- 主库处理写请求,备库处理读请求
- 使用负载均衡器将读请求分发到备库
- 配置应用程序支持读写分离
Q10: 如何与DMDSC结合使用?
A10: DMDataWatch与DMDSC结合使用的方法:
- 将DMDSC集群作为主库
- 配置备库接收DMDSC集群的日志
- 实现更高的可用性和数据保护
- 提供更强的容灾能力
版本差异说明
| 版本 | 主要变化 |
|---|---|
| DM 7 | 支持基本的DataWatch功能,最多支持一主一备 |
| DM 8 | 增强了DataWatch功能,支持一主多备、级联备库等多种部署模式 |
| DM 8.1 | 优化了DataWatch的性能和可靠性,支持更多的同步模式和故障检测机制 |
在部署和使用DMDataWatch时,需要注意以下几点:
- 选择合适的硬件和网络配置
- 配置合理的同步模式和参数
- 定期监控主备库状态和性能
- 制定完善的备份和恢复策略
- 定期进行故障演练和恢复测试
- 维护详细的DataWatch文档
通过合理的部署、配置和维护,可以充分发挥DMDataWatch的优势,为业务提供高效、可靠的数据服务。
