背景
上一篇说到,由于用户激增,已将redis改为集群redis,但是遇到了新的问题,忽然db链接数爆了,报警信息不断,cpu爆了,应用打不开了。
redis集群
下面是我们使用redis集群的架构,读写分离,一主两从,5分片。
问题描述
平时的用户活跃多在晚上,但是出现问题的是在中午,忽然数据库报警,链接过多。应用也打不开了,就开始查问题,查数据库慢日志,查程序日志,都是正常的,看redis集群cpu和内存也都正常,之前不懂redis集群架构,不知道还有proxy需要去关注,最后在程序日志中发现,redis链接超时,导致程序连不上,但是命令行操作还可以。最后在腾讯云的redis集群后台发现是proxy过高,部分热key超高请求导致的,下面是proxy监控的地方。
好记性不如烂笔头
总结下来其实就是redis的集群架构不了解,从上面的架构图就能看出,多个应用服务器将请求先请求到proxy服务器集群,相当于多个路由器,根据key或分片具体逻辑,找到所使用分片,因为热key请求数超高,导致一个路由器cpu打满崩溃,最后导致所有的进程都连不到redis,不得不请求数据库,导致数据库链接过多,cpu打满。