故障类型
公共网络故障
主库公共网络故障,主备库正常、内部网络正常情况下,用户无法连接主库执行正常的数据库操作。这种情况下,用户可以通过 Switchover 命令,将备库切换为主库,确保数
据库服务不受影响。
读写分离集群中备库公共网络故障,主备库正常、内部网络正常情况下,用户的所有请求会自动分发到主库执行。
内部网络故障
DM 数据守护对内部网络的可靠性提出了很高的要求,但是在实际应用中(比如异地容灾),存在很多不可控因素,内部网络无法保证绝对可靠。守护进程和守护进程之间、守护进程和监视器之间通过超时机制来检测是否出现故障,当内部网络出现故障时,超过设置时间未收到远程消息,会认定远程故障。
下面的表格说明在外部网络正常时,内部网络故障的场景以及守护进程的处理策略:
故障类型 | 手动切换处理策略 | 自动切换处理策略 |
---|---|---|
主库内部网卡故障 | 归档失败时,主库挂起,主库 Failover,归档设置无效,异步工作 | 归档失败时,主库挂起,主库 Failover,归档设置无效,异步工作归档失败时,主库挂起,主库守护进程保持 Confirm 状态,确认监视器自动寻找备库自动接管。因为外网还是正常的,在经过 SESS_FREE_IN_SUSPEND参数配置的时间后,老主库会自动断开所有连接,以便应用连接能够转移到新接管的主库上。注:此场景下主备库之间无法通信,但确认监视器仍然可以和备库的守护进程正常通信 |
备库内部网卡故障 | 归档失败时,主库挂起,主库 Failover,归档设置无效,异步工作 | 归档失败时,主库挂起,主库守护进程 Failover(经过 Confirm 状态确认后 Failover),归档设置无效,异步工作。注:此场景下主备库之间无法通信,但确认监视器仍然可以和主库的守护进程正常通信 |
主备库交换机故障 | 归档失败时,主库挂起,主库 Failover,归档设置无效,异步工作 | 归档失败时,主库挂起,主库守护进程保持 Confirm 状态,备库不会自动接管。 注:此场景下主备库之间,以及和确认监视器之间都无法正常通信 |
主备网卡同时故障 | 归档失败时,主库挂起,主库 Failover,归档设置无效,异步工作 | 归档失败时,主库挂起,主库守护进程保持 Confirm 状态,备库 不会自动接管。 注:此场景下主备库之间,以及和确认监视器之间都无法正常通信 |
集群
使用三节点的主备集群测试主库内部网卡故障和备库内部网卡故障,归档添加了强一致性参数。
集群ip、端口号:
对外服务的网卡为ens33,内部网络的网卡为ens36
节点 | 作用 | IP | PORT_NUM | MAL_DW_PORT | MAL_PORT | MAL_INST_DW_PORT |
---|---|---|---|---|---|---|
DM1 | 主库 | 192.168.159.10(外部) 192.168.68.10(内部) | 5236 | 52141 | 61141 | 33141 |
DM2 | 备库 | 192.168.159.11(外部) 192.168.68.11(内部) | 5236 | 52141 | 61141 | 33141 |
DM3 | 备库 | 192.168.159.12(外部) 192.168.68.12(内部) | 5236 | 52141 | 61141 | 33141 |
MON | 确认监视器 | 192.168.68.9(内部) |
集群状态:
1、主库内部网络故障
关闭主库DM1的内部网卡:
[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens36
ONBOOT=no
[root@localhost ~]# systemctl restart network
监视器信息:接收守护进程(DM1)消息超时,DM2接管主库
查看集群状态:DM1状态为ERROR
主库(DM1)实例日志:归档失败、主库挂起
2023-09-17 17:43:17.850 [ERROR] database P0000013364 T0000000000000013404 send realtime archive to instance[DM2, DM3] failed, code = -6010, begin_lsn = 39902, end_lsn = 39902!
2023-09-17 17:43:17.850 [INFO] database P0000013364 T0000000000000013404 rlog4_process_arch_failed, need_suspend:1
2023-09-17 17:43:17.850 [INFO] database P0000013364 T0000000000000013404 Send archive log to remote instance failed, switch all ep to SUSPEND status success!
重启DM1的内部网卡
[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens36
ONBOOT=yes
[root@localhost ~]# systemctl restart network
监视器信息:DM1恢复正常,但没有重新接管主库。DM1状态:suspend -> mount -> open
集群状态:DM2为主库
2、备库内部网卡故障
关闭备库DM3的内部网卡
[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens36
ONBOOT=no
[root@localhost ~]# systemctl restart network
监视器信息:接收守护进程(DM3)消息超时
DM3状态为ERROR,其他两台正常
重启备库DM3的内部网卡
[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens36
ONBOOT=yes
[root@localhost ~]# systemctl restart network
监视器:
集群恢复正常
3、主库公共网络故障
关闭主库DM1的外部网卡:
[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens33
ONBOOT=no
[root@localhost ~]# systemctl restart network
监视器没有打印信息,此时通过url连不上集群
在监视器中使用switchover dm2
将DM2切换为主库,即可通过url连接集群。