MySQL ProxySql 由于漏洞扫描导致的 PROXYSQL CPU 超高

Wesley13
• 阅读 656

MySQL  ProxySql   由于漏洞扫描导致的 PROXYSQL CPU 超高

ProxySQL 本身是一款非常棒的MYSQL 中间件的开源产品, 在公司运行了一段时间后,突然一天报警,所在机器的CPU 出奇的高,之前在测试系统, 预生产, 以及生产系统均没有出现问题. 开始未来紧急解决问题,重新启动了proxysql服务,并查看错误日志.

MySQL  ProxySql   由于漏洞扫描导致的 PROXYSQL CPU 超高

MySQL  ProxySql   由于漏洞扫描导致的 PROXYSQL CPU 超高

PROXYSQL 的系统版本的2.012 MYSQL 的版本是8.011 , PROXYSQL 的错误在上边. 但后期又继续发生了类似的问题, 并且其中有一次,重新启动PROXYSQL 后在 1- 2秒后, 问题重复,CPU 又开始标高,但CPU 等其他指标都比较低.

随后我们针对PROXYSQL 进行了压缩, 通过模仿高并发连接, 1000并发,不断的进行数据访问, 以及模拟突然的连接失效(断掉), 看看PROXYSQL 本身是不是出现的我们遇到的类似的问题.

在压力测试的过程中,PROXYSQL 系统本身没有出现任何异常的情况, CPU 始终在 %3以下, 在压力测试超过1000并发后, 并且PROXYSQL 最大设置的MAX Connection 1000 的情况下, PROXYSQL 在短时间有CPU 消耗达到25%的情况.  但整体的情况是稳定的.

那到底什么导致了PROXYSQL 系统的CPU 在某个时间段突然超高并且只能进行相关的重启后,CPU 才能下降.

这里和公司的网络安全人员进行了相关的配合,其中发现在漏洞扫描期间,PROXYSQL 有CPU 超高的时间匹配度.随后网络安全人员,进行了如下测试,

PROXYSQL 

MySQL  ProxySql   由于漏洞扫描导致的 PROXYSQL CPU 超高

在漏洞扫描程序扫描时, 会对PROXYSQL 开放的 X11  协议端的端口进行扫描,在扫描时会反馈,下面的信息, 8.0.5 是在PROXYSQL 设置的,因为如果使用了MYSQL 8 后在PROXYSQL 中的version 信息不设置的情况下, 会导致JAVA 程序访问MYSQL的问题, 因为8.0以后的MYSQL 去掉了 query_cache , 但如果PROXYSQL 不设置版本,则 JAVA 的封包的程序会回馈, query_cache 找不到的 问题, 而 mysql_native_password 也是因为兼容大部分MYSQL 原理的程序登录的方式,将MYSQL 的默认密码验证的方式调整成原来5.X的方式. 

MySQL  ProxySql   由于漏洞扫描导致的 PROXYSQL CPU 超高

所以这里漏扫程序会对敏感词 password 展开尝试性的密码匹配库的嗅探工作,而这样的工作导致,proxysql 在X11 端口中出现问题,进入一个死循环.

MySQL  ProxySql   由于漏洞扫描导致的 PROXYSQL CPU 超高

最终导致PROXYSQL 出现CPU 超高的问题.

解决方案: 在防火墙的IPS 模块对无效请求的数据包进行过滤(其实网络的问题,我不大理解到底IPS 是什么,怎么就对无效请求的数据包进行过滤,就避免了PROXYSQL 的CPU 不在提高,回来还的深入的问一下网络人员)

另外对其中一个参数,mysql-threads 在解决问题的时候,有人提出加大proxysql  中的 mysql-threads 的线程数,提高 proxysql 处理的速度,降低CPU 的 usage 的百分比.

MySQL  ProxySql   由于漏洞扫描导致的 PROXYSQL CPU 超高

实际这样的想法是错误, mysql-threads 本身针对当前CPU 的数量进行的设置,PROXYSQL 本身针对系统的运行期间,CPU 主要消耗在  SYSTEM CPU ,而不是USER CPU , 这里的意思是CPU 主要是消耗子在将信息从 客户端发送给MYSQL 以及信息专递回 客户端的, 如果 USER CPU 本身消耗的很高的情况下,则说明PROXYSQL 在处理数据方面有问题, 例如设置了太多的规则,导致一个SQL 在规则方面耗费的CPU 较多的情况.

另外盲目调整 mysql-threads 本身就是一个问题, 如果CPU 本身CORE 就很少,但是PROXYSQL 使用CPU 较多, 调整mysql-thread 更大的情况下,会造成CPU 上下文切换比较频繁,最终导致CPU 更加的繁忙.

所以如果CPU 高先分析以下几个问题

1  CPU 在什么 时间点高,是一直高还是有时间段

2  如果是有时间点的高,则考虑业务,或者业务触发的某些业务量上涨后的问题

3  如果是CPU 一直高,则考虑是由于一些BUG 或者 非业务的问题造成的,主要就要去查看日志,和进行STRACE 问题了, 难度可能就有提高了,另外PROXYSQL 中的设置的规则太多也可能会造成相关的问题.

MySQL  ProxySql   由于漏洞扫描导致的 PROXYSQL CPU 超高

本文分享自微信公众号 - AustinDatabases(AustinDatabases)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
为什么mysql不推荐使用雪花ID作为主键
作者:毛辰飞背景在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究
Python进阶者 Python进阶者
11个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这