Skip to content

DM 手动故障切换

手动故障切换的定义

手动故障切换是指数据库管理员(DBA)通过命令或工具,主动将备库提升为主库,同时将原主库降级为备库或从集群中移除的操作。这种操作通常在以下情况下执行:

  • 主库发生故障,自动切换失败
  • 主库需要进行计划内维护,如硬件升级、软件升级等
  • 自动切换机制未启用
  • 需要测试故障切换流程

手动故障切换的重要性

  • 灵活性:可以在各种复杂场景下执行,不受自动切换条件的限制
  • 可控性:DBA可以完全控制切换过程,确保切换的安全性和可靠性
  • 计划性:适用于计划内维护,减少对业务的影响
  • 补充性:作为自动切换的补充,提高系统的整体可用性
  • 测试性:可以用于测试故障切换流程,验证系统的高可用能力

手动故障切换的前提条件

1. 高可用架构部署

DM数据库支持多种高可用架构,如DMDataWatch、DMDSC、DMRAC等,不同架构的手动故障切换流程有所不同。在执行手动故障切换前,必须确保高可用架构已正确部署和配置。

2. 数据同步状态正常

在执行手动故障切换前,必须确保备库与主库的数据同步状态正常,避免数据丢失。可以通过以下方式检查数据同步状态:

  • 查看DataWatch监控视图
  • 检查备库的日志应用状态
  • 确认主备数据一致性

3. 备份准备

在执行手动故障切换前,建议对主库和备库进行备份,以防止数据丢失。备份内容包括:

  • 数据库全量备份
  • 归档日志备份
  • 配置文件备份

4. 业务准备

在执行手动故障切换前,需要通知业务部门,做好业务切换准备:

  • 确认业务低峰期
  • 通知相关业务系统
  • 准备业务切换方案
  • 测试应用连接备库

5. 监控准备

在执行手动故障切换前,需要准备好监控工具,以便实时监控切换过程:

  • 数据库监控工具
  • 系统监控工具
  • 网络监控工具

手动故障切换的操作流程

1. DMDataWatch架构的手动故障切换

DMDataWatch是DM数据库提供的一种主备复制解决方案,支持一主一备、一主多备、级联备库等多种部署模式。

切换前准备

  1. 检查主备库状态
  2. 检查数据同步状态
  3. 确认备库已应用所有日志
  4. 备份主库和备库
  5. 通知业务部门

切换步骤

  1. 停止主库(如果主库已故障,可跳过此步骤)

    sql
    -- 停止主库
    SHUTDOWN IMMEDIATE;
  2. 检查备库状态

    sql
    -- 检查备库状态
    SELECT * FROM V$DATAWATCH;
    
    -- 检查日志应用状态
    SELECT * FROM V$ARCH_APPLY_STATUS;
  3. 将备库切换为主库

    sql
    -- 将备库切换为主库
    ALTER DATABASE PRIMARY;
  4. 更新客户端连接配置

    • 更新应用程序的数据库连接字符串
    • 更新负载均衡器配置
    • 更新DNS配置
  5. 验证新主库状态

    sql
    -- 检查新主库状态
    SELECT STATUS$ FROM V$INSTANCE;
    
    -- 检查数据一致性
    SELECT * FROM V$DATAWATCH;
  6. 恢复业务访问

    • 通知业务部门恢复业务
    • 监控业务访问情况
    • 验证业务功能正常
  7. 处理原主库

    • 如果原主库已故障,修复故障
    • 将原主库重新加入集群,作为备库
    • 或者将原主库从集群中移除

切换后验证

  1. 验证新主库的可用性
  2. 验证业务功能正常
  3. 验证数据一致性
  4. 验证监控正常

2. DMDSC架构的手动故障切换

DMDSC是DM数据库提供的一种基于共享存储的集群解决方案,多个实例共享同一存储设备。

切换前准备

  1. 检查集群状态
  2. 检查实例状态
  3. 检查共享存储状态
  4. 备份数据库
  5. 通知业务部门

