Skip to content

DM 自动故障切换

自动故障切换类型

1. DMDataWatch 自动故障切换

定义:DMDataWatch 是 DM 数据库的数据守护集群,基于日志复制实现主备数据库的同步,并支持自动故障切换。

特点

  • 基于日志复制,数据同步延迟低
  • 支持自动故障切换和手动故障切换
  • 支持多种同步模式:异步、半同步、完全同步
  • 支持一主多备架构

适用场景

  • 对可用性要求高的关键业务系统
  • 需要数据冗余和故障自动恢复的场景
  • 支持同城和异地灾备

2. DMRAC 自动故障切换

定义:DMRAC 是 DM 数据库的实时应用集群,基于共享存储和私有网络实现高可用性,支持自动故障切换。

特点

  • 基于共享存储,数据实时共享
  • 支持自动故障切换,故障恢复时间短
  • 支持负载均衡
  • 适合大规模数据库集群

适用场景

  • 对可用性和性能要求都很高的关键业务系统
  • 数据量较大,需要负载均衡的场景
  • 企业级核心数据库系统

3. DMDSC 自动故障切换

定义:DMDSC 是 DM 数据库的共享存储集群,多个数据库实例共享同一套存储设备,支持自动故障切换。

特点

  • 共享存储架构,数据实时共享
  • 支持自动故障切换
  • 支持负载均衡
  • 部署简单,维护成本低

适用场景

  • 对可用性要求高的中型数据库系统
  • 需要负载均衡的场景
  • 快速部署和维护的场景

自动故障切换配置

1. DMDataWatch 自动故障切换配置

操作说明

  • 配置主备数据库的网络通信
  • 配置日志复制参数
  • 配置自动故障切换参数
  • 启动 DataWatch 服务

配置步骤

1. 配置主库 dm.ini 文件

ini
# 启用归档
ARCH_INI = 1

# 配置实例名
INSTANCE_NAME = GRP_RWW_RWW1

# 配置数据库模式为 PRIMARY
ALTER_MODE_STATUS = 0
ENABLE_OFFLINE_TS = 2

# 配置 MAL 系统
MAL_INI = 1

# 配置 DataWatch
DW_INI = 1

2. 配置主库 dmarch.ini 文件

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 = GRP_RWW_RWW2
ARCH_INCOMING_PATH = /dm/arch_remote
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 0

3. 配置主库 dmmal.ini 文件

ini
[MAL_INST1]
MAL_INST_NAME = GRP_RWW_RWW1
MAL_HOST = 192.168.1.101
MAL_PORT = 5237
MAL_INST_PORT = 5236
MAL_INST_HOST = 192.168.1.101
MAL_INST_DW_PORT = 5238

[MAL_INST2]
MAL_INST_NAME = GRP_RWW_RWW2
MAL_HOST = 192.168.1.102
MAL_PORT = 5237
MAL_INST_PORT = 5236
MAL_INST_HOST = 192.168.1.102
MAL_INST_DW_PORT = 5238

4. 配置主库 dmwatcher.ini 文件

ini
[GRP_RWW]
DW_TYPE = GLOBAL
DW_MODE = AUTO
DW_ERROR_TIME = 10
INST_RECOVER_TIME = 60
INST_ERROR_TIME = 10
INST_OGUID = 453331
INST_INI = /dm/data/DAMENG/dm.ini
INST_AUTO_RESTART = 1
INST_STARTUP_CMD = /dm/bin/dmserver
RLOG_SEND_THRESHOLD = 0
RLOG_APPLY_THRESHOLD = 0

5. 配置备库

备库的配置与主库类似,主要区别在于:

  • ALTER_MODE_STATUS = 1
  • 归档配置中添加主库的远程归档
  • 启动备库时使用 mount 模式

6. 启动 DataWatch 服务

bash
# 启动主库
./dmserver /dm/data/DAMENG/dm.ini

# 启动备库(mount 模式)
./dmserver /dm/data/DAMENG/dm.ini mount

# 启动主库 DataWatch
./dmwatcher /dm/data/DAMENG/dmwatcher.ini

# 启动备库 DataWatch
./dmwatcher /dm/data/DAMENG/dmwatcher.ini

2. DMRAC 自动故障切换配置

操作说明

  • 配置共享存储
  • 安装 DMRAC 软件
  • 配置集群参数
  • 启动 RAC 服务

配置步骤

1. 配置共享存储

使用 DMASM 或其他共享存储解决方案配置共享存储,创建 ASM 磁盘组。

2. 配置 dmdcr_cfg.ini 文件

ini
DCR_N_GRP = 1
DCR_VTD_PATH = /dev/asm/vtd1
DCR_OGUID = 63635

[GRP]DCR_GRP_TYPE = RAC
DCR_GRP_NAME = GRP1
DCR_GRP_N_EP = 2
DCR_GRP_DSKCHK_CNT = 60

[GRP1_EP0]DCR_EP_NAME = GRP1_RAC0
DCR_EP_HOST = 192.168.1.101
DCR_EP_PORT = 5236

