【故障公告】取代 memcached 的 redis 出現問題造成網站故障

部落格園團隊 發表於 2022-06-23
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 存在相容問題,只好暫時作罷。