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