mysql漂移后造成事务堆积_SIP 漂移时是否会影响正在使用的数据库连接-爱可生...

原标题:SIP 漂移时是否会影响正在使用的数据库连接-爱可生

5b208325dc6c6bf631f738e4c5289442.png

问题

我们经常使用浮动 IP(SIP,或叫 VIP),来完成数据库的高可用部署。业务通过访问浮动 IP,始终访问主数据库。

如果业务正在访问数据库时,数据库主从发生切换,导致 SIP 漂移,那正在使用的数据库连接会受到影响么?

实验

我们创建同子网的两台虚拟机,分别安装 MySQL。

再准备一台额外的虚拟机,用来模拟业务,访问数据库,此处省略安装过程。

这两台虚拟机的 IP 分别是 x.x.x.37 和 x.x.x.39,为了容易区分,我们设置 PS1,来区分两个 linux 的会话。

下图以 37 为例,这里设置了 PS1,并确认机器上有创建好数据库,

eb62f59f29ac2501d4d9e8bd52e01452.png

39 与之类似:

e8730b129a19806daccb76e36141e2fd.png

我们再选取一个 SIP: x.x.x.200,将其绑定到 37 上,

de95c634801373dc4c2e2285681f1a45.png

向子网进行 arp 宣告,通知大家 ip 变更了:

47d1d3f002649473245a47c579dcbc63.png

现在业务机器上,测试一下访问 SIP 成功:

我们在数据库中用 sysbench 灌入数据,此处省略步骤,只看结果:

8f4dd3898b44509cc4c33132a69d0e7a.png

然后向数据库执行一个 select,这里我们用了一个 sleep,使得数据库返回结果集慢一些,大概每秒输出 1000 行左右:

246f454c9d8dd66853d87716cbfe65f6.png

执行 SQL 后,MySQL 客户端会不停输出结果,如果发生了任何连接问题,我们可以立刻发现。

现在让 SIP 发生一次切换。准备好如下命令:先在 37 上卸下 SIP,再在 39 上加上 SIP,发送 arp 宣告。

15a67acdcbba7422dc75d17aae31b175.png

e114aa48c26495e1056502278f8dea84.png

准备好命令后,开始拼手速,让命令以很短的时间先后执行。

执行后,会发现业务机上跑的 select 输出停了,会停很久以后,

78b4b7bfbe6f1ca70804693b9dd02415.png

我们来看看这个现象的原理:

在 37 上,我们可以找到这根连接:

abf7268962fed5184b0796c39e66d24f.png

几十秒后,进入 FIN-WAIT-1 阶段,也就是说 37 已经感知到这根连接不太对,再 48 秒后,会关闭这根连接:

15a3cacbbf6339780b9e577269598dc2.png

而此时在业务机器上,这根连接依然存在,会在 116 分钟以后,探测 tcp keepalive 失败后,才感知到连接出问题:

b95d5e4af5259d82aa38c4574568a03e.png

我们试着将业务机的 tcp keepalive 间隔调小一点,看看能不能让业务机更快感知到连接出了问题:

ab200248c3ad654f3799a40dd9e935fc.png

再重做一下实验,会发现几秒钟后,MySQL client 就会感知到连接出了问题:

271ac305783c1df76d573824c805a426.png

我们来抓个包看看:

93919410f20ea34f64e2734c96c4d30d.png

重做试验,用 Wireshark 打开抓包结果:

07df38d95bd2927e4d1f49ccaaa401e4.png

可以看到 SIP 切换后,TCP Keepalive 包发往了交换机,但没有收到应答包。当超过 TCP Keepalive 的指定次数后,应用机器感知到了连接错误,发起了 RST 断开连接。

也就是说:当 SIP 发生切换时,旧连接发出的包已经被丢弃了,旧连接会一直等待应答,所以需要 TCP keepalive 这种主动探测机制,才会探测到无应答的状况。

小贴士

当应用连接到数据库时,建议要配置 TCP keepalive 功能,并且间隔要调小到业务能接受的范围内。默认的 TCP keepalive 的间隔是几小时才能感知故障。

但是:不要模仿实验中这样,调整操作系统级别的 TCP Keepalive 参数。应在应用建立连接时将 TCP keepalive 参数配置在连接级别。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值