前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >huawei Cloud redis 连接超时问题排查记录

huawei Cloud redis 连接超时问题排查记录

作者头像
张琳兮
发布2023-03-08 14:07:15
5020
发布2023-03-08 14:07:15
举报
文章被收录于专栏:首富手记

在一个风和日丽的上午,日志告警群里的机器人开始告警,显示redis 连接超时;第一反应是不是redis 扛不住了。然后登陆到华为云控制台上查看redis 监控;

redis 超时肯定就是网络层面的问题,第一反应先看一下是不是连接数满了;

1.png
1.png

然后看到活跃的客户端数量是2000不到,然后里面有一个新建连接数。发现新建连接数为562788(五十万),感觉这个监控指标有点异常,因为我们redis当前redis 实力的最大TCP连接数是(10000-50000)然后我们reids 实力配置的 maxClient 参数是10000,按照道理来说新建连接数应该最大才能有10000,超过10000 就应该疯狂报错了,但是告警没有那么频繁,所以我感觉华为云的这个监控有啥问题,于是提工单来问。新建连接数 这个监控数据到底是怎么取的;得到的答案是: 新建连接数:这是60s 以内的值,真正当前这个时间点新建连接数应该是562788/60=9,379.8

所以应该是连接数超过最大值导致的连接redis 超时;

那么问题来了。 我问了所有的开发都说redis 使用的是长连接。如果真的是如他们所说那就真是活见鬼了。于是开始找证据,想法就是在同一时间在所有连接redis 的机器获取当前的TCP连接,然后看看看是从那个服务发起的连接redis;

在所有的机器上获取当前的TCP 连接状态,然后复制到指定的机器上进行分析

代码语言:javascript
复制
# cat /etc/ansible/mon.yaml
- hosts: k8s
  gather_facts: True
  tasks:
  - name: Gets the current connection status
    shell: conntrack -L >> {{ ansible_nodename }}.txt  //获取当前机器的网络链接状态
    args:
      chdir: /root/
  - name: Reverse fetch file
    fetch:
      src: "/root/{{ ansible_nodename }}.txt"
      dest: /tmp/zsf/
      flat: true
  • ansible_nodename 主机名

然后执行ansible 命令

代码语言:javascript
复制
ansible-playbook /etc/ansible/mon.yaml

然后进去到/tmp/zsf 目录下分析数据

代码语言:javascript
复制
 awk '$0~/dport=6379/{sum[$5]++}END{for(i in sum )print sum[i],i}' *| sort -n

然后就能看到每个IP地址链接redis的数量了,之后你就只需要确认这个写ip地址属于那个服务的就行了

2.png
2.png
代码语言:javascript
复制
kubectl get pods -o wide | grep $IP

找到对应的负责开发,去排查代码。 发现确实redis 连接池没生效,导致的这个问题。到此问题得以解决;

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-03-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档