[GRP1_EP1]DCR_EP_NAME = GRP1_RAC1
DCR_EP_HOST = 192.168.1.102
DCR_EP_PORT = 5236

3. 配置 dmasvrmal.ini 文件

ini
[MAL_INST1]MAL_INST_NAME = ASM0
MAL_HOST = 192.168.1.101
MAL_PORT = 7236

[MAL_INST2]MAL_INST_NAME = ASM1
MAL_HOST = 192.168.1.102
MAL_PORT = 7236

4. 启动 RAC 服务

bash
# 启动 ASM 服务
./dmcss DCR_INI=/dm/data/dmdcr_cfg.ini
./dmasmsvr DCR_INI=/dm/data/dmdcr_cfg.ini

# 启动 RAC 实例
./dmserver /dm/data/GRP1_RAC0/dm.ini mount
./dmserver /dm/data/GRP1_RAC1/dm.ini mount

# 启动监视器
./dmcssm DCR_INI=/dm/data/dmdcr_cfg.ini

3. DMDSC 自动故障切换配置

操作说明

  • 配置共享存储
  • 安装 DMDSC 软件
  • 配置集群参数
  • 启动 DS C 服务

配置步骤

1. 配置共享存储

使用 DMASM 配置共享存储,创建 ASM 磁盘组。

2. 配置 dmdcr_cfg.ini 文件

ini
DCR_N_GRP = 1
DCR_VTD_PATH = /dev/asm/vtd1
DCR_OGUID = 63635

[GRP]DCR_GRP_TYPE = DMDSC
DCR_GRP_NAME = GRP1
DCR_GRP_N_EP = 2
DCR_GRP_DSKCHK_CNT = 60

[GRP1_EP0]DCR_EP_NAME = DMDSC0
DCR_EP_HOST = 192.168.1.101
DCR_EP_PORT = 5236

[GRP1_EP1]DCR_EP_NAME = DMDSC1
DCR_EP_HOST = 192.168.1.102
DCR_EP_PORT = 5236

3. 配置 dmasvrmal.ini 文件

ini
[MAL_INST1]MAL_INST_NAME = ASM0
MAL_HOST = 192.168.1.101
MAL_PORT = 7236

[MAL_INST2]MAL_INST_NAME = ASM1
MAL_HOST = 192.168.1.102
MAL_PORT = 7236

4. 启动 DMDSC 服务

bash
# 启动 ASM 服务
./dmcss DCR_INI=/dm/data/dmdcr_cfg.ini
./dmasmsvr DCR_INI=/dm/data/dmdcr_cfg.ini

# 启动 DMDSC 实例
./dmserver /dm/data/DMDSC0/dm.ini mount
./dmserver /dm/data/DMDSC1/dm.ini mount

# 启动监视器
./dmcssm DCR_INI=/dm/data/dmdcr_cfg.ini

自动故障切换验证

1. DMDataWatch 自动故障切换验证

操作说明

  • 模拟主库故障
  • 观察备库是否自动切换为主库
  • 验证业务连续性

验证步骤

  1. 查看当前主备状态

    sql
    -- 在主库上执行
    SELECT * FROM V$DMWATCHER_STATUS;
  2. 模拟主库故障

    bash
    # 强制关闭主库进程
    kill -9 <主库进程 ID>
  3. 观察备库状态变化

    sql
    -- 在备库上执行
    SELECT * FROM V$DMWATCHER_STATUS;
  4. 验证备库是否切换为主库

    sql
    -- 在原备库上执行
    SELECT INSTANCE_NAME, STATUS$ FROM V$INSTANCE;
  5. 验证业务连续性

    • 连接到新的主库
    • 执行业务操作,验证功能正常

2. DMRAC 自动故障切换验证

操作说明

  • 模拟某个 RAC 节点故障
  • 观察集群是否自动进行故障切换
  • 验证业务连续性

验证步骤

  1. 查看当前集群状态

    bash
    # 使用 dmcssm 工具查看集群状态
    ./dmcssm DCR_INI=/dm/data/dmdcr_cfg.ini
  2. 模拟节点故障

    bash
    # 强制关闭某个节点的数据库进程
    kill -9 <数据库进程 ID>
  3. 观察集群状态变化

    bash
    # 使用 dmcssm 工具查看集群状态变化
    ./dmcssm DCR_INI=/dm/data/dmdcr_cfg.ini
  4. 验证业务连续性

    • 连接到 RAC 集群
    • 执行业务操作,验证功能正常

3. DMDSC 自动故障切换验证

操作说明

  • 模拟某个 DS C 节点故障
  • 观察集群是否自动进行故障切换
  • 验证业务连续性

验证步骤

  1. 查看当前集群状态

    bash
    # 使用 dmcssm 工具查看集群状态
    ./dmcssm DCR_INI=/dm/data/dmdcr_cfg.ini
  2. 模拟节点故障

    bash
    # 强制关闭某个节点的数据库进程
    kill -9 <数据库进程 ID>
  3. 观察集群状态变化

    bash
    # 使用 dmcssm 工具查看集群状态变化
    ./dmcssm DCR_INI=/dm/data/dmdcr_cfg.ini
  4. 验证业务连续性

    • 连接到 DMDSC 集群
    • 执行业务操作,验证功能正常

