【故障公告】取代 memcached 的 redis 出现问题造成网站故障(已解决)

6月19日开始,我们将博客站点的缓存服务器从 memcached 换成了 redis,稳定运行了3天,今天上午访问高峰突然出现问题,在 11:00-12:30 期间影响了网站的正常访问,由此给您带来麻烦,请求谅解。

在故障期间,日志中大量的等待响应超时错误

StackExchange.Redis.RedisTimeoutException: Timeout awaiting response

其中的一个典型日志:

StackExchange.Redis.RedisTimeoutException: Timeout awaiting response (outbound=0KiB, inbound=6697KiB, 2937ms elapsed, timeout is 2000ms), command=GET, next: GET blog_v2_BlogPosts-291733, inst: 0, qu: 0, qs: 31, aw: False, bw: SpinningDown, rs: ReadAsync, ws: Idle, in: 0, in-pipe: 0, out-pipe: 0, serverEndpoint: 192.168.12.28:6379, mc: 1/1/0, mgr: 5 of 10 available, clientName: blog-web-c845b6686-zpl4s(SE.Redis-v2.5.61.22961), PerfCounterHelperkeyHashSlot: 11935, IOCP: (Busy=0,Free=1000,Min=20,Max=1000), WORKER: (Busy=19,Free=32748,Min=50,Max=32767), POOL: (Threads=73,QueuedItems=5,CompletedItems=2170212), v: 2.5.61.22961 (Please take a look at this article for some common client-side issues that can cause timeouts: https://stackexchange.github.io/StackExchange.Redis/Timeouts)

在确认是 redis 引起的故障后,我们立即采取了笨方法,将之前使用 memcached 缓存的部分切换回 memcached,切换后除了个人博客博文列表页面,其他访问都已恢复正常。

个人博客博文列表一级缓存已经切换到 memcached,但二级缓存还在使用 redis,所以依然受 redis 问题影响。

这时,我们重启了 redis,但重启后问题依旧。本来我们以为是并发高触发的问题,但我们的以为错了。我们重新进行了以为,既然不是并发多的原因,那可能是数据多的原因,flushall 清空 redis 中的数据后,很快恢复了正常。

【故障公告】取代 memcached 的 redis 出现问题造成网站故障(已解决)

接下来我们会进一步分析问题的原因,优化 redis 的部署,目前是在 k8s 集群上部署的非高可用 redis 集群(3个节点)。

另外,上次的 k8s 集群翻船问题与我们升级 k8s 时没有升级 calico 网络组件有关,后来把网络组件换成了 cilium,本想上 eBPF 拉风一下,结果发现阿里云负载均衡与 eBPF 存在兼容问题,只好暂时作罢。

更新 6月26日 14:32

进一步排查后发现 “Timeout awaiting response” 问题与我们通过连接池使用多个 ConnectionMultiplexer 有关,连接池越大,越容易出现 timeout。通过 StackExchange.Redis 源码中的注释 ConnectionMultiplexer.cs#L22 看了 PipelinesMultiplexers 之后知道单个 ConnectionMultiplexer 能够应对高并发场景,难怪 StackExchange.Redis 一直没有实现连接池。我们使用连接池是受 StackExchange.Redis.Extensions 的影响,现在看来没有必要而且自找麻烦。

知道这个原因后,解决方法很简单,将 PoolSize 设置为 1。取代 memcached 的 redis 服务已重新上线。

PoolSize=1 的疗效昨天已经得到验证,在切换回 memcached 后,个人博客博文列表一级缓存还在使用 redis ,在日志中依然会出现一些 timeout 异常,当时 PoolSize 值是 10,昨天改为 1 之后 timeout 异常就全部消失。

Original: https://www.cnblogs.com/cmt/p/16405164.html
Author: 博客园团队
Title: 【故障公告】取代 memcached 的 redis 出现问题造成网站故障(已解决)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/528790/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 使用Python的列表推导式计算笛卡儿积

    笛卡儿积:笛卡儿积是一个列表, 列表里的元素是由输入的可迭代类型的元素对构 成的元组,因此笛卡儿积列表的长度等于输入变量的长度的乘积, 如下图: 如果你需要一个列表,列表里是 3 …

    Linux 2023年6月6日
    090
  • 读《软件测试的艺术》——第一章

    《软件测试的艺术》作为元老级别的测试理论书籍,在业内非常经典且有口皆碑,书中提出的 软件测试为求错而非求证的观点至今仍在学术界被广泛讨论。本书还为计算机界一个最为重要的主题提供了一…

    Linux 2023年6月13日
    0109
  • 大小端存储是什么鬼?

    以下内容为本人的著作,如需要转载,请声明原文链接微信公众号「englyf」 https://mp.weixin.qq.com/s/htYGddzO2xPl9kDN4lANpQ 大小…

    Linux 2023年6月6日
    0123
  • WPF 已知问题 资源字典树引用与资源寻找的坑

    大家都知道,在 WPF 里面,可以让资源字典合并其他资源字典,从而定义出资源字典引用树。然而在资源字典引用树里面,如果没有理清关系,将可以作出一个超级复杂的引用关系网。如果在性能优…

    Linux 2023年6月6日
    0112
  • Power Outage

    由于Covid-19的原因一直是work from home, 在几天前家里的电表有问题需要人来维修,在这期间会停电大概半小时操作,虽然是wfh,但是还是要保障工作的正常进行,保守…

    Linux 2023年6月7日
    0112
  • gitlab备份迁移与升级

    bash;gutter:false; 升级计划: https://docs.gitlab.com/ee/update/index.html#upgrade-paths</p&…

    Linux 2023年6月7日
    074
  • djnago-filter用法

    django-filter用法 集成drf 不指定字段的过滤参数,那么该字段就默认为exact,精准匹配自定义filter文件内 from django_filters impor…

    Linux 2023年6月14日
    0128
  • bash 中 echo & printf

    首先列一下今天收获的消息 sh是: Bourne Shell(/usr/bin/sh或/bin/sh) bash是: Bourne Again Shell(/bin/bash) p…

    Linux 2023年6月6日
    0107
  • 这里聊聊扫地机的 IOT 开发

    以下内容为本人的著作,如需要转载,请声明原文链接微信公众号「englyf」 https://mp.weixin.qq.com/s/Xszi1YFxVqpJ7OcOt-lrqw 消费…

    Linux 2023年6月6日
    0111
  • LAMP 架构介绍及环境搭建

    1、LAMP 架构介绍及环境搭建 1.LAMP分别代表什么? L代表服务器操作系统使用Linux A代表网站服务使用的是Apache软件基金会中的httpd软件 M代表网站后台使用…

    Linux 2023年6月7日
    0109
  • CentOS7安装MYSQL8.X详细教程

    1-首先查看系统是否存在mysql,无则不返回 rpm -qa|grep mysql 2-安装wget yum -y install wget 3-抓取mariadb并删除包,无则…

    Linux 2023年5月27日
    093
  • python 练习题:请利用Python内置的hex()函数把一个整数转换成十六进制表示的字符串

    python;gutter:true;-*- coding: utf-8 -*-请利用Python内置的hex()函数把一个整数转换成十六进制表示的字符串n1 = 255n2 = …

    Linux 2023年6月8日
    092
  • JCL 日志门面

    JCL( Jakarta Commons Logging ),是 Apache 提供的一个 通用日志 API 。用户可以自由选择第三方的日志组件作为具体实现,像 Log4j 或 J…

    Linux 2023年6月8日
    090
  • margin-top塌陷

    一、问题描述 ​ 在两个及以上的盒子嵌套时候,内部的盒子设置的 margin-top 的效果会加到最外边的盒子上,导致内部的盒子margin-top设置失败。 – 示例…

    Linux 2023年6月14日
    0111
  • SQL55 分页查询employees表,每5行一页,返回第2页的数据

    LIMIT子句 本题链接表结构如下所示。 +——–+————+——&#8…

    Linux 2023年6月13日
    092
  • 浅谈kali : aircrack-ng套件

    aircrack-ng 套件包含有: Name Description aircrack-ng 破解WEP以及WPA(字典攻击)密钥 airdecap-ng airmon-ng 将…

    Linux 2023年6月14日
    077
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球