<input id="ohw05"></input>
  • <table id="ohw05"><menu id="ohw05"></menu></table>
  • <var id="ohw05"></var>
  • <code id="ohw05"><cite id="ohw05"></cite></code>
    <label id="ohw05"></label>
    <var id="ohw05"></var>
  • 【故障公告】取代 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 中的數據后,很快恢復了正常。

    接下來我們會進一步分析問題的原因,優化 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 異常就全部消失。

    posted @ 2022-06-23 15:30  博客園團隊  閱讀(3036)  評論(42編輯  收藏  舉報
    国产美女a做受大片观看