django连接redis集群问题排查思路和总结

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了django连接redis集群问题排查思路和总结相关的知识,希望对你有一定的参考价值。

参考技术A 直接就一个连接失败

确认账号密码和端口没问题后,问题同事配置有没验证过,他说直接从网上cv的,完全没经过验证。坑啊!!!

把生产的配置和测试配置比较好,修改了几个地方

信心满满,重启启动 django shell 测试,结果还是连接上不!这时候心情开始有点糟糕~

冷静, django shell 不行,那用 python shell 直连试试?

一点毛病都没有,直接连上了!

一脸懵逼,这到底是啥问题啊!

结果依然是连接不上。

不知不觉已经到了晚上九点,好累,不想卷了。下班回家吧

回家路上整个脑子都被这个问题困扰着。难道密码中含有@符号的redis集群,Django真的连接不上?反复的问自己。

问了其他同事,生产环境是否有其他的redis集群可以用来调试。很遗憾,并没有。

要不,我自己创建一个redis集群,把密码设置成含有@符号?

可是,自己本地创建redis集群好麻烦啊。要本地安装虚拟机,想到一堆配置就直接劝退。

洗完澡,和老婆聊了1h左右的视频。已经到11点多,准备睡觉?

那是不可能的,带着问题是很难入睡!哎,这个是老毛病了。

突然想到了一个点,最小试错原则。自己搭建本地集群很麻烦,公司又没有多余的集群。

那直接买一个云版的redis集群?说干就干,直接从床上起来,打开电脑。

这时问题又来了,阿里云还是腾讯云?

鉴于双11买了腾讯云2c 4g 8m的服务器,只要199就能3年。

再对比之前买阿里云那个1c 2g 1m服务器,3年也要100多。

瞬间对腾讯云好感倍增,决定先买腾讯云。

一顿操作,发现腾讯云是真的难用:

最最最重要,给把实例绑定了安全组后,外网还是无法访问???(不管了,反正我就是很生气)

对腾讯云太失望了,不得不把最后一根稻草压在阿里云身上。

所幸,阿里云没有让我失望!

咔咔咔,一顿操作:

密码中含有@符号,但连接一点毛病都没有!!!

至此,问题终于解决了!!!

我已经迫不及待明天去公司验证,但回过头一看,已经是深夜一点半。

自言自语的说了一句:"睡吧,卷王"

经过对比,发现配置只需要生产的配置仅需要在测试的配置上加多一个 :

修复最磨人的bug,往往仅需要一点小小的改动~

为什么测试环境没报错了呢???

因为测试环境的redis集群不需要密码

redis 线上问题排查思路总结

参考技术A  日常我们使用redis 缓存时,经常会遇到各种各样的问题,其中redis 偶发性连接超时,是经常遇到的一个问题,下面介绍一下我们之前是如何处理的这个问题。

1、redis 服务监控

      通过监控工具,首先排查一下redis 服务端是否是超时,可以从服务器cpu ,内存使用情况,qps等判断server 端是否超时。如果server 侧没有问题,就需要排查客户端。如果server 侧存在问题,就需要排查服务器哪里出了问题,单机性能使用率太高是否可以升级成哨兵模式或者高可用集群模式。

2、redis 客户端排查

     首先查看业务日志,查看一下redis 使用情况是否是存在连接数占满或者创建失败的异常,如果存在,在客户端服务器,使用top 指令,查看使用率高的线程,然后jstack pid,查看当前线程的使用情况。如果出现大量的线程状态显示time_waiting 或者waiting 。则表示连接数一直没有释放,可以通过调整客户端配置的redis 连接池参数,比如配置max连接数和min连接数,time_out超时时间等等。

3、redis 热key排查

排查redis 热key,腾讯云或者阿里云服务器可以使用监控热key的工具。redis 4.0 以后,提供了—hotkey 指令,可以通过热key 指令来监控热key。如果发现异常热key,比如spring-redis-session的热key,存储的是一段时间戳,并且访问率非常高,qps 几十万/s。这时候需要考虑热key是否对业务产生影响,可以通过配置spring.session.store-type=none,关闭存储redis.这时候热key访问量下降,业务key 可以正常访问。

通过以上方式,排查生产中遇到的redis 连接问题,可以排查线上遇到的问题,基本都可以解决掉。

以上是关于django连接redis集群问题排查思路和总结的主要内容,如果未能解决你的问题,请参考以下文章

redis 线上问题排查思路总结

Redis中的BigKey问题:排查与解决思路

Redis故障排查「连接失败问题排查和解决」带你总体分析和整理Redis的问题故障实战开发指南及方案

K8S集群中Coredns域名解析故障排查思路

django2.0.6 连接使用redis集群

ES集群状态为red问题总结