切换步骤

  1. 检查集群状态

    sql
    -- 检查集群状态
    SELECT * FROM V$DMDSC_CLUSTER;
    
    -- 检查实例状态
    SELECT * FROM V$INSTANCE;
  2. 停止故障实例(如果实例已故障,可跳过此步骤)

    sql
    -- 停止故障实例
    SHUTDOWN IMMEDIATE;
  3. 更新虚拟IP配置

    • 如果使用了虚拟IP,将虚拟IP漂移到正常实例
    • 更新负载均衡器配置
  4. 验证正常实例状态

    sql
    -- 检查正常实例状态
    SELECT STATUS$ FROM V$INSTANCE;
    
    -- 检查数据库状态
    SELECT DATABASE_STATUS FROM V$DATABASE;
  5. 恢复业务访问

    • 通知业务部门恢复业务
    • 监控业务访问情况
    • 验证业务功能正常
  6. 处理故障实例

    • 修复故障实例
    • 将故障实例重新加入集群
    • 或者从集群中移除故障实例

切换后验证

  1. 验证正常实例的可用性
  2. 验证业务功能正常
  3. 验证数据一致性
  4. 验证集群状态正常

3. DMRAC架构的手动故障切换

DMRAC是DM数据库提供的一种基于共享存储的集群解决方案,支持多个节点共享同一存储设备。

切换前准备

  1. 检查集群状态
  2. 检查节点状态
  3. 检查共享存储状态
  4. 备份数据库
  5. 通知业务部门

切换步骤

  1. 检查集群状态

    sql
    -- 检查集群状态
    SELECT * FROM V$CLUSTER_NODE;
    
    -- 检查实例状态
    SELECT * FROM V$INSTANCE;
  2. 停止故障节点(如果节点已故障,可跳过此步骤)

    sql
    -- 停止故障节点
    ALTER SYSTEM STOP NODE 'DMRAC_NODE1';
  3. 更新虚拟IP配置

    • 将虚拟IP漂移到正常节点
    • 更新负载均衡器配置
  4. 验证正常节点状态

    sql
    -- 检查正常节点状态
    SELECT * FROM V$CLUSTER_NODE WHERE STATUS = 'OPEN';
    
    -- 检查数据库状态
    SELECT DATABASE_STATUS FROM V$DATABASE;
  5. 恢复业务访问

    • 通知业务部门恢复业务
    • 监控业务访问情况
    • 验证业务功能正常
  6. 处理故障节点

    • 修复故障节点
    • 将故障节点重新加入集群
    • 或者从集群中移除故障节点

切换后验证

  1. 验证正常节点的可用性
  2. 验证业务功能正常
  3. 验证数据一致性
  4. 验证集群状态正常

手动故障切换的注意事项

1. 数据一致性

在执行手动故障切换前,必须确保备库与主库的数据同步状态正常,避免数据丢失。可以通过以下方式确保数据一致性:

  • 检查备库的日志应用状态
  • 确认备库已应用所有日志
  • 验证主备数据一致性

2. 业务影响

手动故障切换会对业务造成一定影响,在执行切换前,需要:

  • 选择业务低峰期执行
  • 通知相关业务系统
  • 准备业务切换方案
  • 测试应用连接备库

3. 备份准备

在执行手动故障切换前,建议对主库和备库进行备份,以防止数据丢失。备份内容包括:

  • 数据库全量备份
  • 归档日志备份
  • 配置文件备份

4. 操作顺序

手动故障切换必须按照正确的顺序执行,否则可能导致数据丢失或系统故障:

  • 先检查状态,再执行操作
  • 先停止故障节点,再切换角色
  • 先更新配置,再恢复业务

5. 监控和验证

在执行手动故障切换过程中,必须实时监控系统状态,切换完成后进行全面验证:

  • 监控数据库状态
  • 监控系统资源使用情况
  • 监控网络连接
  • 验证业务功能正常

6. 回滚计划

在执行手动故障切换前,必须准备好回滚计划,以便在切换失败时能够快速回滚:

  • 备份关键配置
  • 记录当前状态
  • 准备回滚命令
  • 测试回滚流程

手动故障切换的常见问题

1. 切换失败

原因

  • 数据同步状态异常
  • 权限不足
  • 命令执行错误
  • 资源冲突
  • 网络故障

解决方法

  • 检查数据同步状态,确保主备数据一致
  • 确认使用正确的用户和权限
  • 检查命令语法,确保命令正确
  • 释放冲突资源
  • 修复网络故障

2. 数据丢失

原因

  • 备库未应用所有日志
  • 主库日志丢失
  • 数据同步中断时间过长
  • 配置错误

解决方法

  • 确保备库已应用所有日志
  • 定期备份主库和归档日志
  • 监控数据同步状态,及时发现同步中断
  • 检查并修复配置错误

3. 业务无法访问

