您当前的位置:首页 > 电脑百科 > 数据库 > MYSQL

MySQL 网络延时参数设置建议

时间:2020-10-14 09:37:45  来源:  作者:

作者:毛思平

工作11年,从事数据库工作7年,主要在金融行业。主要是做oracle,MySQL。现在在农行软开中心主要做数据库应用方面的研究。

本文来源:原创投稿

*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。


近期投产生产 MySQL组复制集群偶尔出现节点被逐出集群的情况,怀疑是网络抖动导致。查询官方文档发现,MySQL 8.0.13 版本引入集群网络延迟容错参数group_replication_member_expel_timeout。

 

该参数的官方解释:

 

技术分享 | MySQL 网络延时参数设置建议

 

翻译:

group_replication_member_expel_timeout 指定组复制组成员在产生怀疑之后,从组中排除怀疑失败的成员之前等待的时间(以秒为单位)。在产生怀疑之前的最初 5 秒检测时间不计入该时间。直到并包括 MySQL 8.0.20 在内,group_replication_member_expel_timeout 默认值均为 0,这意味着没有等待时间,并且在 5 秒钟的检测时间结束后,可疑成员应立即被驱逐。从 MySQL 8.0.21 开始,该值默认为 5,这意味着在 5 秒钟的检测时间后如果该节点还是不正常,那会在等 5 秒钟,如果可疑成员还是不正常,超过这个时间将被驱逐。

为验证该参数对集群影响,我们通过实验模拟不同时长的网络延迟,然后调整group_replication_member_expel_timeout 值观察该参数值对集群驱逐故障节点的影响。

 

测试环境如下:

 

技术分享 | MySQL 网络延时参数设置建议

 

测试方法:

1、设置各节点 group_replication_member_expel_timeout 值Y。

2、在节点模拟网络断开并设置断开时长X。

3、待网络恢复后查看各节点数据库日志,记录数据库状态变化及变化时间。

4、登陆数据库查看集群状态。

5、记录测试结果。

6、分别调整Y值或X值循环1-5步,循环测试。

 

测试命令:

-- 模拟网络延时
# tc qdisc add dev eth0 root netem delay 10s

-- 查看集群状态

mysql> select * from performance_schema.replication_group_member_stats;
-- 查看数据库日志
# tail -f mysqld.log

 

测试过程:

1.首先设置各节点 group_replication_member_expel_timeout 值5;

技术分享 | MySQL 网络延时参数设置建议

 

2.设置网络延迟前检查集群状态

技术分享 | MySQL 网络延时参数设置建议

 

3.在 mgr2 节点通过tc模拟网络延迟为 10 秒,并记录开始时间;

技术分享 | MySQL 网络延时参数设置建议

 

4.通过 mgr1 节点查看集群状态,先开始集群状态是 UNREACHABLE(故障检测过程怀疑无法联系该成员,因为组消息已超时。),后面节点超时后被踢出集群;

技术分享 | MySQL 网络延时参数设置建议

 


技术分享 | MySQL 网络延时参数设置建议

 

5.通过观察 mgr2 节点的错误日志,在 14:08:50,也就是设置延迟 6 秒钟后,mgr2 节点无法访问 mgr1、mgr3 两个节点;在 14:08:54,与 mgr3 节点双向连接出现问题,说明在检测期 + group_replication_member_expel_timeout 这个 10 秒的周期内,mgr2 与其他节点无法联系,被踢出集群;

技术分享 | MySQL 网络延时参数设置建议

 

6.在 mgr2 节点取消 tc 模拟网络延迟 tc qdisc del dev eth0 root

技术分享 | MySQL 网络延时参数设置建议

 

7.在网络恢复后,mgr2 节点由于 auto-rejoin 机制,尝试重新加入集群,并通过 binlog 恢复数据,数据和其他节点一致后,恢复正常;

技术分享 | MySQL 网络延时参数设置建议

 

注意:如果网络延迟长时间未恢复,故障节点会出现 ERROR 状态,这时需要通过重启组复制,进行恢复;

 

测试结果:

 

技术分享 | MySQL 网络延时参数设置建议

 

参数设置建议:

从目前测试结果来看,参数 group_replication_member_expel_timeout 的设置能避免数据库集群间出现网络延迟时,延迟节点被立即逐出集群。考虑到数据库繁忙期间无法及时响应其他节点探测的情况或者数据库变更关闭节点情况,该值建议初始设置为5,正常网络延迟都在1秒以内,如果出现故障要设置这个超时退出的时间,建议先ping一下ip,确定网络延迟情况,在进行设置。

 

需要注意:

1.如果退出超时时间设置过长,要确保 XCom 的消息缓存足够大,可以容纳指定时间段以及初始5秒检测时间段内的预期消息量,否则成员将无法重新连接;可以使用group_replication_message_cache_size 系统变量来调整缓存大小限制。

