外观
DM 手动故障切换
手动故障切换的定义
手动故障切换是指数据库管理员(DBA)通过命令或工具,主动将备库提升为主库,同时将原主库降级为备库或从集群中移除的操作。这种操作通常在以下情况下执行:
- 主库发生故障,自动切换失败
- 主库需要进行计划内维护,如硬件升级、软件升级等
- 自动切换机制未启用
- 需要测试故障切换流程
手动故障切换的重要性
- 灵活性:可以在各种复杂场景下执行,不受自动切换条件的限制
- 可控性:DBA可以完全控制切换过程,确保切换的安全性和可靠性
- 计划性:适用于计划内维护,减少对业务的影响
- 补充性:作为自动切换的补充,提高系统的整体可用性
- 测试性:可以用于测试故障切换流程,验证系统的高可用能力
手动故障切换的前提条件
1. 高可用架构部署
DM数据库支持多种高可用架构,如DMDataWatch、DMDSC、DMRAC等,不同架构的手动故障切换流程有所不同。在执行手动故障切换前,必须确保高可用架构已正确部署和配置。
2. 数据同步状态正常
在执行手动故障切换前,必须确保备库与主库的数据同步状态正常,避免数据丢失。可以通过以下方式检查数据同步状态:
- 查看DataWatch监控视图
- 检查备库的日志应用状态
- 确认主备数据一致性
3. 备份准备
在执行手动故障切换前,建议对主库和备库进行备份,以防止数据丢失。备份内容包括:
- 数据库全量备份
- 归档日志备份
- 配置文件备份
4. 业务准备
在执行手动故障切换前,需要通知业务部门,做好业务切换准备:
- 确认业务低峰期
- 通知相关业务系统
- 准备业务切换方案
- 测试应用连接备库
5. 监控准备
在执行手动故障切换前,需要准备好监控工具,以便实时监控切换过程:
- 数据库监控工具
- 系统监控工具
- 网络监控工具
手动故障切换的操作流程
1. DMDataWatch架构的手动故障切换
DMDataWatch是DM数据库提供的一种主备复制解决方案,支持一主一备、一主多备、级联备库等多种部署模式。
切换前准备
- 检查主备库状态
- 检查数据同步状态
- 确认备库已应用所有日志
- 备份主库和备库
- 通知业务部门
切换步骤
停止主库(如果主库已故障,可跳过此步骤)
sql-- 停止主库 SHUTDOWN IMMEDIATE;检查备库状态
sql-- 检查备库状态 SELECT * FROM V$DATAWATCH; -- 检查日志应用状态 SELECT * FROM V$ARCH_APPLY_STATUS;将备库切换为主库
sql-- 将备库切换为主库 ALTER DATABASE PRIMARY;更新客户端连接配置
- 更新应用程序的数据库连接字符串
- 更新负载均衡器配置
- 更新DNS配置
验证新主库状态
sql-- 检查新主库状态 SELECT STATUS$ FROM V$INSTANCE; -- 检查数据一致性 SELECT * FROM V$DATAWATCH;恢复业务访问
- 通知业务部门恢复业务
- 监控业务访问情况
- 验证业务功能正常
处理原主库
- 如果原主库已故障,修复故障
- 将原主库重新加入集群,作为备库
- 或者将原主库从集群中移除
切换后验证
- 验证新主库的可用性
- 验证业务功能正常
- 验证数据一致性
- 验证监控正常
2. DMDSC架构的手动故障切换
DMDSC是DM数据库提供的一种基于共享存储的集群解决方案,多个实例共享同一存储设备。
切换前准备
- 检查集群状态
- 检查实例状态
- 检查共享存储状态
- 备份数据库
- 通知业务部门
切换步骤
检查集群状态
sql-- 检查集群状态 SELECT * FROM V$DMDSC_CLUSTER; -- 检查实例状态 SELECT * FROM V$INSTANCE;停止故障实例(如果实例已故障,可跳过此步骤)
sql-- 停止故障实例 SHUTDOWN IMMEDIATE;更新虚拟IP配置
- 如果使用了虚拟IP,将虚拟IP漂移到正常实例
- 更新负载均衡器配置
验证正常实例状态
sql-- 检查正常实例状态 SELECT STATUS$ FROM V$INSTANCE; -- 检查数据库状态 SELECT DATABASE_STATUS FROM V$DATABASE;恢复业务访问
- 通知业务部门恢复业务
- 监控业务访问情况
- 验证业务功能正常
处理故障实例
- 修复故障实例
- 将故障实例重新加入集群
- 或者从集群中移除故障实例
切换后验证
- 验证正常实例的可用性
- 验证业务功能正常
- 验证数据一致性
- 验证集群状态正常
3. DMRAC架构的手动故障切换
DMRAC是DM数据库提供的一种基于共享存储的集群解决方案,支持多个节点共享同一存储设备。
切换前准备
- 检查集群状态
- 检查节点状态
- 检查共享存储状态
- 备份数据库
- 通知业务部门
切换步骤
检查集群状态
sql-- 检查集群状态 SELECT * FROM V$CLUSTER_NODE; -- 检查实例状态 SELECT * FROM V$INSTANCE;停止故障节点(如果节点已故障,可跳过此步骤)
sql-- 停止故障节点 ALTER SYSTEM STOP NODE 'DMRAC_NODE1';更新虚拟IP配置
- 将虚拟IP漂移到正常节点
- 更新负载均衡器配置
验证正常节点状态
sql-- 检查正常节点状态 SELECT * FROM V$CLUSTER_NODE WHERE STATUS = 'OPEN'; -- 检查数据库状态 SELECT DATABASE_STATUS FROM V$DATABASE;恢复业务访问
- 通知业务部门恢复业务
- 监控业务访问情况
- 验证业务功能正常
处理故障节点
- 修复故障节点
- 将故障节点重新加入集群
- 或者从集群中移除故障节点
切换后验证
- 验证正常节点的可用性
- 验证业务功能正常
- 验证数据一致性
- 验证集群状态正常
手动故障切换的注意事项
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 | 优化了手动故障切换的性能和可靠性,提供了更多的监控视图和工具 |
在执行手动故障切换时,需要注意以下几点:
- 做好充分的准备工作
- 按照正确的顺序执行切换操作
- 实时监控切换过程
- 切换后进行全面验证
- 记录切换过程
- 遵循最佳实践
通过不断的实践和总结,可以提高手动故障切换的效率和可靠性,为业务提供更高的可用性保障。