原因

  • 客户端连接配置未更新
  • 虚拟IP未漂移
  • 负载均衡器配置错误
  • 防火墙规则限制
  • 应用程序配置错误

解决方法

  • 更新客户端连接配置
  • 检查虚拟IP配置,确保已漂移到正常节点
  • 检查负载均衡器配置
  • 检查防火墙规则,确保允许业务访问
  • 检查应用程序配置

4. 原主库无法恢复

原因

  • 硬件故障
  • 软件故障
  • 数据损坏
  • 配置错误

解决方法

  • 修复硬件故障
  • 修复软件故障
  • 恢复数据
  • 检查并修复配置错误
  • 重新初始化原主库

手动故障切换的最佳实践

1. 制定详细的切换计划

在执行手动故障切换前,必须制定详细的切换计划,包括:

  • 切换时间
  • 切换步骤
  • 责任分工
  • 回滚计划
  • 验证方法

2. 选择合适的切换时间

选择业务低峰期执行手动故障切换,减少对业务的影响。建议在以下时间执行:

  • 凌晨或周末
  • 业务量较少的时段
  • 计划内维护时段

3. 提前通知相关部门

在执行手动故障切换前,必须提前通知相关部门,包括:

  • 业务部门
  • 运维部门
  • 监控部门
  • 管理层

4. 做好备份工作

在执行手动故障切换前,必须做好备份工作,包括:

  • 数据库全量备份
  • 归档日志备份
  • 配置文件备份
  • 监控数据备份

5. 测试切换流程

在执行手动故障切换前,建议先在测试环境中测试切换流程,验证切换的可行性和可靠性。测试内容包括:

  • 切换步骤的正确性
  • 切换时间
  • 业务影响
  • 回滚流程

6. 实时监控切换过程

在执行手动故障切换过程中,必须实时监控系统状态,包括:

  • 数据库状态
  • 系统资源使用情况
  • 网络连接
  • 业务访问情况

7. 切换后全面验证

在执行手动故障切换后,必须进行全面验证,包括:

  • 新主库的可用性
  • 业务功能正常
  • 数据一致性
  • 监控正常
  • 备份正常

8. 记录切换过程

在执行手动故障切换过程中,必须详细记录切换过程,包括:

  • 切换时间
  • 执行的命令
  • 系统状态变化
  • 遇到的问题和解决方法
  • 验证结果

常见问题(FAQ)

Q1: 手动故障切换和自动故障切换有什么区别?

A1: 手动故障切换是由DBA主动执行的切换操作,适用于各种复杂场景,具有灵活性和可控性;自动故障切换是由系统自动执行的切换操作,适用于主库突然故障的场景,具有及时性和自动化。两者互补,共同提高系统的可用性。

Q2: 手动故障切换前需要做哪些准备工作?

A2: 手动故障切换前需要做以下准备工作:

  • 检查高可用架构部署
  • 检查数据同步状态
  • 做好备份工作
  • 通知业务部门
  • 准备监控工具

Q3: 如何检查数据同步状态?

A3: 可以通过以下方式检查数据同步状态:

  • 查看DataWatch监控视图
  • 检查备库的日志应用状态
  • 确认主备数据一致性
  • 查看MAL系统状态

Q4: 手动故障切换可能导致数据丢失吗?

A4: 如果操作不当,手动故障切换可能导致数据丢失。为了避免数据丢失,需要:

  • 确保备库已应用所有日志
  • 检查主备数据一致性
  • 做好备份工作
  • 按照正确的顺序执行切换操作

Q5: 如何处理手动故障切换失败?

A5: 如果手动故障切换失败,需要:

  • 按照回滚计划执行回滚
  • 恢复原主库的可用性
  • 分析切换失败的原因
  • 修复问题后重新执行切换

版本差异说明

版本主要变化
DM 7支持基本的手动故障切换功能,适用于简单的主备架构
DM 8增强了手动故障切换功能,支持多种高可用架构,如DMDataWatch、DMDSC等
DM 8.1优化了手动故障切换的性能和可靠性,提供了更多的监控视图和工具

在执行手动故障切换时,需要注意以下几点:

  • 做好充分的准备工作
  • 按照正确的顺序执行切换操作
  • 实时监控切换过程
  • 切换后进行全面验证
  • 记录切换过程
  • 遵循最佳实践

通过不断的实践和总结,可以提高手动故障切换的效率和可靠性,为业务提供更高的可用性保障。