成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

線上 K8s Ingress 訪問故障排查思路,看這一篇就夠了

開發
希望給大家一個啟發, 對于一整條鏈路, 如何來排查故障。

具體現象

應用遷移至我們的 PaaS 平臺后會出現偶發性的502問題,錯誤見圖片:

相比于程序的請求量,錯誤肯定是比較少的,但是錯誤一直在發生,會影響調用方的代碼,需要檢查下問題原因。

為啥只看到了POST請求

讀者肯定會說, 你們 ELK 過濾字段里面寫的是POST,所以肯定只有POST請求,其實不是這樣的,GET請求也會有502,只是Nginx會對GET請求進行重試,產生類似如下的日志:

重試機制是Nginx默認的: proxy_next_upstreamhttp://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_next_upstream

因為GET方法會被認為是冪等的, 所以當一個upstream出現502的時候, nginx會再次嘗試. 對于我們的問題, 主要想確認為什么有502, 只看POST請求就足夠了, 兩者的原因應該是一致的。

網絡拓撲結構

網絡請求流入集群時, 對于我們集群的結構:

用戶請求=>Nginx=>Ingress =>uwsgi

不要問為什么有了 Ingress 還有 Nginx。這是歷史原因,有些工作暫時需要由 Nginx 承擔。

統計排查

基于我們對于Nginx和Ingress的錯誤請求統計,發現兩者中的502錯誤是想等的,說明問題一定是出現在Ingress<=>uwsgi之中。

抓包

這個并不是最先想到的方案,因為我們用了很多統計方法也沒總結出來規律,最后只能寄希望于抓包了…該請求日志如下:

抓包結果如下:

從抓包情況來看,當前的tcp連接被復用了,由于Ingress中使用了HTTP1.1協議,會在一次tcp連接中嘗試發送第二個HTTP請求,但是uwsgi沒有支持http1.1,所以在第二個請求根本不會被處理,直接拒絕了。所以在Ingress看來,這個請求失敗了, 因此返回了502. 由于GET請求會重試, 但POST請求無法重試, 所以訪問統計中出現了POST請求502的問題。

Ingress配置學習

Ingress中, 默認對upstream使用的http版本為1.1, 但是我們的uwsgi使用的是http-socket, 而非http11-socket, 我們Ingress中使用了與后端不同的協議, 出現了意料之外的502錯誤。

??https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/annotations/#proxy-http-version??

因為Nginx默認是1.0, 但是切換到Ingress中默認變成了1.1, 而我們沒有統一, 解決方案是強制指定Ingress中使用的http協議版本。

{% if keepalive_enable is sameas true %}
nginx.ingress.kubernetes.io/proxy-http-version: "1.1"
{% else %}
nginx.ingress.kubernetes.io/proxy-http-version: "1.0"
{% endif %}

如果有大佬看到了,可以簡單講講Ingress會在什么時候復用http1.1的連接,以及為什么Ingress不復用每一個連接,這樣問題會盡快的暴露,這些問題我沒有繼續深究了。畢竟你換個語言比如Golang就沒有這個問題了,這個是uwsgi專屬錯誤。

總結

有關這個502問題的排查, 我個人覺得, 最后抓包一次性解決問題其實沒什么特別的, 抓了就能發現問題, 不抓就發現不了。

我是希望給大家一個啟發, 對于一整條鏈路, 如何來排查故障: 我們這里既使用了Nginx, 又使用了Ingress, 在排查時, 需要首先檢查兩者的錯誤數量, 如果確認錯誤基本一致, 那就說明錯誤與Nginx沒有關系, 需要檢查Ingres上的錯誤, 對于多個中轉的請求, 這樣的排查能比較快的確定鏈路的錯誤位置。

責任編輯:張燕妮 來源: 高效運維
相關推薦

2019-12-31 09:56:16

Linux 系統 數據

2019-04-01 10:43:59

Linux問題故障

2022-08-01 11:33:09

用戶分析標簽策略

2021-04-08 07:37:39

隊列數據結構算法

2023-09-11 08:13:03

分布式跟蹤工具

2022-06-20 09:01:23

Git插件項目

2020-02-18 16:20:03

Redis ANSI C語言日志型

2023-02-10 09:04:27

2017-03-11 22:19:09

深度學習

2022-04-07 10:39:21

反射Java安全

2023-11-18 09:30:42

模型AI

2020-07-03 08:21:57

Java集合框架

2024-09-23 08:00:00

消息隊列MQ分布式系統

2019-05-14 09:31:16

架構整潔軟件編程范式

2023-10-17 08:15:28

API前后端分離

2018-05-22 08:24:50

PythonPyMongoMongoDB

2019-04-02 10:51:29

瀏覽器緩存前端

2017-03-13 09:50:46

Python裝飾器

2019-04-10 10:43:15

Redis內存淘汰策略

2019-09-05 08:14:44

Puppet部署結構
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 可以免费看的毛片 | 欧美精品一区二区三区在线播放 | 91麻豆精品国产91久久久久久 | com.色.www在线观看 | 亚洲黄色av | av片毛片| 欧美日韩中文字幕在线 | 欧美精品一区二区免费 | 国产传媒视频在线观看 | 波多野结衣一区二区三区 | 亚洲成人天堂 | 久久亚洲一区二区 | 一区二区三区四区国产 | 日本黄色免费大片 | 午夜激情免费 | 福利片在线 | 亚洲综合色自拍一区 | 国产日韩欧美精品一区二区 | 精品亚洲永久免费精品 | 男女污污网站 | 色综合久久久 | 国产一区久久 | 91视频一区二区三区 | 午夜免费视频观看 | 亚洲福利电影网 | 大香网伊人 | 久久99精品久久久97夜夜嗨 | 欧美综合久久 | 在线日韩精品视频 | 亚洲一区成人 | 免费一区二区三区 | 国产二区在线播放 | 天天夜碰日日摸日日澡 | 97免费视频在线观看 | 国产精品久久久久久久久久久久冷 | xxxxx黄色片 欧美一区免费 | 美女久久久久久久久 | 国产欧美视频一区二区三区 | 精品毛片视频 | 亚洲导航深夜福利涩涩屋 | 日韩欧美一二三区 |