自动故障切换最佳实践

1. 合理配置故障检测参数

  • 设置合适的故障检测时间,平衡检测灵敏度和误判率
  • 配置适当的重试次数,避免瞬时网络抖动导致误切换
  • 根据网络环境调整日志发送和应用阈值

2. 确保网络可靠性

  • 使用专用网络进行集群通信
  • 配置网络冗余,避免网络单点故障
  • 定期检查网络连接状态,确保通信正常

3. 配置适当的同步模式

  • 根据业务需求选择合适的同步模式:
    • 对数据一致性要求高的场景,使用完全同步模式
    • 对性能要求高的场景,使用异步或半同步模式
  • 考虑网络延迟对同步模式的影响

4. 定期测试自动故障切换

  • 定期进行故障切换演练,验证自动故障切换功能是否正常
  • 测试不同故障场景,包括主库故障、网络故障、存储故障等
  • 记录故障切换时间,评估系统的可用性

5. 监控自动故障切换过程

  • 配置监控系统,实时监控集群状态和性能指标
  • 设置告警机制,及时通知集群异常情况
  • 记录故障切换日志,便于后续分析和优化

6. 配置自动恢复机制

  • 启用实例自动重启功能,提高系统的自我恢复能力
  • 配置合理的重启间隔和重试次数
  • 确保重启过程不会影响其他节点的正常运行

常见问题(FAQ)

Q1: 自动故障切换没有发生怎么办?

A1: 如果自动故障切换没有发生,应采取以下措施:

  • 查看集群日志,分析故障原因
  • 检查故障检测参数配置是否合理
  • 检查网络连接是否正常
  • 检查备库状态是否正常
  • 手动执行故障切换,恢复业务

Q2: 自动故障切换后数据丢失怎么办?

A2: 自动故障切换后数据丢失,可能是由于同步模式设置不合理或网络延迟导致。应采取以下措施:

  • 选择合适的同步模式,如完全同步或半同步模式
  • 调整日志发送和应用阈值,减少数据丢失风险
  • 定期备份数据,确保数据可恢复
  • 分析数据丢失原因,优化集群配置

Q3: 自动故障切换时间过长怎么办?

A3: 自动故障切换时间过长,可能影响业务连续性。应采取以下措施:

  • 优化故障检测参数,减少检测时间
  • 配置实例自动重启功能,加快恢复速度
  • 优化备库的日志应用性能,减少数据同步延迟
  • 使用高性能硬件,提高系统处理能力

Q4: 自动故障切换后应用无法连接怎么办?

A4: 自动故障切换后应用无法连接,可能是由于连接配置问题导致。应采取以下措施:

  • 检查应用连接配置,确保使用正确的连接字符串
  • 配置负载均衡或虚拟 IP,确保连接地址不变
  • 检查数据库监听状态,确保监听正常
  • 检查防火墙配置,确保端口开放

Q5: 如何避免自动故障切换误判?

A5: 避免自动故障切换误判,应采取以下措施:

  • 配置合适的故障检测时间和重试次数
  • 使用可靠的网络连接,避免网络抖动
  • 配置冗余通信路径,提高通信可靠性
  • 定期检查集群状态,确保集群健康

自动故障切换监控

1. 监控指标

指标类型关键指标说明
集群状态实例状态、集群模式、主备角色监控集群整体状态
同步状态日志发送延迟、日志应用延迟、同步模式监控数据同步状态
性能指标CPU 使用率、内存使用率、IO 性能监控系统性能
网络指标网络延迟、网络吞吐量、网络连接数监控网络状态
存储指标存储使用率、IOPS、吞吐量监控存储状态

2. 监控工具

DM 管理工具

  • DM Manager:图形化管理工具,支持监控集群状态、主备关系、同步状态等
  • DM Performance Monitor:性能监控工具,支持监控系统性能指标

命令行工具

  • dmcssm:集群状态查看工具,用于查看 RAC 和 DS C 集群状态
  • dmwatcher:DataWatch 状态查看工具,用于查看 DataWatch 集群状态
  • disql:SQL 命令行工具,用于执行查询语句监控集群状态

第三方监控工具

  • Zabbix:支持监控 DM 数据库集群,可配置告警规则
  • Prometheus + Grafana:支持监控 DM 数据库集群,提供可视化仪表盘
  • Nagios:支持监控 DM 数据库集群,可配置告警规则

自动故障切换的版本差异

DM 版本自动故障切换特点
DM 7支持基本的自动故障切换功能,主要通过 DataWatch 实现
DM 8增强了自动故障切换功能,支持更丰富的集群架构和更可靠的故障检测
DM 8.1进一步优化了自动故障切换性能,减少故障恢复时间,提高系统可用性

在实际应用中,应根据业务需求和系统特点选择合适的集群架构和自动故障切换配置,结合监控和演练,不断优化系统的高可用设计,提高系统的抗故障能力和恢复能力。