我的编程空间,编程开发者的网络收藏夹
学习永远不晚

如何解决当MySQL数据库遇到Syn Flooding问题

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

如何解决当MySQL数据库遇到Syn Flooding问题

这篇文章给大家分享的是有关如何解决当MySQL数据库遇到Syn Flooding问题的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

Syn攻击是最常见又最容易被利用的一种攻击手法,利用TCP协议的缺陷,发送大量伪造TCP连接请求,常用假冒的IP发来海量的SYN包,被攻击的服务器回应SYN+ACK,因为对方是假冒的IP,永远收不到包并且不会回应,导致被攻击服务器保持大量SYN_RECV状态的半连接,并且会重试默认5次回应握手包,塞满TCP等待连接队列,资源耗尽,让正常的业务请求连接不进来。

Syn攻击常见于应用服务器,而数据库服务器在内网中,应该很难碰到类似的攻击,但有时候应用程序如果和数据库建连姿势不正确,在数据库端,也会被认为是Syn攻击,并拒绝连接建立。

【问题描述】

数据库突发的拒绝链接,应用报错,出问题的时间点上,数据库服务器的操作系统日志里,即/var/log/messages,可看到如下报错信息:

kernel: possible SYN flooding on port 3306. Sending cookies.

【问题分析】

出问题的点上,从数据库的监控指标来看,Threads Connected 这个指标有增长。这个也是很明显,因为对数据库来说,Syn Flooding就是应用程序突发的对数据库发起建连,操作系统处理不过来,所以报Syn Flooding, 从数据库的性能指标来看,连接数肯定是会有一个突发的增长。应对方案就是需要分析这些突发的增长是怎么来的,削峰填谷,让连接更平稳。

【解决方案】

在数据库服务端,做如下调整:这个调整的意思是说:增加TCP半连接的缓冲,默认值是2048,我们调整到8192,让系统的抗突发压力增大一些。Tcp_syn_retires和Tcp_synack_retires默认是5,也就是服务器端要发送五次包,才会终止重试,我们把这个参数调整为2. 只重试一次,让出错的包尽量提早出错,以减少缓存的连接数。

echo 8192 > /proc/sys/net/ipv4/tcp_max_syn_backlog
echo 2 > /proc/sys/net/ipv4/tcp_syn_retries
echo 2 > /proc/sys/net/ipv4/tcp_synack_retries

这个参数调整,即时生效,无需重启。当然服务器重启后,这些参数也会回退到默认值。经此调整,数据库端的抗压能力得到加强,但并没有完全解决问题。

我们在客户端也做相应调整:

为减少数据库的连接数压力,通常我们建议连接池做如下配置:

testWhileIdle="false"。空闲时不检测连接串健康
minIdle="0"。连接池里面空闲连接的最小个数
maxAge="30000"。一个链接超过多少毫秒就可以回收掉。
initialSize="1"。连接池里面初始连接的最小个数
timeBetweenEvictionRunsMillis="5000"。回收线程的运行间隔(毫秒)

对于现在的场景,我们建议调高minIdle这个参数,从0调整到5. 让连接池平时有5个空闲连接存在,这样,发起对数据库请求的时候,会先使用这5个空闲连接。达到削峰填谷的作用。当然,副作用就是数据库平时的连接数会增长。具体调整到多少合适,需要结合实际的数据库连接负载情况。对于.NET程序,也有相应的连接池参数可以调整:可以适当修改minPoolSize这个参数,也调整到5.

经此调整,基本上大部分的数据库Syn Flooding问题都能解决。

当然,这些都是调优的手段,只能是微微的改善系统。提高抗压能力。最终的分析,还是要看连接压力从何而来。以及为何需要突发建立大量连接到数据库。对于此种突发场景,用数据库是否合适。替代方案是前面用Redis加一层缓冲。避免突发的对数据库发起建连请求。这个就涉及到应用的改造了。

感谢各位的阅读!关于“如何解决当MySQL数据库遇到Syn Flooding问题”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

如何解决当MySQL数据库遇到Syn Flooding问题

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Excel数据导入Mysql常见问题汇总:如何解决导入数据时遇到的乱码问题?

Excel数据导入Mysql常见问题汇总:如何解决导入数据时遇到的乱码问题?导入Excel数据到Mysql数据库是日常工作中常见的任务。但有时候在导入过程中,会遇到乱码问题,导致数据显示不正确。本文将总结常见的乱码问题,并提供解决方案,以帮
2023-10-22

数据库编程中遇到的Python问题及解决方法

数据库编程中遇到的Python问题及解决方法在进行数据库编程时,我们经常会遇到各种各样的问题,如连接数据库、创建表、插入数据、查询数据等等。本文将围绕数据库编程中常见的问题展开讨论,并提供相应的解决方法和代码示例,以帮助读者更好地理解和使用
2023-10-22

如何解决MySQL安装遇到Start service红叉问题

目录mysql安装遇到Start service红叉解决方案总结MySQL安装遇到Start service红叉有好多小伙伴在安装MySQL的时候,没有进行几步就出现了与安装教程不一样的步骤,出现“Stajavascriptr
如何解决MySQL安装遇到Start service红叉问题
2024-10-04

MySQL 数据库如何解决高并发问题

前言我们都知道初创公司一开始都是以单体应用为首要架构,一般都是单体单库的形式。但是版本以及版本的迭代,数据库需要承受更多的高并发已经成了 架构设计 需要考虑的点。 那么解决问题,就得说到方案。但是方案有很多,我们该怎么选择呢? 优化与方案
2022-05-20

Excel数据导入Mysql常见问题汇总:如何解决导入时遇到的数据长度超限问题?

Excel数据导入Mysql常见问题汇总:如何解决导入时遇到的数据长度超限问题?导入Excel数据到Mysql数据库是日常工作中经常遇到的任务之一。但是,在导入过程中常常会遇到数据长度超限的问题,特别是当Excel表格中某些字段的数据长度超
2023-10-22

Excel数据导入Mysql常见问题汇总:如何解决导入过程中遇到的数据校验问题?

Excel数据导入Mysql常见问题汇总:如何解决导入过程中遇到的数据校验问题?导入Excel数据到MySQL数据库是我们在数据处理工作中经常需要进行的操作。然而,在这个过程中常常会遇到一些数据校验问题,导致导入失败或者导入后的数据不符合我
2023-10-22

Excel数据导入Mysql常见问题汇总:如何解决导入数据时遇到的大批量插入问题?

Excel数据导入Mysql常见问题汇总:如何解决导入数据时遇到的大批量插入问题?导入Excel数据到MySQL是日常开发中经常遇到的任务之一。对于少量数据的导入,可以使用数据库客户端工具或者命令行进行插入操作。但当面对大批量数据导入时,简
2023-10-22

如何解决Mysql更新自增主键id遇到的问题

这篇文章主要为大家展示了“如何解决Mysql更新自增主键id遇到的问题”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何解决Mysql更新自增主键id遇到的问题”这篇文章吧。为什么要更新自增id
2023-06-21

Excel数据导入Mysql常见问题汇总:如何解决导入时遇到的主键冲突问题?

Excel数据导入Mysql常见问题汇总:如何解决导入时遇到的主键冲突问题?导入数据是数据管理工作中常见的任务之一,特别是当需要将大量数据从Excel表格中导入到Mysql数据库时,可能会遇到各种各样的问题。其中一个常见的问题就是主键冲突。
2023-10-22

编程热搜

目录