本文档详细介绍DM数据库故障自动切换的方法和技巧,包括故障自动切换概念、故障自动切换类型、故障自动切换原理、故障自动切换规划、故障自动切换部署建议、故障自动切换管理建议、部署步骤、故障自动切换配置、故障自动切换管理等内容,风哥教程参考DM官方文档《DM8高可用性》手册,适合DBA人员进行DM数据库故障自动切换的配置和管理。
Part01-基础概念与理论知识
1.1 DM数据库故障自动切换概念
DM数据库故障自动切换是指当主数据库发生故障时,系统能够自动将备数据库提升为主数据库,确保业务的连续性。故障自动切换是实现数据库高可用性的重要技术,通过故障自动切换,可以在主数据库发生故障时快速恢复服务,减少业务中断时间。
故障自动切换的重要性:
- 提高可用性:当主数据库发生故障时,能够自动切换到备数据库,确保业务的连续性
- 减少人工干预:不需要人工干预,系统能够自动完成故障切换
- 减少业务中断时间:故障切换速度快,减少业务中断时间
- 提高系统可靠性:通过自动化故障切换,提高系统的可靠性
1.2 DM数据库故障自动切换类型
DM数据库故障自动切换类型:
# 故障自动切换类型
#
# 1. 基于心跳检测的故障自动切换
##
# 概念
– 通过心跳机制检测主数据库的状态
– 当主数据库心跳超时,系统自动将备数据库提升为主数据库
– 实现简单,可靠性高
##
# 优点
– 实现简单
– 可靠性高
– 切换速度快
##
# 缺点
– 可能出现误切换
– 对网络要求高
#
# 2. 基于健康检查的故障自动切换
##
# 概念
– 通过健康检查机制检测主数据库的状态
– 当主数据库健康检查失败,系统自动将备数据库提升为主数据库
– 可靠性更高,减少误切换
##
# 优点
– 可靠性高
– 减少误切换
– 检测更全面
##
# 缺点
– 实现复杂
– 切换速度相对较慢
#
# 3. 基于Quorum的故障自动切换
##
# 概念
– 使用Quorum机制确保故障切换的一致性
– 当多数节点认为主数据库发生故障时,系统自动将备数据库提升为主数据库
– 可靠性最高,避免脑裂
##
# 优点
– 可靠性最高
– 避免脑裂
– 一致性好 风哥提示:
##
# 缺点
– 实现复杂
– 配置要求高
– 切换速度相对较慢
#
# 1. 基于心跳检测的故障自动切换
##
# 概念
– 通过心跳机制检测主数据库的状态
– 当主数据库心跳超时,系统自动将备数据库提升为主数据库
– 实现简单,可靠性高
##
# 优点
– 实现简单
– 可靠性高
– 切换速度快
##
# 缺点
– 可能出现误切换
– 对网络要求高
#
# 2. 基于健康检查的故障自动切换
##
# 概念
– 通过健康检查机制检测主数据库的状态
– 当主数据库健康检查失败,系统自动将备数据库提升为主数据库
– 可靠性更高,减少误切换
##
# 优点
– 可靠性高
– 减少误切换
– 检测更全面
##
# 缺点
– 实现复杂
– 切换速度相对较慢
#
# 3. 基于Quorum的故障自动切换
##
# 概念
– 使用Quorum机制确保故障切换的一致性
– 当多数节点认为主数据库发生故障时,系统自动将备数据库提升为主数据库
– 可靠性最高,避免脑裂
##
# 优点
– 可靠性最高
– 避免脑裂
– 一致性好 风哥提示:
##
# 缺点
– 实现复杂
– 配置要求高
– 切换速度相对较慢
1.3 DM数据库故障自动切换原理
DM数据库故障自动切换原理:
- 故障检测:通过心跳机制或健康检查机制检测主数据库的状态
- 故障确认:当检测到主数据库故障时,系统进行故障确认
- 故障切换:系统自动将备数据库提升为主数据库
- 通知应用:通知应用程序连接新的主数据库
- 数据同步:确保新的主数据库与备数据库之间的数据同步
风哥提示:故障自动切换是数据库高可用性的重要组成部分,选择合适的故障自动切换类型对于保证业务的连续性和数据的安全性至关重要。
Part02-生产环境规划与建议
2.1 DM数据库故障自动切换规划
生产环境DM数据库故障自动切换规划:
# 故障自动切换规划
#
# 规划步骤
1. 分析业务需求:分析业务的可用性要求、RTO、RPO等
2. 确定故障自动切换类型:根据业务需求选择合适的故障自动切换类型
3. 设计网络架构:设计合理的网络架构,确保节点间的通信畅通
4. 设计存储架构:设计合理的存储架构,确保数据的安全性和可靠性
5. 设计监控架构:设计合理的监控架构,确保能够及时发现和处理故障
6. 制定部署计划:制定详细的部署计划,包括时间、人员、步骤等
#
# 故障自动切换规划示例 学习交流加群风哥微信: itpux-com
##
# 业务需求
– 可用性要求:99.99%
– RTO:5分钟
– RPO:0
– 数据量:1TB
– 并发量:2000用户
##
# 故障自动切换类型选择
– 选择基于Quorum的故障自动切换
– 3节点架构(1主2备)
– 使用DM集群管理工具
##
# 网络架构
– 管理网络:1Gbps以太网
– 心跳网络:10Gbps以太网
– 业务网络:10Gbps以太网
##
# 存储架构
– 主数据库和备数据库使用SSD存储
– 存储冗余:RAID 10
– 存储容量:2TB
##
# 监控架构
– 使用Prometheus + Grafana进行监控
– 配置告警机制,及时通知故障
– 定期进行故障演练
#
# 规划步骤
1. 分析业务需求:分析业务的可用性要求、RTO、RPO等
2. 确定故障自动切换类型:根据业务需求选择合适的故障自动切换类型
3. 设计网络架构:设计合理的网络架构,确保节点间的通信畅通
4. 设计存储架构:设计合理的存储架构,确保数据的安全性和可靠性
5. 设计监控架构:设计合理的监控架构,确保能够及时发现和处理故障
6. 制定部署计划:制定详细的部署计划,包括时间、人员、步骤等
#
# 故障自动切换规划示例 学习交流加群风哥微信: itpux-com
##
# 业务需求
– 可用性要求:99.99%
– RTO:5分钟
– RPO:0
– 数据量:1TB
– 并发量:2000用户
##
# 故障自动切换类型选择
– 选择基于Quorum的故障自动切换
– 3节点架构(1主2备)
– 使用DM集群管理工具
##
# 网络架构
– 管理网络:1Gbps以太网
– 心跳网络:10Gbps以太网
– 业务网络:10Gbps以太网
##
# 存储架构
– 主数据库和备数据库使用SSD存储
– 存储冗余:RAID 10
– 存储容量:2TB
##
# 监控架构
– 使用Prometheus + Grafana进行监控
– 配置告警机制,及时通知故障
– 定期进行故障演练
2.2 DM数据库故障自动切换部署建议
DM数据库故障自动切换部署建议:
部署建议:
- 硬件要求:选择高性能的服务器,确保足够的CPU、内存和存储资源
- 网络要求:确保节点间的网络带宽足够,网络延迟低,建议使用万兆网络
- 存储要求:选择可靠的存储设备,确保数据的安全性和可靠性,建议使用SSD存储
- 软件要求:使用最新版本的DM数据库软件,确保安全性和稳定性
- 操作系统要求:使用稳定版本的操作系统,建议使用Linux系统
- 网络配置:配置静态IP地址,确保网络连接稳定
- 防火墙配置:开放必要的端口,确保节点间的通信畅通
- 时间同步:配置NTP服务,确保节点间的时间同步
2.3 DM数据库故障自动切换管理建议
DM数据库故障自动切换管理建议:
学习交流加群风哥QQ113257174
- 监控管理:部署完善的监控系统,及时发现和处理故障
- 备份管理:建立完善的备份策略,确保数据的安全性
- 故障演练:定期进行故障演练,确保故障自动切换的可靠性
- 补丁管理:及时应用数据库补丁,确保系统的安全性和稳定性
- 性能优化:定期进行性能优化,提高故障自动切换的效率
- 文档管理:记录故障自动切换的配置和操作步骤,便于后续参考
- 人员培训:对运维人员进行培训,提高其故障自动切换管理能力
Part03-生产环境项目实施方案
3.1 DM数据库故障自动切换部署步骤
3.1.1 基于DM集群的故障自动切换部署
# 基于DM集群的故障自动切换部署步骤
#
# 1. 环境准备
##
# 服务器配置
– 节点1(主数据库):16核CPU,64GB内存,1TB SSD
– 节点2(备数据库):16核CPU,64GB内存,1TB SSD
– 节点3(备数据库):16核CPU,64GB内存,1TB SSD
– 网络:10Gbps以太网
##
# 软件配置
– DM数据库版本:DM8
– 操作系统:Oracle Linux 9.3
#
# 2. 安装DM数据库
##
# 安装DM数据库
$ ./DMInstall.bin
#
# 3. 配置集群
##
# 创建集群配置文件
# dmcssm.ini
[CSSM]
CSSM_HOST = 192.168.1.1
CSSM_PORT = 9341
CSSM_LOG_PATH = /dm/log/css
CSSM_LOG_FILE_SIZE = 1024
CSSM_LOG_SPACE_LIMIT = 10240
# dmmal.ini
[MAL_INST1]
MAL_INST_NAME = DMSERVER1
MAL_HOST = 192.168.1.1
MAL_PORT = 61141 更多视频教程www.fgedu.net.cn
MAL_INST_HOST = 192.168.1.1
MAL_INST_PORT = 5236
MAL_DW_PORT = 52141
MAL_INST_DW_PORT = 33141
[MAL_INST2]
MAL_INST_NAME = DMSERVER2
MAL_HOST = 192.168.1.2
MAL_PORT = 61142
MAL_INST_HOST = 192.168.1.2
MAL_INST_PORT = 5236
MAL_DW_PORT = 52142
MAL_INST_DW_PORT = 33142
[MAL_INST3]
MAL_INST_NAME = DMSERVER3
MAL_HOST = 192.168.1.3
MAL_PORT = 61143
MAL_INST_HOST = 192.168.1.3
MAL_INST_PORT = 5236
MAL_DW_PORT = 52143
MAL_INST_DW_PORT = 33143
# dmdcr.ini
[DCR]
DCR_N_GRP = 1
DCR_VTD_PATH = /dm/fgdata/dcr
DCR_OGUID = 123456
[GRP1]
DCR_GRP_TYPE = CSS
DCR_GRP_NAME = GRP1
DCR_GRP_N_EP = 3
DCR_GRP_DSKCHK_CNT = 60
[GRP1_EP1]
DCR_EP_NAME = CSS1
DCR_EP_HOST = 192.168.1.1
DCR_EP_PORT = 9341
[GRP1_EP2]
DCR_EP_NAME = CSS2
DCR_EP_HOST = 192.168.1.2
DCR_EP_PORT = 9341
[GRP1_EP3]
DCR_EP_NAME = CSS3 更多学习教程公众号风哥教程itpux_com
DCR_EP_HOST = 192.168.1.3
DCR_EP_PORT = 9341
#
# 4. 配置故障自动切换
##
# 配置CSS服务
$ systemctl enable DmCSSService
$ systemctl start DmCSSService
##
# 配置DMSERVER服务
$ systemctl enable DmServiceDMSERVER1
$ systemctl start DmServiceDMSERVER1
$ systemctl enable DmServiceDMSERVER2
$ systemctl start DmServiceDMSERVER2
$ systemctl enable DmServiceDMSERVER3
$ systemctl start DmServiceDMSERVER3
##
# 配置故障自动切换参数
SQL> sp_set_para_value(0, ‘DW_INACTIVE_INTERVAL’, 60);
SQL> sp_set_para_value(0, ‘DW_CONFIRM_INTERVAL’, 10);
SQL> sp_set_para_value(0, ‘DW_ERROR_INTERVAL’, 10);
SQL> sp_set_para_value(0, ‘DW_MAX_FAILOVER_TIMES’, 3);
SQL> sp_set_para_value(0, ‘DW_FAILOVER_INTERVAL’, 60);
#
# 5. 测试故障自动切换
##
# 检查集群状态
$ dmasmtool
ASM> list instance;
$ disql SYSDBA/SYSDBA
SQL> select * from v$instance;
SQL> select * from v$cluster;
##
# 模拟主数据库故障
$ systemctl stop DmServiceDMSERVER1
##
# 检查故障自动切换状态
$ dmasmtool from DB视频:www.itpux.com
ASM> list instance;
$ disql SYSDBA/SYSDBA
SQL> select * from v$instance;
SQL> select * from v$cluster;
##
# 恢复主数据库
$ systemctl start DmServiceDMSERVER1
##
# 检查集群状态
$ dmasmtool
ASM> list instance;
$ disql SYSDBA/SYSDBA
SQL> select * from v$instance;
SQL> select * from v$cluster;
#
# 1. 环境准备
##
# 服务器配置
– 节点1(主数据库):16核CPU,64GB内存,1TB SSD
– 节点2(备数据库):16核CPU,64GB内存,1TB SSD
– 节点3(备数据库):16核CPU,64GB内存,1TB SSD
– 网络:10Gbps以太网
##
# 软件配置
– DM数据库版本:DM8
– 操作系统:Oracle Linux 9.3
#
# 2. 安装DM数据库
##
# 安装DM数据库
$ ./DMInstall.bin
#
# 3. 配置集群
##
# 创建集群配置文件
# dmcssm.ini
[CSSM]
CSSM_HOST = 192.168.1.1
CSSM_PORT = 9341
CSSM_LOG_PATH = /dm/log/css
CSSM_LOG_FILE_SIZE = 1024
CSSM_LOG_SPACE_LIMIT = 10240
# dmmal.ini
[MAL_INST1]
MAL_INST_NAME = DMSERVER1
MAL_HOST = 192.168.1.1
MAL_PORT = 61141 更多视频教程www.fgedu.net.cn
MAL_INST_HOST = 192.168.1.1
MAL_INST_PORT = 5236
MAL_DW_PORT = 52141
MAL_INST_DW_PORT = 33141
[MAL_INST2]
MAL_INST_NAME = DMSERVER2
MAL_HOST = 192.168.1.2
MAL_PORT = 61142
MAL_INST_HOST = 192.168.1.2
MAL_INST_PORT = 5236
MAL_DW_PORT = 52142
MAL_INST_DW_PORT = 33142
[MAL_INST3]
MAL_INST_NAME = DMSERVER3
MAL_HOST = 192.168.1.3
MAL_PORT = 61143
MAL_INST_HOST = 192.168.1.3
MAL_INST_PORT = 5236
MAL_DW_PORT = 52143
MAL_INST_DW_PORT = 33143
# dmdcr.ini
[DCR]
DCR_N_GRP = 1
DCR_VTD_PATH = /dm/fgdata/dcr
DCR_OGUID = 123456
[GRP1]
DCR_GRP_TYPE = CSS
DCR_GRP_NAME = GRP1
DCR_GRP_N_EP = 3
DCR_GRP_DSKCHK_CNT = 60
[GRP1_EP1]
DCR_EP_NAME = CSS1
DCR_EP_HOST = 192.168.1.1
DCR_EP_PORT = 9341
[GRP1_EP2]
DCR_EP_NAME = CSS2
DCR_EP_HOST = 192.168.1.2
DCR_EP_PORT = 9341
[GRP1_EP3]
DCR_EP_NAME = CSS3 更多学习教程公众号风哥教程itpux_com
DCR_EP_HOST = 192.168.1.3
DCR_EP_PORT = 9341
#
# 4. 配置故障自动切换
##
# 配置CSS服务
$ systemctl enable DmCSSService
$ systemctl start DmCSSService
##
# 配置DMSERVER服务
$ systemctl enable DmServiceDMSERVER1
$ systemctl start DmServiceDMSERVER1
$ systemctl enable DmServiceDMSERVER2
$ systemctl start DmServiceDMSERVER2
$ systemctl enable DmServiceDMSERVER3
$ systemctl start DmServiceDMSERVER3
##
# 配置故障自动切换参数
SQL> sp_set_para_value(0, ‘DW_INACTIVE_INTERVAL’, 60);
SQL> sp_set_para_value(0, ‘DW_CONFIRM_INTERVAL’, 10);
SQL> sp_set_para_value(0, ‘DW_ERROR_INTERVAL’, 10);
SQL> sp_set_para_value(0, ‘DW_MAX_FAILOVER_TIMES’, 3);
SQL> sp_set_para_value(0, ‘DW_FAILOVER_INTERVAL’, 60);
#
# 5. 测试故障自动切换
##
# 检查集群状态
$ dmasmtool
ASM> list instance;
$ disql SYSDBA/SYSDBA
SQL> select * from v$instance;
SQL> select * from v$cluster;
##
# 模拟主数据库故障
$ systemctl stop DmServiceDMSERVER1
##
# 检查故障自动切换状态
$ dmasmtool from DB视频:www.itpux.com
ASM> list instance;
$ disql SYSDBA/SYSDBA
SQL> select * from v$instance;
SQL> select * from v$cluster;
##
# 恢复主数据库
$ systemctl start DmServiceDMSERVER1
##
# 检查集群状态
$ dmasmtool
ASM> list instance;
$ disql SYSDBA/SYSDBA
SQL> select * from v$instance;
SQL> select * from v$cluster;
3.1.2 基于主从复制的故障自动切换部署
# 基于主从复制的故障自动切换部署步骤
#
# 1. 环境准备
##
# 服务器配置
– 主数据库:16核CPU,64GB内存,1TB SSD
– 备数据库1:16核CPU,64GB内存,1TB SSD
– 备数据库2:16核CPU,64GB内存,1TB SSD
– 网络:10Gbps以太网
##
# 软件配置
– DM数据库版本:DM8
– 操作系统:Oracle Linux 9.3
#
# 2. 配置主从复制
##
# 配置主数据库
$ ./DMInstall.bin
$ dminit path=/dm/fgdata db_name=fgedudb
SQL> alter database mount;
SQL> alter database add archivelog ‘dest=/dm/arch,type=local,file_size=1024,space_limit=10240’;
SQL> alter database archivelog;
SQL> alter database open;
SQL> sp_set_para_value(1, ‘INSTANCE_NAME’, ‘PRIMARY’);
SQL> sp_set_para_value(1, ‘PORT_NUM’, 5236);
SQL> sp_set_para_value(0, ‘RLOG_SEND_APPLY_MON’, 1);
##
# 配置备数据库
$ ./DMInstall.bin
$ dmrman
RMAN> restore database ‘/dm/fgdata/fgedudb/dm.ini’ from backupset ‘/dm/backup/full.bak’;
RMAN> recover database ‘/dm/fgdata/fgedudb/dm.ini’ with archivedir ‘/dm/arch’;
RMAN> recover database ‘/dm/fgdata/fgedudb/dm.ini’ update db_magic;
SQL> sp_set_para_value(1, ‘INSTANCE_NAME’, ‘STANDBY1’);
SQL> sp_set_para_value(1, ‘PORT_NUM’, 5236);
SQL> sp_set_para_value(0, ‘RLOG_SEND_APPLY_MON’, 1);
SQL> sp_set_para_value(0, ‘ALTER_MODE_STATUS’, 0);
SQL> sp_set_para_value(0, ‘ENABLE_OFFLINE_TS’, 2);
##
# 配置主备关系
— 主数据库执行
SQL> alter database primary database to standby database ‘STANDBY1’ with ip ‘192.168.1.2’ port 5236;
SQL> alter database primary database to standby database ‘STANDBY2’ with ip ‘192.168.1.3’ port 5236;
— 备数据库执行
SQL> alter database standby database to primary database ‘PRIMARY’ with ip ‘192.168.1.1’ port 5236;
#
# 3. 配置故障自动切换
##
# 安装DM守护进程
$ ./DMInstall.bin –type=guardian
##
# 配置守护进程
# dmmonitor.ini
[MONITOR]
MON_HOST = 192.168.1.4
MON_PORT = 9340
[GRP1]
GRP_NAME = GRP1
GRP_TYPE = PRIMARY_STANDBY
GRP_N_EP = 3
[GRP1_EP1]
EP_NAME = PRIMARY
EP_HOST = 192.168.1.1
EP_PORT = 5236
[GRP1_EP2]
EP_NAME = STANDBY1
EP_HOST = 192.168.1.2
EP_PORT = 5236
[GRP1_EP3]
EP_NAME = STANDBY2
EP_HOST = 192.168.1.3
EP_PORT = 5236
##
# 启动守护进程
$ systemctl enable DmMonitorService
$ systemctl start DmMonitorService
##
# 配置故障自动切换参数
SQL> sp_set_para_value(0, ‘DW_INACTIVE_INTERVAL’, 60);
SQL> sp_set_para_value(0, ‘DW_CONFIRM_INTERVAL’, 10);
SQL> sp_set_para_value(0, ‘DW_ERROR_INTERVAL’, 10);
SQL> sp_set_para_value(0, ‘DW_MAX_FAILOVER_TIMES’, 3);
SQL> sp_set_para_value(0, ‘DW_FAILOVER_INTERVAL’, 60);
#
# 4. 测试故障自动切换
##
# 检查主备状态
SQL> select * from v$rlog_send; — 主数据库执行
SQL> select * from v$rlog_apply; — 备数据库执行
##
# 模拟主数据库故障
$ systemctl stop DmServicefgedudb # 主数据库
##
# 检查故障自动切换状态
SQL> select * from v$instance; — 备数据库执行
SQL> select * from v$rlog_apply; — 备数据库执行
##
# 恢复主数据库
$ systemctl start DmServicefgedudb # 主数据库
##
# 检查主备状态
SQL> select * from v$instance; — 主数据库执行
SQL> select * from v$rlog_send; — 主数据库执行
#
# 1. 环境准备
##
# 服务器配置
– 主数据库:16核CPU,64GB内存,1TB SSD
– 备数据库1:16核CPU,64GB内存,1TB SSD
– 备数据库2:16核CPU,64GB内存,1TB SSD
– 网络:10Gbps以太网
##
# 软件配置
– DM数据库版本:DM8
– 操作系统:Oracle Linux 9.3
#
# 2. 配置主从复制
##
# 配置主数据库
$ ./DMInstall.bin
$ dminit path=/dm/fgdata db_name=fgedudb
SQL> alter database mount;
SQL> alter database add archivelog ‘dest=/dm/arch,type=local,file_size=1024,space_limit=10240’;
SQL> alter database archivelog;
SQL> alter database open;
SQL> sp_set_para_value(1, ‘INSTANCE_NAME’, ‘PRIMARY’);
SQL> sp_set_para_value(1, ‘PORT_NUM’, 5236);
SQL> sp_set_para_value(0, ‘RLOG_SEND_APPLY_MON’, 1);
##
# 配置备数据库
$ ./DMInstall.bin
$ dmrman
RMAN> restore database ‘/dm/fgdata/fgedudb/dm.ini’ from backupset ‘/dm/backup/full.bak’;
RMAN> recover database ‘/dm/fgdata/fgedudb/dm.ini’ with archivedir ‘/dm/arch’;
RMAN> recover database ‘/dm/fgdata/fgedudb/dm.ini’ update db_magic;
SQL> sp_set_para_value(1, ‘INSTANCE_NAME’, ‘STANDBY1’);
SQL> sp_set_para_value(1, ‘PORT_NUM’, 5236);
SQL> sp_set_para_value(0, ‘RLOG_SEND_APPLY_MON’, 1);
SQL> sp_set_para_value(0, ‘ALTER_MODE_STATUS’, 0);
SQL> sp_set_para_value(0, ‘ENABLE_OFFLINE_TS’, 2);
##
# 配置主备关系
— 主数据库执行
SQL> alter database primary database to standby database ‘STANDBY1’ with ip ‘192.168.1.2’ port 5236;
SQL> alter database primary database to standby database ‘STANDBY2’ with ip ‘192.168.1.3’ port 5236;
— 备数据库执行
SQL> alter database standby database to primary database ‘PRIMARY’ with ip ‘192.168.1.1’ port 5236;
#
# 3. 配置故障自动切换
##
# 安装DM守护进程
$ ./DMInstall.bin –type=guardian
##
# 配置守护进程
# dmmonitor.ini
[MONITOR]
MON_HOST = 192.168.1.4
MON_PORT = 9340
[GRP1]
GRP_NAME = GRP1
GRP_TYPE = PRIMARY_STANDBY
GRP_N_EP = 3
[GRP1_EP1]
EP_NAME = PRIMARY
EP_HOST = 192.168.1.1
EP_PORT = 5236
[GRP1_EP2]
EP_NAME = STANDBY1
EP_HOST = 192.168.1.2
EP_PORT = 5236
[GRP1_EP3]
EP_NAME = STANDBY2
EP_HOST = 192.168.1.3
EP_PORT = 5236
##
# 启动守护进程
$ systemctl enable DmMonitorService
$ systemctl start DmMonitorService
##
# 配置故障自动切换参数
SQL> sp_set_para_value(0, ‘DW_INACTIVE_INTERVAL’, 60);
SQL> sp_set_para_value(0, ‘DW_CONFIRM_INTERVAL’, 10);
SQL> sp_set_para_value(0, ‘DW_ERROR_INTERVAL’, 10);
SQL> sp_set_para_value(0, ‘DW_MAX_FAILOVER_TIMES’, 3);
SQL> sp_set_para_value(0, ‘DW_FAILOVER_INTERVAL’, 60);
#
# 4. 测试故障自动切换
##
# 检查主备状态
SQL> select * from v$rlog_send; — 主数据库执行
SQL> select * from v$rlog_apply; — 备数据库执行
##
# 模拟主数据库故障
$ systemctl stop DmServicefgedudb # 主数据库
##
# 检查故障自动切换状态
SQL> select * from v$instance; — 备数据库执行
SQL> select * from v$rlog_apply; — 备数据库执行
##
# 恢复主数据库
$ systemctl start DmServicefgedudb # 主数据库
##
# 检查主备状态
SQL> select * from v$instance; — 主数据库执行
SQL> select * from v$rlog_send; — 主数据库执行
3.2 DM数据库故障自动切换配置
DM数据库故障自动切换配置:
# 故障自动切换配置
#
# 1. 基于DM集群的故障自动切换配置
##
# CSS配置文件(dmcssm.ini)
[CSSM]
CSSM_HOST = 192.168.1.1
CSSM_PORT = 9341
CSSM_LOG_PATH = /dm/log/css
CSSM_LOG_FILE_SIZE = 1024
CSSM_LOG_SPACE_LIMIT = 10240
CSSM_HEARTBEAT_INTERVAL = 1000
CSSM_HEARTBEAT_TIMEOUT = 10
##
# MAL配置文件(dmmal.ini)
[MAL_INST1]
MAL_INST_NAME = DMSERVER1
MAL_HOST = 192.168.1.1
MAL_PORT = 61141
MAL_INST_HOST = 192.168.1.1
MAL_INST_PORT = 5236
MAL_DW_PORT = 52141
MAL_INST_DW_PORT = 33141
[MAL_INST2]
MAL_INST_NAME = DMSERVER2
MAL_HOST = 192.168.1.2
MAL_PORT = 61142
MAL_INST_HOST = 192.168.1.2
MAL_INST_PORT = 5236
MAL_DW_PORT = 52142
MAL_INST_DW_PORT = 33142
[MAL_INST3]
MAL_INST_NAME = DMSERVER3
MAL_HOST = 192.168.1.3
MAL_PORT = 61143
MAL_INST_HOST = 192.168.1.3
MAL_INST_PORT = 5236
MAL_DW_PORT = 52143
MAL_INST_DW_PORT = 33143
##
# 数据库参数配置
SQL> sp_set_para_value(0, ‘DW_INACTIVE_INTERVAL’, 60);
SQL> sp_set_para_value(0, ‘DW_CONFIRM_INTERVAL’, 10);
SQL> sp_set_para_value(0, ‘DW_ERROR_INTERVAL’, 10);
SQL> sp_set_para_value(0, ‘DW_MAX_FAILOVER_TIMES’, 3);
SQL> sp_set_para_value(0, ‘DW_FAILOVER_INTERVAL’, 60);
SQL> sp_set_para_value(0, ‘ALTER_MODE_STATUS’, 0);
SQL> sp_set_para_value(0, ‘ENABLE_OFFLINE_TS’, 2);
#
# 2. 基于主从复制的故障自动切换配置
##
# 守护进程配置文件(dmmonitor.ini)
[MONITOR]
MON_HOST = 192.168.1.4
MON_PORT = 9340
MON_LOG_PATH = /dm/log/monitor
MON_LOG_FILE_SIZE = 1024
MON_LOG_SPACE_LIMIT = 10240
[GRP1]
GRP_NAME = GRP1
GRP_TYPE = PRIMARY_STANDBY
GRP_N_EP = 3
[GRP1_EP1]
EP_NAME = PRIMARY
EP_HOST = 192.168.1.1
EP_PORT = 5236
[GRP1_EP2]
EP_NAME = STANDBY1
EP_HOST = 192.168.1.2
EP_PORT = 5236
[GRP1_EP3]
EP_NAME = STANDBY2
EP_HOST = 192.168.1.3
EP_PORT = 5236
##
# 数据库参数配置
SQL> sp_set_para_value(0, ‘DW_INACTIVE_INTERVAL’, 60);
SQL> sp_set_para_value(0, ‘DW_CONFIRM_INTERVAL’, 10);
SQL> sp_set_para_value(0, ‘DW_ERROR_INTERVAL’, 10);
SQL> sp_set_para_value(0, ‘DW_MAX_FAILOVER_TIMES’, 3);
SQL> sp_set_para_value(0, ‘DW_FAILOVER_INTERVAL’, 60);
SQL> sp_set_para_value(0, ‘RLOG_SEND_APPLY_MON’, 1);
#
# 1. 基于DM集群的故障自动切换配置
##
# CSS配置文件(dmcssm.ini)
[CSSM]
CSSM_HOST = 192.168.1.1
CSSM_PORT = 9341
CSSM_LOG_PATH = /dm/log/css
CSSM_LOG_FILE_SIZE = 1024
CSSM_LOG_SPACE_LIMIT = 10240
CSSM_HEARTBEAT_INTERVAL = 1000
CSSM_HEARTBEAT_TIMEOUT = 10
##
# MAL配置文件(dmmal.ini)
[MAL_INST1]
MAL_INST_NAME = DMSERVER1
MAL_HOST = 192.168.1.1
MAL_PORT = 61141
MAL_INST_HOST = 192.168.1.1
MAL_INST_PORT = 5236
MAL_DW_PORT = 52141
MAL_INST_DW_PORT = 33141
[MAL_INST2]
MAL_INST_NAME = DMSERVER2
MAL_HOST = 192.168.1.2
MAL_PORT = 61142
MAL_INST_HOST = 192.168.1.2
MAL_INST_PORT = 5236
MAL_DW_PORT = 52142
MAL_INST_DW_PORT = 33142
[MAL_INST3]
MAL_INST_NAME = DMSERVER3
MAL_HOST = 192.168.1.3
MAL_PORT = 61143
MAL_INST_HOST = 192.168.1.3
MAL_INST_PORT = 5236
MAL_DW_PORT = 52143
MAL_INST_DW_PORT = 33143
##
# 数据库参数配置
SQL> sp_set_para_value(0, ‘DW_INACTIVE_INTERVAL’, 60);
SQL> sp_set_para_value(0, ‘DW_CONFIRM_INTERVAL’, 10);
SQL> sp_set_para_value(0, ‘DW_ERROR_INTERVAL’, 10);
SQL> sp_set_para_value(0, ‘DW_MAX_FAILOVER_TIMES’, 3);
SQL> sp_set_para_value(0, ‘DW_FAILOVER_INTERVAL’, 60);
SQL> sp_set_para_value(0, ‘ALTER_MODE_STATUS’, 0);
SQL> sp_set_para_value(0, ‘ENABLE_OFFLINE_TS’, 2);
#
# 2. 基于主从复制的故障自动切换配置
##
# 守护进程配置文件(dmmonitor.ini)
[MONITOR]
MON_HOST = 192.168.1.4
MON_PORT = 9340
MON_LOG_PATH = /dm/log/monitor
MON_LOG_FILE_SIZE = 1024
MON_LOG_SPACE_LIMIT = 10240
[GRP1]
GRP_NAME = GRP1
GRP_TYPE = PRIMARY_STANDBY
GRP_N_EP = 3
[GRP1_EP1]
EP_NAME = PRIMARY
EP_HOST = 192.168.1.1
EP_PORT = 5236
[GRP1_EP2]
EP_NAME = STANDBY1
EP_HOST = 192.168.1.2
EP_PORT = 5236
[GRP1_EP3]
EP_NAME = STANDBY2
EP_HOST = 192.168.1.3
EP_PORT = 5236
##
# 数据库参数配置
SQL> sp_set_para_value(0, ‘DW_INACTIVE_INTERVAL’, 60);
SQL> sp_set_para_value(0, ‘DW_CONFIRM_INTERVAL’, 10);
SQL> sp_set_para_value(0, ‘DW_ERROR_INTERVAL’, 10);
SQL> sp_set_para_value(0, ‘DW_MAX_FAILOVER_TIMES’, 3);
SQL> sp_set_para_value(0, ‘DW_FAILOVER_INTERVAL’, 60);
SQL> sp_set_para_value(0, ‘RLOG_SEND_APPLY_MON’, 1);
3.3 DM数据库故障自动切换管理
DM数据库故障自动切换管理:
# 故障自动切换管理
#
# 1. 故障自动切换状态管理
##
# 查看故障自动切换状态
$ dmasmtool # 集群环境
ASM> list instance;
$ disql SYSDBA/SYSDBA
SQL> select * from v$instance;
SQL> select * from v$cluster;
##
# 启动故障自动切换
$ systemctl start DmCSSService # 集群环境
$ systemctl start DmServiceDMSERVER1
$ systemctl start DmMonitorService # 主从复制环境
$ systemctl start DmServicefgedudb
##
# 停止故障自动切换
$ systemctl stop DmServiceDMSERVER1 # 集群环境
$ systemctl stop DmCSSService
$ systemctl stop DmServicefgedudb # 主从复制环境
$ systemctl stop DmMonitorService
#
# 2. 故障自动切换故障处理
##
# 集群故障处理
# 检查集群状态
$ dmasmtool
ASM> list instance;
# 检查CSS服务状态
$ systemctl status DmCSSService
# 重启CSS服务
$ systemctl restart DmCSSService
# 检查集群状态
$ dmasmtool
ASM> list instance;
##
# 守护进程故障处理
# 检查守护进程状态
$ systemctl status DmMonitorService
# 重启守护进程
$ systemctl restart DmMonitorService
# 检查守护进程状态
$ systemctl status DmMonitorService
#
# 3. 故障自动切换性能管理
##
# 监控故障自动切换性能
# 查看系统性能
$ top
$ free -h
$ iostat -x
# 查看数据库性能
SQL> select * from v$session where status = ‘ACTIVE’;
SQL> select * from v$sql where elapsed_time > 10000000;
##
# 优化故障自动切换性能
# 优化网络参数
$ echo “net.core.rmem_max = 16777216” >> /etc/sysctl.conf
$ echo “net.core.wmem_max = 16777216” >> /etc/sysctl.conf
$ sysctl -p
# 优化数据库参数
SQL> sp_set_para_value(0, ‘DW_INACTIVE_INTERVAL’, 60);
SQL> sp_set_para_value(0, ‘DW_CONFIRM_INTERVAL’, 10);
SQL> sp_set_para_value(0, ‘DW_ERROR_INTERVAL’, 10);
#
# 4. 故障自动切换备份管理
##
# 全库备份
$ dmrman
RMAN> backup database ‘/dm/fgdata/fgedudb/dm.ini’ full to backupset ‘/dm/backup/full.bak’;
##
# 增量备份
$ dmrman
RMAN> backup database ‘/dm/fgdata/fgedudb/dm.ini’ increment to backupset ‘/dm/backup/increment.bak’;
##
# 备份验证
$ dmrman
RMAN> validate backupset ‘/dm/backup/full.bak’;
#
# 5. 故障自动切换补丁管理
##
# 检查补丁状态
SQL> select * from v$version;
##
# 应用补丁
$ ./dm8_20250409_patch.bin
##
# 验证补丁
SQL> select * from v$version;
#
# 1. 故障自动切换状态管理
##
# 查看故障自动切换状态
$ dmasmtool # 集群环境
ASM> list instance;
$ disql SYSDBA/SYSDBA
SQL> select * from v$instance;
SQL> select * from v$cluster;
##
# 启动故障自动切换
$ systemctl start DmCSSService # 集群环境
$ systemctl start DmServiceDMSERVER1
$ systemctl start DmMonitorService # 主从复制环境
$ systemctl start DmServicefgedudb
##
# 停止故障自动切换
$ systemctl stop DmServiceDMSERVER1 # 集群环境
$ systemctl stop DmCSSService
$ systemctl stop DmServicefgedudb # 主从复制环境
$ systemctl stop DmMonitorService
#
# 2. 故障自动切换故障处理
##
# 集群故障处理
# 检查集群状态
$ dmasmtool
ASM> list instance;
# 检查CSS服务状态
$ systemctl status DmCSSService
# 重启CSS服务
$ systemctl restart DmCSSService
# 检查集群状态
$ dmasmtool
ASM> list instance;
##
# 守护进程故障处理
# 检查守护进程状态
$ systemctl status DmMonitorService
# 重启守护进程
$ systemctl restart DmMonitorService
# 检查守护进程状态
$ systemctl status DmMonitorService
#
# 3. 故障自动切换性能管理
##
# 监控故障自动切换性能
# 查看系统性能
$ top
$ free -h
$ iostat -x
# 查看数据库性能
SQL> select * from v$session where status = ‘ACTIVE’;
SQL> select * from v$sql where elapsed_time > 10000000;
##
# 优化故障自动切换性能
# 优化网络参数
$ echo “net.core.rmem_max = 16777216” >> /etc/sysctl.conf
$ echo “net.core.wmem_max = 16777216” >> /etc/sysctl.conf
$ sysctl -p
# 优化数据库参数
SQL> sp_set_para_value(0, ‘DW_INACTIVE_INTERVAL’, 60);
SQL> sp_set_para_value(0, ‘DW_CONFIRM_INTERVAL’, 10);
SQL> sp_set_para_value(0, ‘DW_ERROR_INTERVAL’, 10);
#
# 4. 故障自动切换备份管理
##
# 全库备份
$ dmrman
RMAN> backup database ‘/dm/fgdata/fgedudb/dm.ini’ full to backupset ‘/dm/backup/full.bak’;
##
# 增量备份
$ dmrman
RMAN> backup database ‘/dm/fgdata/fgedudb/dm.ini’ increment to backupset ‘/dm/backup/increment.bak’;
##
# 备份验证
$ dmrman
RMAN> validate backupset ‘/dm/backup/full.bak’;
#
# 5. 故障自动切换补丁管理
##
# 检查补丁状态
SQL> select * from v$version;
##
# 应用补丁
$ ./dm8_20250409_patch.bin
##
# 验证补丁
SQL> select * from v$version;
Part04-生产案例与实战讲解
4.1 DM数据库故障自动切换部署案例
以下是一个故障自动切换部署的案例:
#
# 故障自动切换部署案例
##
# 场景描述
某企业需要部署DM数据库故障自动切换,确保业务的连续性和数据的安全性。
##
# 需求分析
– 可用性要求:99.99%
– RTO:5分钟
– RPO:0
– 数据量:1.5TB
– 并发量:3000用户
##
# 架构设计
– 采用基于DM集群的故障自动切换
– 3节点架构(1主2备)
– 使用DM集群管理工具
– 主数据库和备数据库位于同一机房
– 网络使用10Gbps以太网
##
# 实施步骤
# 1. 环境准备
#
# 服务器配置
– 节点1(主数据库):24核CPU,128GB内存,2TB SSD
– 节点2(备数据库):24核CPU,128GB内存,2TB SSD
– 节点3(备数据库):24核CPU,128GB内存,2TB SSD
– 网络:10Gbps以太网
#
# 软件配置
– DM数据库版本:DM8
– 操作系统:Oracle Linux 9.3
# 2. 安装DM数据库
#
# 安装DM数据库
$ ./DMInstall.bin
# 3. 配置集群
#
# 创建集群配置文件
# dmcssm.ini
[CSSM]
CSSM_HOST = 192.168.1.1
CSSM_PORT = 9341
CSSM_LOG_PATH = /dm/log/css
CSSM_LOG_FILE_SIZE = 1024
CSSM_LOG_SPACE_LIMIT = 10240
CSSM_HEARTBEAT_INTERVAL = 1000
CSSM_HEARTBEAT_TIMEOUT = 10
# dmmal.ini
[MAL_INST1]
MAL_INST_NAME = DMSERVER1
MAL_HOST = 192.168.1.1
MAL_PORT = 61141
MAL_INST_HOST = 192.168.1.1
MAL_INST_PORT = 5236
MAL_DW_PORT = 52141
MAL_INST_DW_PORT = 33141
[MAL_INST2]
MAL_INST_NAME = DMSERVER2
MAL_HOST = 192.168.1.2
MAL_PORT = 61142
MAL_INST_HOST = 192.168.1.2
MAL_INST_PORT = 5236
MAL_DW_PORT = 52142
MAL_INST_DW_PORT = 33142
[MAL_INST3]
MAL_INST_NAME = DMSERVER3
MAL_HOST = 192.168.1.3
MAL_PORT = 61143
MAL_INST_HOST = 192.168.1.3
MAL_INST_PORT = 5236
MAL_DW_PORT = 52143
MAL_INST_DW_PORT = 33143
# dmdcr.ini
[DCR]
DCR_N_GRP = 1
DCR_VTD_PATH = /dm/fgdata/dcr
DCR_OGUID = 123456
[GRP1]
DCR_GRP_TYPE = CSS
DCR_GRP_NAME = GRP1
DCR_GRP_N_EP = 3
DCR_GRP_DSKCHK_CNT = 60
[GRP1_EP1]
DCR_EP_NAME = CSS1
DCR_EP_HOST = 192.168.1.1
DCR_EP_PORT = 9341
[GRP1_EP2]
DCR_EP_NAME = CSS2
DCR_EP_HOST = 192.168.1.2
DCR_EP_PORT = 9341
[GRP1_EP3]
DCR_EP_NAME = CSS3
DCR_EP_HOST = 192.168.1.3
DCR_EP_PORT = 9341
#
# 4. 配置故障自动切换
##
# 配置CSS服务
$ systemctl enable DmCSSService
$ systemctl start DmCSSService
##
# 配置DMSERVER服务
$ systemctl enable DmServiceDMSERVER1
$ systemctl start DmServiceDMSERVER1
$ systemctl enable DmServiceDMSERVER2
$ systemctl start DmServiceDMSERVER2
$ systemctl enable DmServiceDMSERVER3
$ systemctl start DmServiceDMSERVER3
##
# 配置故障自动切换参数
SQL> sp_set_para_value(0, ‘DW_INACTIVE_INTERVAL’, 60);
SQL> sp_set_para_value(0, ‘DW_CONFIRM_INTERVAL’, 10);
SQL> sp_set_para_value(0, ‘DW_ERROR_INTERVAL’, 10);
SQL> sp_set_para_value(0, ‘DW_MAX_FAILOVER_TIMES’, 3);
SQL> sp_set_para_value(0, ‘DW_FAILOVER_INTERVAL’, 60);
#
# 5. 测试故障自动切换
##
# 检查集群状态
$ dmasmtool
ASM> list instance;
$ disql SYSDBA/SYSDBA
SQL> select * from v$instance;
SQL> select * from v$cluster;
##
# 模拟主数据库故障
$ systemctl stop DmServiceDMSERVER1
##
# 检查故障自动切换状态
$ dmasmtool
ASM> list instance;
$ disql SYSDBA/SYSDBA
SQL> select * from v$instance;
SQL> select * from v$cluster;
##
# 恢复主数据库
$ systemctl start DmServiceDMSERVER1
##
# 检查集群状态
$ dmasmtool
ASM> list instance;
$ disql SYSDBA/SYSDBA
SQL> select * from v$instance;
SQL> select * from v$cluster;
# 6. 性能测试
#
# 执行压力测试
$ ./dmstress -U SYSDBA/SYSDBA -D fgedudb -n 100 -c 100 -t 3600
#
# 监控性能
$ top
$ free -h
$ iostat -x
# 7. 故障演练
#
# 定期进行故障演练
# 模拟主数据库故障
$ systemctl stop DmServiceDMSERVER1
# 检查故障自动切换状态
$ dmasmtool
ASM> list instance;
# 恢复主数据库
$ systemctl start DmServiceDMSERVER1
# 检查集群状态
$ dmasmtool
ASM> list instance;
# 故障自动切换部署案例
##
# 场景描述
某企业需要部署DM数据库故障自动切换,确保业务的连续性和数据的安全性。
##
# 需求分析
– 可用性要求:99.99%
– RTO:5分钟
– RPO:0
– 数据量:1.5TB
– 并发量:3000用户
##
# 架构设计
– 采用基于DM集群的故障自动切换
– 3节点架构(1主2备)
– 使用DM集群管理工具
– 主数据库和备数据库位于同一机房
– 网络使用10Gbps以太网
##
# 实施步骤
# 1. 环境准备
#
# 服务器配置
– 节点1(主数据库):24核CPU,128GB内存,2TB SSD
– 节点2(备数据库):24核CPU,128GB内存,2TB SSD
– 节点3(备数据库):24核CPU,128GB内存,2TB SSD
– 网络:10Gbps以太网
#
# 软件配置
– DM数据库版本:DM8
– 操作系统:Oracle Linux 9.3
# 2. 安装DM数据库
#
# 安装DM数据库
$ ./DMInstall.bin
# 3. 配置集群
#
# 创建集群配置文件
# dmcssm.ini
[CSSM]
CSSM_HOST = 192.168.1.1
CSSM_PORT = 9341
CSSM_LOG_PATH = /dm/log/css
CSSM_LOG_FILE_SIZE = 1024
CSSM_LOG_SPACE_LIMIT = 10240
CSSM_HEARTBEAT_INTERVAL = 1000
CSSM_HEARTBEAT_TIMEOUT = 10
# dmmal.ini
[MAL_INST1]
MAL_INST_NAME = DMSERVER1
MAL_HOST = 192.168.1.1
MAL_PORT = 61141
MAL_INST_HOST = 192.168.1.1
MAL_INST_PORT = 5236
MAL_DW_PORT = 52141
MAL_INST_DW_PORT = 33141
[MAL_INST2]
MAL_INST_NAME = DMSERVER2
MAL_HOST = 192.168.1.2
MAL_PORT = 61142
MAL_INST_HOST = 192.168.1.2
MAL_INST_PORT = 5236
MAL_DW_PORT = 52142
MAL_INST_DW_PORT = 33142
[MAL_INST3]
MAL_INST_NAME = DMSERVER3
MAL_HOST = 192.168.1.3
MAL_PORT = 61143
MAL_INST_HOST = 192.168.1.3
MAL_INST_PORT = 5236
MAL_DW_PORT = 52143
MAL_INST_DW_PORT = 33143
# dmdcr.ini
[DCR]
DCR_N_GRP = 1
DCR_VTD_PATH = /dm/fgdata/dcr
DCR_OGUID = 123456
[GRP1]
DCR_GRP_TYPE = CSS
DCR_GRP_NAME = GRP1
DCR_GRP_N_EP = 3
DCR_GRP_DSKCHK_CNT = 60
[GRP1_EP1]
DCR_EP_NAME = CSS1
DCR_EP_HOST = 192.168.1.1
DCR_EP_PORT = 9341
[GRP1_EP2]
DCR_EP_NAME = CSS2
DCR_EP_HOST = 192.168.1.2
DCR_EP_PORT = 9341
[GRP1_EP3]
DCR_EP_NAME = CSS3
DCR_EP_HOST = 192.168.1.3
DCR_EP_PORT = 9341
#
# 4. 配置故障自动切换
##
# 配置CSS服务
$ systemctl enable DmCSSService
$ systemctl start DmCSSService
##
# 配置DMSERVER服务
$ systemctl enable DmServiceDMSERVER1
$ systemctl start DmServiceDMSERVER1
$ systemctl enable DmServiceDMSERVER2
$ systemctl start DmServiceDMSERVER2
$ systemctl enable DmServiceDMSERVER3
$ systemctl start DmServiceDMSERVER3
##
# 配置故障自动切换参数
SQL> sp_set_para_value(0, ‘DW_INACTIVE_INTERVAL’, 60);
SQL> sp_set_para_value(0, ‘DW_CONFIRM_INTERVAL’, 10);
SQL> sp_set_para_value(0, ‘DW_ERROR_INTERVAL’, 10);
SQL> sp_set_para_value(0, ‘DW_MAX_FAILOVER_TIMES’, 3);
SQL> sp_set_para_value(0, ‘DW_FAILOVER_INTERVAL’, 60);
#
# 5. 测试故障自动切换
##
# 检查集群状态
$ dmasmtool
ASM> list instance;
$ disql SYSDBA/SYSDBA
SQL> select * from v$instance;
SQL> select * from v$cluster;
##
# 模拟主数据库故障
$ systemctl stop DmServiceDMSERVER1
##
# 检查故障自动切换状态
$ dmasmtool
ASM> list instance;
$ disql SYSDBA/SYSDBA
SQL> select * from v$instance;
SQL> select * from v$cluster;
##
# 恢复主数据库
$ systemctl start DmServiceDMSERVER1
##
# 检查集群状态
$ dmasmtool
ASM> list instance;
$ disql SYSDBA/SYSDBA
SQL> select * from v$instance;
SQL> select * from v$cluster;
# 6. 性能测试
#
# 执行压力测试
$ ./dmstress -U SYSDBA/SYSDBA -D fgedudb -n 100 -c 100 -t 3600
#
# 监控性能
$ top
$ free -h
$ iostat -x
# 7. 故障演练
#
# 定期进行故障演练
# 模拟主数据库故障
$ systemctl stop DmServiceDMSERVER1
# 检查故障自动切换状态
$ dmasmtool
ASM> list instance;
# 恢复主数据库
$ systemctl start DmServiceDMSERVER1
# 检查集群状态
$ dmasmtool
ASM> list instance;
4.2 DM数据库故障自动切换故障处理
以下是故障自动切换故障处理的案例:
#
# 故障自动切换故障处理案例
##
# 场景描述
故障自动切换出现故障,需要进行故障处理,确保故障自动切换的正常运行。
##
# 故障处理步骤
# 1. 检测故障
#
# 监控系统告警
– 收到故障自动切换故障告警
– 检查故障自动切换状态
#
# 确认故障
$ dmasmtool # 集群环境
ASM> list instance;
$ systemctl status DmMonitorService # 主从复制环境
# 2. 分析故障原因
#
# 检查错误日志
$ tail -f /dm/log/DmCSSService.log # 集群环境
$ tail -f /dm/log/DmMonitorService.log # 主从复制环境
$ tail -f /dm/log/DmServiceDMSERVER1.log
#
# 检查网络状态
$ ping 192.168.1.1
$ telnet 192.168.1.1 9341
#
# 检查数据库状态
SQL> select * from v$instance;
SQL> select * from v$database;
# 3. 处理故障
#
# CSS服务故障
– 重启CSS服务
– 检查CSS服务配置
– 检查网络连接
#
# 守护进程故障
– 重启守护进程
– 检查守护进程配置
– 检查网络连接
#
# 数据库故障
– 重启数据库
– 检查数据库配置
– 检查存储状态
# 4. 恢复故障自动切换
#
# 启动服务
$ systemctl start DmCSSService # 集群环境
$ systemctl start DmServiceDMSERVER1
$ systemctl start DmMonitorService # 主从复制环境
$ systemctl start DmServicefgedudb
#
# 检查故障自动切换状态
$ dmasmtool # 集群环境
ASM> list instance;
$ systemctl status DmMonitorService # 主从复制环境
#
# 验证数据同步
# 在主数据库上执行
SQL> insert into fgedu.t_user(id, name) values(1, ‘test’);
SQL> commit;
# 在备数据库上检查
SQL> select * from fgedu.t_user;
# 5. 预防措施
#
# 定期检查故障自动切换状态
$ dmasmtool # 集群环境
ASM> list instance;
$ systemctl status DmMonitorService # 主从复制环境
#
# 定期备份
$ dmrman
RMAN> backup database ‘/dm/fgdata/fgedudb/dm.ini’ full to backupset ‘/dm/backup/full.bak’;
#
# 定期测试故障切换
# 模拟主数据库故障
$ systemctl stop DmServiceDMSERVER1 # 集群环境
# 检查故障自动切换状态
$ dmasmtool
ASM> list instance;
# 恢复主数据库
$ systemctl start DmServiceDMSERVER1
# 检查集群状态
$ dmasmtool
ASM> list instance;
# 故障自动切换故障处理案例
##
# 场景描述
故障自动切换出现故障,需要进行故障处理,确保故障自动切换的正常运行。
##
# 故障处理步骤
# 1. 检测故障
#
# 监控系统告警
– 收到故障自动切换故障告警
– 检查故障自动切换状态
#
# 确认故障
$ dmasmtool # 集群环境
ASM> list instance;
$ systemctl status DmMonitorService # 主从复制环境
# 2. 分析故障原因
#
# 检查错误日志
$ tail -f /dm/log/DmCSSService.log # 集群环境
$ tail -f /dm/log/DmMonitorService.log # 主从复制环境
$ tail -f /dm/log/DmServiceDMSERVER1.log
#
# 检查网络状态
$ ping 192.168.1.1
$ telnet 192.168.1.1 9341
#
# 检查数据库状态
SQL> select * from v$instance;
SQL> select * from v$database;
# 3. 处理故障
#
# CSS服务故障
– 重启CSS服务
– 检查CSS服务配置
– 检查网络连接
#
# 守护进程故障
– 重启守护进程
– 检查守护进程配置
– 检查网络连接
#
# 数据库故障
– 重启数据库
– 检查数据库配置
– 检查存储状态
# 4. 恢复故障自动切换
#
# 启动服务
$ systemctl start DmCSSService # 集群环境
$ systemctl start DmServiceDMSERVER1
$ systemctl start DmMonitorService # 主从复制环境
$ systemctl start DmServicefgedudb
#
# 检查故障自动切换状态
$ dmasmtool # 集群环境
ASM> list instance;
$ systemctl status DmMonitorService # 主从复制环境
#
# 验证数据同步
# 在主数据库上执行
SQL> insert into fgedu.t_user(id, name) values(1, ‘test’);
SQL> commit;
# 在备数据库上检查
SQL> select * from fgedu.t_user;
# 5. 预防措施
#
# 定期检查故障自动切换状态
$ dmasmtool # 集群环境
ASM> list instance;
$ systemctl status DmMonitorService # 主从复制环境
#
# 定期备份
$ dmrman
RMAN> backup database ‘/dm/fgdata/fgedudb/dm.ini’ full to backupset ‘/dm/backup/full.bak’;
#
# 定期测试故障切换
# 模拟主数据库故障
$ systemctl stop DmServiceDMSERVER1 # 集群环境
# 检查故障自动切换状态
$ dmasmtool
ASM> list instance;
# 恢复主数据库
$ systemctl start DmServiceDMSERVER1
# 检查集群状态
$ dmasmtool
ASM> list instance;
4.3 DM数据库故障自动切换性能优化
以下是故障自动切换性能优化的案例:
#
# 故障自动切换性能优化案例
##
# 场景描述
故障自动切换性能较差,切换时间较长,需要进行优化。
##
# 优化步骤
# 1. 分析性能问题
#
# 检查系统性能
$ top
$ free -h
$ iostat -x
$ netstat -tuln
#
# 检查数据库性能
SQL> select * from v$session where status = ‘ACTIVE’;
SQL> select * from v$sql where elapsed_time > 10000000;
#
# 检查故障自动切换配置
$ cat /dm/app/bin/dmcssm.ini
$ cat /dm/app/bin/dmmal.ini
# 2. 优化网络性能
#
# 配置网络参数
# 增加网络缓冲区大小
$ echo “net.core.rmem_max = 16777216” >> /etc/sysctl.conf
$ echo “net.core.wmem_max = 16777216” >> /etc/sysctl.conf
$ echo “net.ipv4.tcp_max_syn_backlog = 4096” >> /etc/sysctl.conf
$ echo “net.ipv4.tcp_slow_start_after_idle = 0” >> /etc/sysctl.conf
$ sysctl -p
#
# 使用万兆网络
– 升级网络设备,使用10Gbps以太网
– 配置网络聚合(bonding)
# 3. 优化存储性能
#
# 使用SSD存储
– 主数据库和备数据库使用SSD存储
– 配置RAID 10
#
# 优化存储参数
# 调整IO调度器
$ echo “deadline” > /sys/block/sda/queue/scheduler
# 调整文件系统参数
$ mount -o noatime,nodiratime /dev/sda1 /dm/fgdata
# 4. 优化数据库参数
#
# 优化内存参数
SQL> sp_set_para_value(1, ‘BUFFER’, 4194304);
SQL> sp_set_para_value(0, ‘SORT_BUF_SIZE’, 67108864);
#
# 优化IO参数
SQL> sp_set_para_value(1, ‘DBWR_IO_SLAVES’, 4);
SQL> sp_set_para_value(1, ‘LOG_BUFFER’, 67108864);
#
# 优化故障自动切换参数
SQL> sp_set_para_value(0, ‘DW_INACTIVE_INTERVAL’, 60);
SQL> sp_set_para_value(0, ‘DW_CONFIRM_INTERVAL’, 10);
SQL> sp_set_para_value(0, ‘DW_ERROR_INTERVAL’, 10);
SQL> sp_set_para_value(0, ‘DW_MAX_FAILOVER_TIMES’, 3);
SQL> sp_set_para_value(0, ‘DW_FAILOVER_INTERVAL’, 60);
# 5. 优化CSS服务参数
#
# 调整CSS配置
# 修改dmcssm.ini中的CSSM_HEARTBEAT_INTERVAL为500
# 修改dmcssm.ini中的CSSM_HEARTBEAT_TIMEOUT为5
#
# 重启CSS服务
$ systemctl restart DmCSSService
# 6. 验证优化效果
#
# 测试系统性能
$ top
$ free -h
$ iostat -x
#
# 测试数据库性能
SQL> select * from v$session where status = ‘ACTIVE’;
SQL> select * from v$sql where elapsed_time > 10000000;
#
# 测试故障自动切换性能
# 模拟主数据库故障
$ systemctl stop DmServiceDMSERVER1
# 记录故障切换时间
$ date
# 检查故障自动切换状态
$ dmasmtool
ASM> list instance;
# 记录故障切换完成时间
$ date
#
# 恢复主数据库
$ systemctl start DmServiceDMSERVER1
# 检查集群状态
$ dmasmtool
ASM> list instance;
# 故障自动切换性能优化案例
##
# 场景描述
故障自动切换性能较差,切换时间较长,需要进行优化。
##
# 优化步骤
# 1. 分析性能问题
#
# 检查系统性能
$ top
$ free -h
$ iostat -x
$ netstat -tuln
#
# 检查数据库性能
SQL> select * from v$session where status = ‘ACTIVE’;
SQL> select * from v$sql where elapsed_time > 10000000;
#
# 检查故障自动切换配置
$ cat /dm/app/bin/dmcssm.ini
$ cat /dm/app/bin/dmmal.ini
# 2. 优化网络性能
#
# 配置网络参数
# 增加网络缓冲区大小
$ echo “net.core.rmem_max = 16777216” >> /etc/sysctl.conf
$ echo “net.core.wmem_max = 16777216” >> /etc/sysctl.conf
$ echo “net.ipv4.tcp_max_syn_backlog = 4096” >> /etc/sysctl.conf
$ echo “net.ipv4.tcp_slow_start_after_idle = 0” >> /etc/sysctl.conf
$ sysctl -p
#
# 使用万兆网络
– 升级网络设备,使用10Gbps以太网
– 配置网络聚合(bonding)
# 3. 优化存储性能
#
# 使用SSD存储
– 主数据库和备数据库使用SSD存储
– 配置RAID 10
#
# 优化存储参数
# 调整IO调度器
$ echo “deadline” > /sys/block/sda/queue/scheduler
# 调整文件系统参数
$ mount -o noatime,nodiratime /dev/sda1 /dm/fgdata
# 4. 优化数据库参数
#
# 优化内存参数
SQL> sp_set_para_value(1, ‘BUFFER’, 4194304);
SQL> sp_set_para_value(0, ‘SORT_BUF_SIZE’, 67108864);
#
# 优化IO参数
SQL> sp_set_para_value(1, ‘DBWR_IO_SLAVES’, 4);
SQL> sp_set_para_value(1, ‘LOG_BUFFER’, 67108864);
#
# 优化故障自动切换参数
SQL> sp_set_para_value(0, ‘DW_INACTIVE_INTERVAL’, 60);
SQL> sp_set_para_value(0, ‘DW_CONFIRM_INTERVAL’, 10);
SQL> sp_set_para_value(0, ‘DW_ERROR_INTERVAL’, 10);
SQL> sp_set_para_value(0, ‘DW_MAX_FAILOVER_TIMES’, 3);
SQL> sp_set_para_value(0, ‘DW_FAILOVER_INTERVAL’, 60);
# 5. 优化CSS服务参数
#
# 调整CSS配置
# 修改dmcssm.ini中的CSSM_HEARTBEAT_INTERVAL为500
# 修改dmcssm.ini中的CSSM_HEARTBEAT_TIMEOUT为5
#
# 重启CSS服务
$ systemctl restart DmCSSService
# 6. 验证优化效果
#
# 测试系统性能
$ top
$ free -h
$ iostat -x
#
# 测试数据库性能
SQL> select * from v$session where status = ‘ACTIVE’;
SQL> select * from v$sql where elapsed_time > 10000000;
#
# 测试故障自动切换性能
# 模拟主数据库故障
$ systemctl stop DmServiceDMSERVER1
# 记录故障切换时间
$ date
# 检查故障自动切换状态
$ dmasmtool
ASM> list instance;
# 记录故障切换完成时间
$ date
#
# 恢复主数据库
$ systemctl start DmServiceDMSERVER1
# 检查集群状态
$ dmasmtool
ASM> list instance;
Part05-风哥经验总结与分享
5.1 DM数据库故障自动切换最佳实践
基于多年DM数据库运维经验,总结以下故障自动切换最佳实践:
- 选择合适的故障自动切换类型:根据业务需求和系统架构选择合适的故障自动切换类型
- 合理规划硬件资源:选择高性能的服务器和存储设备,确保足够的资源
- 优化网络配置:确保节点间的网络带宽足够,网络延迟低
- 配置合理的参数:根据实际情况调整数据库和CSS服务参数,优化性能
- 建立完善的监控系统:部署完善的监控系统,及时发现和处理故障
- 定期进行故障演练:定期进行故障演练,确保故障自动切换的可靠性
- 建立完善的备份策略:建立完善的备份策略,确保数据的安全性
- 文档化配置和操作:记录故障自动切换的配置和操作步骤,便于后续参考
- 持续优化:持续进行性能优化,不断提高故障自动切换的效率
- 人员培训:对运维人员进行培训,提高其故障自动切换管理能力
生产环境建议:故障自动切换是数据库高可用性的重要组成部分,需要根据业务需求和实际情况选择合适的故障自动切换类型,并定期进行测试和优化,确保系统的稳定性和可靠性。
5.2 DM数据库故障自动切换常见问题
DM数据库故障自动切换常见问题及解决方案:
#
# 问题1:故障自动切换失败
#
# 原因分析
– 网络故障
– CSS服务故障
– 守护进程故障
– 数据库故障
– 配置错误
#
# 解决方案
– 检查网络连接
– 检查CSS服务状态
– 检查守护进程状态
– 检查数据库状态
– 检查配置文件
#
# 问题2:故障切换时间过长
#
# 原因分析
– 网络延迟大
– 数据库参数配置不合理
– CSS服务参数配置不合理
– 存储性能差
#
# 解决方案
– 优化网络配置
– 调整数据库参数
– 调整CSS服务参数
– 优化存储性能
#
# 问题3:脑裂
#
# 原因分析
– 网络分区
– CSS服务配置错误
– 守护进程配置错误
#
# 解决方案
– 使用Quorum机制
– 优化网络配置
– 调整CSS服务参数
– 调整守护进程配置
#
# 问题4:数据不一致
#
# 原因分析
– 主备复制延迟
– 故障切换过程中的数据丢失
– 配置错误
#
# 解决方案
– 优化主备复制性能
– 确保故障切换的正确性
– 检查配置文件
#
# 问题5:误切换
#
# 原因分析
– 心跳超时
– 网络抖动
– CSS服务参数配置不合理
#
# 解决方案
– 调整CSS服务参数
– 优化网络配置
– 使用健康检查机制
# 问题1:故障自动切换失败
#
# 原因分析
– 网络故障
– CSS服务故障
– 守护进程故障
– 数据库故障
– 配置错误
#
# 解决方案
– 检查网络连接
– 检查CSS服务状态
– 检查守护进程状态
– 检查数据库状态
– 检查配置文件
#
# 问题2:故障切换时间过长
#
# 原因分析
– 网络延迟大
– 数据库参数配置不合理
– CSS服务参数配置不合理
– 存储性能差
#
# 解决方案
– 优化网络配置
– 调整数据库参数
– 调整CSS服务参数
– 优化存储性能
#
# 问题3:脑裂
#
# 原因分析
– 网络分区
– CSS服务配置错误
– 守护进程配置错误
#
# 解决方案
– 使用Quorum机制
– 优化网络配置
– 调整CSS服务参数
– 调整守护进程配置
#
# 问题4:数据不一致
#
# 原因分析
– 主备复制延迟
– 故障切换过程中的数据丢失
– 配置错误
#
# 解决方案
– 优化主备复制性能
– 确保故障切换的正确性
– 检查配置文件
#
# 问题5:误切换
#
# 原因分析
– 心跳超时
– 网络抖动
– CSS服务参数配置不合理
#
# 解决方案
– 调整CSS服务参数
– 优化网络配置
– 使用健康检查机制
5.3 DM数据库故障自动切换优化建议
DM数据库故障自动切换优化建议:
- 选择合适的故障自动切换类型:根据业务需求和系统架构选择合适的故障自动切换类型
- 合理规划硬件资源:选择高性能的服务器和存储设备,确保足够的资源
- 优化网络配置:确保节点间的网络带宽足够,网络延迟低
- 配置合理的参数:根据实际情况调整数据库和CSS服务参数,优化性能
- 建立完善的监控系统:部署完善的监控系统,及时发现和处理故障
- 定期进行故障演练:定期进行故障演练,确保故障自动切换的可靠性
- 建立完善的备份策略:建立完善的备份策略,确保数据的安全性
- 文档化配置和操作:记录故障自动切换的配置和操作步骤,便于后续参考
- 持续优化:持续进行性能优化,不断提高故障自动切换的效率
- 学习新技术:不断学习新的故障自动切换技术,提高故障自动切换管理能力
风哥提示:故障自动切换是数据库高可用性的重要组成部分,DBA人员必须掌握故障自动切换的配置和管理方法,根据实际的业务需求和系统环境进行合理配置和优化,提高系统的可用性和可靠性。
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
