MSSQL:模拟故障
模拟NFS存储波动引发挂载点IO失效,可从网络、服务器、存储设备三方面入手:
网络层面
- 模拟网络延迟与丢包:借助网络模拟工具,如Linux系统的
netem
。以Ubuntu系统为例,先安装iproute2
工具包(若未安装),执行命令sudo apt install iproute2
。然后使用命令sudo tc qdisc add dev <网卡名> root netem delay <延迟时间>ms loss <丢包率>%
,如sudo tc qdisc add dev eth0 root netem delay 100ms loss 5%
,为指定网卡(eth0
)添加100毫秒延迟和5% 丢包率,模拟网络不稳定。 - 模拟网络中断:通过在网络设备(路由器、交换机)上配置访问控制列表(ACL),或在服务器上使用
iptables
等防火墙工具,临时阻断NFS客户端与服务器间的网络连接。例如在Linux服务器上执行sudo iptables - I INPUT - s <NFS服务器IP> - j DROP
,丢弃来自NFS服务器的数据包,模拟网络中断;恢复连接则执行sudo iptables - D INPUT - s <NFS服务器IP> - j DROP
。
服务器层面
- 模拟服务器负载过高:利用压力测试工具,如
stress
。在NFS服务器上安装stress
,以CentOS系统为例,执行sudo yum install stress
。然后使用命令stress - c <CPU核心数> - m <内存使用量MB> -- hdd <磁盘操作数>
,如stress - c 4 - m 1024 -- hdd 10
,模拟4个CPU核心满载、占用1024MB内存及10次磁盘操作,使服务器负载升高,影响NFS服务性能。 - 模拟NFS服务异常:在NFS服务器上,使用命令停止或重启NFS服务。以Ubuntu系统为例,执行
sudo service nfs - kernel - server stop
停止服务,模拟服务故障;执行sudo service nfs - kernel - server start
重启服务。也可修改NFS配置文件(如/etc/exports
),错误配置共享目录权限等参数,引发NFS服务问题。
存储设备层面
- 模拟磁盘I/O性能下降:使用
dd
命令对磁盘进行大量读写操作,占用磁盘带宽,模拟I/O性能下降。如执行dd if=/dev/zero of=/mnt/nfs - mount - point/testfile bs=1M count=1000
,在NFS挂载点(/mnt/nfs - mount - point
)创建一个1000MB的文件,大量占用磁盘I/O资源。 - 模拟磁盘故障:在虚拟机环境下,可通过管理界面移除或断开虚拟磁盘与虚拟机的连接,模拟磁盘故障;在物理机上,可借助磁盘管理工具(如
smartctl
)对磁盘进行错误注入操作,但此操作有数据丢失风险,需谨慎操作且提前备份数据。
日志
日志关键内容分析:
-
Always On 可用性组主备切换
- 状态变化:
NOT_AVAILABLE → RESOLVING_NORMAL → PRIMARY_PENDING → PRIMARY_NORMAL
,表明本地副本加入可用性组,逐步完成角色转换,最终成为主副本(PRIMARY_NORMAL
)。preparing to transition to the primary role
直接说明实例正准备切换为主角色,属于正常的主备切换流程。
- 状态变化:
-
HADR 传输连接异常
- 连接建立与超时:
- 先记录
A connection ... has been successfully established
,说明主备副本间的连接曾正常建立。 - 随后出现
Timeout Detected 10 s
和A connection timeout has occurred
,表明主备副本(E1855EEC-...
与7E186029-...
)间的通信因超时中断。可能原因包括:- 网络不稳定(延迟、丢包)或防火墙策略干扰;
- 备库角色异常(如切换后未及时恢复正常状态)。
- 先记录
- 连接建立与超时:
-
服务器主动关闭
- 最后
Server shut down by NOWAIT request from login sa
表明,实例被用户sa
使用SHUTDOWN WITH NOWAIT
命令强制关闭,属于人为主动操作,同时导致 SQL Trace 停止。
- 最后
总结:
日志完整记录了 MSSQL 可用性组主备切换过程,切换后 HADR 传输因超时出现连接异常(需排查网络或备库状态),最终实例被 sa
用户主动关闭。需结合网络监控、备库状态进一步定位超时原因,同时关注人为操作对实例的影响。