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 linux-syn25000是什么_当MySQL数据库遇到Syn Flooding相关推荐

  1. linux备份mysql需要暂停服务吗_【MySQL运维】线上MySQL数据库停服迁移流程

    一.数据备份与恢复阶段,选在凌晨1点进行操作,暂停服务进行备份(允许停服2个小时) 1.首先停止Nginx服务,并且修改数据库用户密码,防止还有新的连接进来 2.杀掉某个用户所有进程 for i in ...

  2. mysql 自动化运维工具_部署MySQL自动化运维工具inception+archer

    *************************************************************************** 部署MySQL自动化运维工具inception+ ...

  3. mysql是如何管理数据_【MySQL】如何管理数据库

    MySQL作为一款数据库管理系统(DataBase Management System,DBMS)软件,可以管理多个数据库.本文,主要讲述如何对一个数据库进行一系列的"增.删.改.查&quo ...

  4. mysql innodb 设置详解_【mysql】mysql innodb 配置详解

    MySQLinnodb 配置详解 innodb_buffer_pool_size:这是InnoDB最重要的设置,对InnoDB性能有决定性的影响.默认的设置只有8M,所以默认的数据库设置下面InnoD ...

  5. Mysql —— linux下使用c语言访问mySql数据库

    示例1: #include<stdio.h> #include<mysql.h> int main() { MYSQL mysql; mysql_init(&mysql ...

  6. mysql 5.7.13安装_安装MySQL 5.7.13

    一.简介: MySQL 5.7主要特性: 1.原生支持Systemd 2.更好的性能:对于多核CPU.固态硬盘.锁有着更好的优化 3.更好的lnnoDB存储引擎 4.更为健壮的复制功能:复制带来了数据 ...

  7. mysql killed进程不结束_优秀的数据库产品——MySQL 云数据库服务

    作为一种低成本,高性能,高可靠性和开放源代码的数据库产品,MySQL已在Internet公司中广泛使用. 例如,淘宝有数千个MySQL服务器. 尽管NoSQL在过去两年中发展迅速,新产品层出不穷,但N ...

  8. keepalived mysql双主架构图_基于MySQL双主的高可用解决方案理论及实践

    MySQL在互联网应用中已经遍地开花,但是在银行系统中,还在生根发芽的阶段.本文记录的是根据某生产系统实际需求,对数据库高可用方案从需求.各高可用技术特点对比.实施.测试等过程进行整理,完善Mysql ...

  9. mysql异地灾备架构_最佳实践 数据库异地灾备

    方案概述 根据企业所在行业.合规要求.数据规模.RPO/RTO要求的不同,数据库灾备目的和要求各不相同,投入成本也是不同的.阿里云数据库灾备解决方案提供实时数据备份能力,满足企业备份多样化选择.通过数 ...

  10. 如何修改mysql占用的端口号_修改mysql端口号(mysql的端口号)

    修改mysql端口号(mysql的端口号) 2020-05-07 22:12:00 共10个回答 如何查看mysql默认端口号和修改端口号 登录mysql,使用命令showglobalvariable ...

最新文章

  1. DDR的前世与今生(一)
  2. 2008r2添加没有应用程序服务器,将应用程序移动到服务器2008R2 64位时的AccessViolationException...
  3. C++——复制构造函数的形参为什么要是const引用
  4. spark的ContextCleaner清理
  5. 缓存与数据库一致性保证
  6. rvest | 网络爬虫初步——使用CSS选择器
  7. atitit 提升数据库死锁处理总结
  8. sci translate好用吗_收藏!SCI论文Introduction 和Conclusion的写作建议
  9. DAC+DMA+TIM实现音频播放问题记录
  10. 世界地图新西兰_世界地图新西兰的位置在哪里?新西兰与澳大利亚相隔多远?...
  11. 【NCRE】---拼接SQL语句(Case....When语句)
  12. Python class __int__容易理解
  13. 华硕主板设置完成通电开机,接上Wi-Fi智能插座,通电开机无效的原因???
  14. 在线免费完整PDF转PPT格式
  15. 任务2、闰年判断,计算圆面积
  16. 【OpenStack】在OpenStack上搭建OpenStack UT环境
  17. GD32F350.SPI软件片选模式
  18. 【RuoYi-Vue-Plus】扩展笔记 02 - 集成 WebSocket 发送消息到客户端(源码)
  19. python函数计算乘积教材课后题_Python3函数习题解析
  20. 自己动手写工具:百度图片批量下载器

热门文章

  1. 十份图表改变您对大数据增长的观点
  2. FileEncodingApplicationListener使用以及原理
  3. OpenI部署二——转载
  4. Linux下主DNS与辅助DNS的配置(上)
  5. groovy:gradle
  6. html编辑四则运算,简单的web四则运算计算器
  7. mysql dif_mysqldiff实现MySQL数据表比较
  8. erp系统方案书_解决方案 |快普M8为系统集成企业定制的ERP系统
  9. matlab 集成学习方法,将simulink集成到matlab脚本中
  10. java领单_Java-单例模式