生产监控报警一:阿里云 RDS 监控报警
前言
早上挤地铁的时候收到了阿里云的监控报警,RDS 的 CPU 的负载达到了 90%
排查
因为是昨天晚上上的线,微信公众号也是在晚上才放出活动链接,当时也是考虑了可能会到来的使用量,把后台活动负载到了 3 台服务器,可是没想到竟然是 mysql 报出了告警。
查看了数据库的使用量,发现总共有 3 w 多条的插入记录,而 CPU 的使用率确一直保持在 90% 不下来,正常情况下,2核4G 的一台 mysql 数据库不可能被这点插入量就给干趴下了,而且只是 CPU 的使用率特别高,内存的使用率确很少,问题可能出在 SQL 执行上面,部分 SQL 没有优化好导致的。
百万级别的访问量才算是大数据,需要从架构的层面去考虑,3万的访问量并不需要在架构上优化,直连可能都可以顶住。
看了下阿里云自带的 RDS 监控,里面的 SQL 执行记录,发现有几条 sql 的执行特别慢,每条语句执行的时间快 3 秒了,没有优化好。
检查了表结构,发现是缺少索引导致的,添加了索引,RDS 的CPU 这才恢复了正常。
当一张表的数据过大的时候,添加索引需要选择半夜用户量少的时候,因为百万级别的表添加索引可能需要 7、8个小时才能建好索引。
一开始也怀疑了是遭到了攻击,后台想想是错的,因为生产的数据库是添加过白名单的,没有在白名单里面的 IP 是不可能操作数据库的。
简单防止 SQL 注入、DDoS 等攻击
简单来说就是通过屏蔽攻击的 IP 地址来保护服务器。
linux中iptables屏蔽指定ip及ip段。
屏蔽某个 IP:
iptables -I INPUT -s xxx.xxx.xxx.xxx -j DROP
屏蔽指定 IP 段:
iptables -I INPUT -s 192.168.0.0/24 -j DROP
转载于:https://my.oschina.net/u/2470065/blog/779054