Skip to content

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 = 52142

4. 配置归档

在主库上配置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 = 0

5. 配置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 = 30

6. 配置监视器

创建监视器配置文件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:52142

7. 启动DMDataWatch

  1. 启动主库到open状态
  2. 启动备库到open状态
  3. 启动监视器
  4. 注册OGUID
  5. 启动数据守护
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.ini

DMDataWatch配置管理

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;

添加备库

  1. 准备新的备库实例
  2. 使用主库的备份恢复备库
  3. 配置备库的参数文件
  4. 启动备库到mount状态
  5. 注册OGUID
  6. 启动备库到open状态
  7. 在监视器中添加备库

删除备库

  1. 停止备库
  2. 在监视器中移除备库
  3. 清理备库相关配置

切换同步模式

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. 故障处理流程

主库故障处理

  1. 监视器检测到主库故障
  2. 监视器自动将备库切换为主库
  3. 应用程序切换到新的主库
  4. 修复原主库
  5. 将原主库重新加入DataWatch作为备库

备库故障处理

  1. 监视器检测到备库故障
  2. 主库停止向故障备库发送日志
  3. 修复备库
  4. 将备库重新加入DataWatch
  5. 主库开始向备库发送日志

网络故障处理

  1. 监视器检测到网络故障
  2. 尝试重新建立网络连接
  3. 如果网络恢复,主备库自动恢复同步
  4. 如果网络无法恢复,根据配置决定是否切换主库

手动故障切换

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的优势,为业务提供高效、可靠的数据服务。