2.如果网络恢复后,故障节点会尝试自动加入集群,从 MySQL 8.0.21 开始,默认是3次,这意味着该成员自动进行3次尝试重新加入集群,每次间隔5分钟;可以通过group_replication_autorejoin_tries 这个参数调整尝试自动加入集群的次数。

 

参考资料

  • https://dev.mysql.com/doc/refman/8.0/en/group-replication-responses-failure-expel.html
  • https://dev.mysql.com/doc/refman/8.0/en/group-replication-options.html
  • https://mp.weixin.qq.com/s/DPFmCGmEfubRWpoikbY-XQ


Tags:MySQL 网络延时   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
近期投产生产 MySQL组复制集群偶尔出现节点被逐出集群的情况,怀疑是网络抖动导致。查询官方文档发现,MySQL 8.0.13 版本引入集群网络延迟容错参数group_replication_member_expel_timeout。...【详细内容】
2020-10-14  Tags: MySQL 网络延时  点击:(117)  评论:(0)  加入收藏
▌简易百科推荐
作者:雷文霆 爱可生华东交付服务部 DBA 成员,主要负责Mysql故障处理及相关技术支持。爱好看书,电影。座右铭,每一个不曾起舞的日子,都是对生命的辜负。 本文来源:原创投稿 *爱可生...【详细内容】
2021-12-24  爱可生    Tags:MySQL   点击:(6)  评论:(0)  加入收藏
生成间隙(gap)锁、临键(next-key)锁的前提条件 是在 RR 隔离级别下。有关Mysql记录锁、间隙(gap)锁、临键锁(next-key)锁的一些理论知识之前有写过,详细内容可以看这篇文章...【详细内容】
2021-12-14  python数据分析    Tags:MySQL记录锁   点击:(17)  评论:(0)  加入收藏
binlog 基本认识 MySQL的二进制日志可以说是MySQL最重要的日志了,它记录了所有的DDL和DML(除了数据查询语句)语句,以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二...【详细内容】
2021-12-14  linux上的码农    Tags:mysql   点击:(13)  评论:(0)  加入收藏
为查询优化你的查询 大多数的MySQL服务器都开启了查询缓存。这是提高性最有效的方法之一,而且这是被MySQL的数据库引擎处理的。当有很多相同的查询被执行了多次的时候,这些查...【详细内容】
2021-12-09  元宇宙iwemeta    Tags:mysql   点击:(15)  评论:(0)  加入收藏
测试的目的和原因,公司有很多程序员,每个程序员对数据库和表结构都有自己的理解。而且每个程序员的理解往往是以效率考虑。既然都是为了效率考虑,那么我就来测试一下究竟哪种使...【详细内容】
2021-12-08  吴彬的分享    Tags:Mysql数据库   点击:(14)  评论:(0)  加入收藏
当你们考虑项目并发的时候,我在部署环境,当你们在纠结使用ArrayList还是LinkedArrayList的时候,我还是在部署环境。所以啊,技术不止境,我在部环境。今天这篇文章缕一下在同一台服...【详细内容】
2021-12-08  秃头码哥    Tags:MySQL数据库   点击:(16)  评论:(0)  加入收藏
对于数据分析来说,MySQL使用最多的是查询,比如对数据进行排序、分组、去重、汇总及字符串匹配等,如果查询的数据涉及多个表,还需要要对表进行连接,本文就来说说MySQL中常用的查询...【详细内容】
2021-12-06  笨鸟学数据分析    Tags:MySQL   点击:(19)  评论:(0)  加入收藏
在学习SQL语句之前,首先需要区分几个概念,我们常说的数据库是指数据库软件,例如MySQL、Oracle、SQL Server等,而本文提到的数据库是指数据库软件中的一个个用于存储数据的容器。...【详细内容】
2021-11-24  笨鸟学数据分析    Tags:SQL语句   点击:(23)  评论:(0)  加入收藏
概述以前参加过一个库存系统,由于其业务复杂性,搞了很多个应用来支撑。这样的话一份库存数据就有可能同时有多个应用来修改库存数据。比如说,有定时任务域xx.cron,和SystemA域...【详细内容】
2021-11-05  Java云海    Tags:分布式锁   点击:(31)  评论:(0)  加入收藏
MySQL的进阶查询 一、 按关键字排序 使用ORDERBY语句来实现排序排序可针对一个或多个字段ASC:升序,默认排序方式 【升序是从小到大】DESC:降序 【降序是从大到小】ORDER BY的...【详细内容】
2021-11-05  Java热点    Tags:SQL语句   点击:(27)  评论:(0)  加入收藏