当前位置:首页 > 技术文章 > 正文内容

K8S灰度环境频繁出现502 k8s ingress 灰度发布

arlanguage5个月前 (12-15)技术文章53


公司一个需求版本开发、测试结束,升级到灰度环境之后频繁出现502

公司使用的是php + nginx 所以分析也是按照这个方向来分析的。


nginx报错:

NGINX ERROR 10.9.95.75 !!!

2020/07/21 17:05:12 [error] 7#7: *38808 recv() failed (104: Connection reset by peer) while reading response header from upstream

这里的意思是,nginx已经和php-cgi(就是php-fpm进程)连接成功,并且发送了消息, 但是php-cgi进程由于某些原因关闭了,发送了一个reset包通知nginx进程。


状态码解释

  • 504 nginx超过了自己设置的超时时间,不等php-fpm返回结果,就结束了
  • 502 是php-cgi执行了, 但是没有读取到数据就超时了。php-fpm超时 php-fpm主进程会认为这个 php-fpm进程有问题会重启。

如果是程序性能问题导致的,php-fpm进程将会不停的kill && fork,此操作很消耗系统资源, 而且会给nginx进程带来影响,所以nginx会频繁的给客户端返回 502, 再之后, 如果nginx的连接数被占满了,客户端将会收到 504错误码。


Connection reset by peer

表示当前服务器接收到了服务器对端发送过来的TCP RST信号。也就是对端已经关闭了连接, 接收方需要关闭连接,然后根据自己的逻辑处理。

让我们来理解下RST信号:

TCP协议格式

上图中画“红线”的位置是TCP的标识位,每个标志位占用一个bit。以下是6个标志位的解释:

  • UGR: URG为1时,表明该包中有需要紧急处理的数据
  • ACK: 确认应答是否有效,为1为有效
  • PSH: 提示接收端应用程序立刻从TCP缓冲区把数据读走;PSH为1时就是将缓冲区中的数据交给上层协议。PSH为0时,就是数据不需要立即传先进行缓存
  • RST: RST为1,表示连接出现异常必须重更新连接,会将连接断开重新连接
  • SYN: 用于建立连接,为1表示希望重新建立连接
  • FIN: FIN为1时,表明之后不再会有数据发送了要断开连接,本端要关闭了,FIN标识为结束报文段
  • 这里的RST就是上面 nginx抛出错误 Connection reset by peer 的解释


查看php-fpm的慢日志:

[21-Jul-2020 17:12:10] [pool www] pid 975

script_filename = /data/xmq_api_alpha//api/v1.10/index.php

[0x00007f99db6219b0] pconnect() /data/xmq_api_alpha/common/Redis/RedisManager.php:83

[0x00007f99db621910] _createRedis() /data/xmq_api_alpha/common/Utils.php:952

[0x00007f99db6218a0] call_user_func() /data/xmq_api_alpha/common/Utils.php:952

[0x00007f99db6217e0] retry() /data/xmq_api_alpha/common/Redis/RedisManager.php:98

[0x00007f99db621770] createRedis() /data/xmq_api_alpha/common/Redis/RedisManager.php:122

[0x00007f99db6216e0] tokensRedis() /data/xmq_api_alpha/api/v1.10/app/plugins/SecurityPlugin.php:816

[0x00007f99db621570] auth() /data/xmq_api_alpha/api/v1.10/app/plugins/SecurityPlugin.php:670

[0x00007f99db621380] beforeExecuteRoute() /data/xmq_api_alpha/api/v1.10/index.php:270

[0x00007f99db621310] fireQueue() /data/xmq_api_alpha/api/v1.10/index.php:270

[0x00007f99db6212a0] fire() /data/xmq_api_alpha/api/v1.10/index.php:270

[0x00007f99db621250] dispatch() /data/xmq_api_alpha/api/v1.10/index.php:270

[0x00007f99db621200] handle() /data/xmq_api_alpha/api/v1.10/index.php:270


php-fpm慢日志查看表明,某个 pod 连接到 Redis 超时导致问题。

这是 K8S集群内部网络通信的问题,尝试重启pod,重启之后问题得到解决。

扫描二维码推送至手机访问。

版权声明:本文由AR编程网发布,如需转载请注明出处。

本文链接:http://www.arlanguage.com/post/216.html

标签: nginx访问慢
分享给朋友:

“K8S灰度环境频繁出现502 k8s ingress 灰度发布” 的相关文章

nginx 多域名配置 nginx多站点配置示例

Nginx 可以配置多个域名,以便根据不同的域名来处理不同的请求。下面是一个配置多个域名的例子:server { listen 80; server_name example1.com; location / { root /var/www/example1...

Linux中内网或者没网时安装软件的两种方式

写在前面对于可以连接外网的服务器装软件,只要配置yum源就可以随便使用了但是对于内网来说,不能连接外网,一般情况下,管控平台只有上传的权限。尤其是一些涉密的岗位,比如电力,电信,军工之类的。今天和小伙伴聊聊内网服务器如何安装软件的问题。可事实是,唯恐暴露才华不足的卑怯的畏惧,和厌恶钻研刻苦的惰怠,就...

Linux下如何用nginx+ffmpeg搭建流媒体服务器

安装ffmpeg安装过程略安装完成后,检查是否安装成功。比如我这里采用向pili推流的方式,将本地的一个mp4视频推流到七牛pili。ffmpeg -re -i /tmp/ffmpeg_test.mp4 -vcodec copy -acodec copy -f flv "rtmp://pil...

压测nginx出现的问题分析

压测nginx出现no live upstreams while connecting to upstream的问题分析基础环境版本信息Centos 7.1nginx version: openresty/1.13.6.2nginx配置信息stream {   ...

Nginx的安装及配置详解 nginx1.12安装

Nginx是一个强大的免费开源的HTTP服务器和反向代理服务器。在Web开发项目中,nginx常用作为静态文件服务器处理静态文件,并负责将动态请求转发至应用服务器(Django, Flask, etc)。熟悉Nginx的配置对Web开发和运维人员来说至关重要。本文整理了Nginx的配置大全,可以作为...

在Ubuntu上将Nginx升级到最新版本

在Ubuntu上将Nginx升级到最新版本如果你在Ubuntu上运行nginx,你很快就会发现,操作系统中默认的Ubuntu版本真的很旧。这意味着你需要运行最新版本的Nginx来避免安全问题。这篇文章是关于如何做到这一点。第一件事是找出你使用的是哪个版本。以下是你如何做。$ nginx -v 它应该...