一次RabbitMQ重启引发的网关雪崩复盘
刷到《一次RabbitMQ重启引发的网关雪崩复盘》,内容很实在,值得细读。这篇把它的关键做法提炼出来,帮你省下通读的时间,结尾附行动建议。
晚上生产告警群里突然开始刷屏。网关 Pod 不断重启,有客户反馈操作页面时好时坏,K8s 事件里清一色的: [代码示例略] 打开网关的日志查看原来是MQ连不上,一直在报异常;突然想起来今晚运维在做MQ的升级,评估升级不超过3分钟,但以现在情况看已经超过8分钟;之前提前将management.health.rabbit.enabled 明明已经设成 false 了啊。当时第一反应是:RabbitMQ 重启跟你们的健康检查有什么关系? 服务框架:线上 Kubernetes 集群跑着一套微服务架构,Spring Cloud Gateway 做网关,base-server 做基础服务,Nacos 做注册中心和配置中心,RabbitMQ 做消息总线。整体跑了几个月,没出过什么大问题。 直到今晚运维那边的 RabbitMQ 升级做了一次滚动重启。
晚上生产告警群里突然开始刷屏。网关 Pod 不断重启,有客户反馈操作页面时好时坏,K8s 事件里清一色的: [代码示例略] 打开网关的日志查看原来是MQ连不上,一直在报异常;突然想起来今晚运维在做MQ的升级,评估升级不超过3分钟,但以现在情况看已经超过8分钟;之前提前将management.health.rabbit.enabled 明明已经设成 false 了啊。当时第一反应是:RabbitMQ 重启跟你们的健康检查有什么关系? 服务框架:线上 Kubernetes 集群跑着一套微服务架构,Spring Cloud Gateway 做网关,base-server 做基础服务,Nacos 做注册中心和配置中心,RabbitMQ 做消息总线。整体跑了几个月,没出过什么大问题。 直到今晚运维那边的 RabbitMQ 升级做了一次滚动重启。 排查网关:connection reset by peer 先看日志connection reset by peer 说明 TCP 连接被 Pod 内的进程直接拒绝了,内核发的 RST。
晚上生产告警群里突然开始刷屏。网关 Pod 不断重启,有客户反馈操作页面时好时坏,K8s 事件里清一色的: [代码示例略] 打开网关的日志查看原来是MQ连不上,一直在报异常;突然想起来今晚运维在做MQ的升级,评估升级不超过3分钟,但以现在情况看已经超过8分钟;之前提前将management.health.rabbit.enabled 明明已经设成 false 了啊。当时第一反应是:RabbitMQ 重启跟你们的健康检查有什么关系? 服务框架:线上 Kubernetes 集群跑着一套微服务架构,Spring Cloud Gateway 做网关,base-server 做基础服务,Nacos 做注册中心和配置中心,RabbitMQ 做消息总线。整体跑了几个月,没出过什么大问题。 直到今晚运维那边的 RabbitMQ 升级做了一次滚动重启。 排查网关:connection reset by peer 先看日志connection reset by peer 说明 TCP 连接被 Pod 内的进程直接拒绝了,内核发的 RST。通常意味着进程要么没启动完,要么根本没能力处理新连接。
晚上生产告警群里突然开始刷屏。网关 Pod 不断重启,有客户反馈操作页面时好时坏,K8s 事件里清一色的: [代码示例略] 打开网关的日志查看原来是MQ连不上,一直在报异常;突然想起来今晚运维在做MQ的升级,评估升级不超过3分钟,但以现在情况看已经超过8分钟;之前提前将management.health.rabbit.enabled 明明已经设成 false 了啊。当时第一反应是:RabbitMQ 重启跟你们的健康检查有什么关系? 服务框架:线上 Kubernetes 集群跑着一套微服务架构,Spring Cloud Gateway 做网关,base-server 做基础服务,Nacos 做注册中心和配置中心,RabbitMQ 做消息总线。整体跑了几个月,没出过什么大问题。 直到今晚运维那边的 RabbitMQ 升级做了一次滚动重启。 排查网关:connection reset by peer 先看日志connection reset by peer 说明 TCP 连接被 Pod 内的进程直接拒绝了,内核发的 RST。通常意味着进程要么没启动完,要么根本没能力处理新连接。 pod的探针路径 /actuator/health,initialDelaySeconds: 40。
晚上生产告警群里突然开始刷屏。网关 Pod 不断重启,有客户反馈操作页面时好时坏,K8s 事件里清一色的: [代码示例略] 打开网关的日志查看原来是MQ连不上,一直在报异常;突然想起来今晚运维在做MQ的升级,评估升级不超过3分钟,但以现在情况看已经超过8分钟;之前提前将management.health.rabbit.enabled 明明已经设成 false 了啊。当时第一反应是:RabbitMQ 重启跟你们的健康检查有什么关系? 服务框架:线上 Kubernetes 集群跑着一套微服务架构,Spring Cloud Gateway 做网关,base-server 做基础服务,Nacos 做注册中心和配置中心,RabbitMQ 做消息总线。整体跑了几个月,没出过什么大问题。 直到今晚运维那边的 RabbitMQ 升级做了一次滚动重启。 排查网关:connection reset by peer 先看日志connection reset by peer 说明 TCP 连接被 Pod 内的进程直接拒绝了,内核发的 RST。通常意味着进程要么没启动完,要么根本没能力处理新连接。 pod的探针路径 /actuator/health,initialDelaySeconds: 40。40 秒的启动延迟,正常情况下绰绰有余。
行动建议:收藏这篇,下次碰到同类问题先翻出来对照做一遍。好经验的价值,在于用起来。你最近被这类问题卡过吗? 来源|博客园《一次RabbitMQ重启引发的网关雪崩复盘》,https://www.cnblogs.com/zhangs1986/p/22947591.html
评论(0)
暂无评论,来抢第一条。