分布式緩存數據庫Redis大KEY問題定位及優化建議

      網友投稿 925 2025-04-03

      【背景】


      訪問Redis 5.0 cluster集群出現OOM報錯,報錯信息為(error) OOM command not? allowed when used memory > ‘maxmemory’,部分ECS應用程序無法向數據庫寫入,影響服務的正常使用。執行set t2 s2時,數據庫報錯OOM,如下圖:

      【拓撲】

      環境信息:

      Redis 5.0 cluster集群 ??4G內存

      DCS網段:192.168.1.0/24

      分片1:master 192.168.1.12 ?slave 192.168.1.37

      分片2:master 192.168.1.10 ?slave 192.168.1.69

      分片3:master 192.168.1.26 ?slave 192.168.1.134

      【分析思路】

      【詳細步驟】

      一、查看監控

      查看Redis實例監控,顯示Redis集群內存占用46.97%,無明顯異常,結果如下圖所示:

      查看節點的內存監控。其中分片2中master節點192.168.1.10內存使用率達到100%,其余兩個分片分內存使用率均在20%左右,結果如下圖所示:

      二、確認異常分片信息

      通過上述監控信息可得知,該redis集群中的分片2中內存使用率達100%。有且僅有該分片內存異常。

      三、大KEY分析

      在線分析

      ①????工具分析:使用華為云管理控制臺緩存分析-大Key分析工具。執行完成后,查看信息即可。結果如下圖所示:(string類型保存top20,list/set/zset/hash類型保存top80)

      具體使用方法參考以下鏈接:https://support.huaweicloud.com/usermanual-dcs/dcs-ug-190808001.html

      ②????命令分析:使用redis-cli -h IP -p port –bigkeys命令,該工具會列出各個類型數據中大Key中的最大的那個key的信息。結果如下圖所示:

      如上圖所示,可以得出該環境中string類型的大key為“nc_filed/_pk”,大小為13283byte,list、set、hash、zset類型的數據未發現大key。

      離線方式

      離線分析需要使用專門的rdb_bigkeys分析工具,對rdb文件進行分析。工具地址:?https://github.com/weiyanwei412/rdb_bigkeys。具體步驟如下:

      編譯方法:

      分布式緩存數據庫Redis大KEY問題定位及優化建議

      # yum install git go -y

      # mkdir /home/gocode/

      # cd /home/gocode/

      # git clone https://github.com/weiyanwei412/rdb_bigkeys.git

      # cd rdb_bigkeys

      # go build

      執行完成生成可執行文件rdb_bigkeys。

      使用方法:

      ./rdb_bigkeys -bytes 1024 -file bigkeys.csv -sorted -threads 4 /home/redis/dump.rdb

      參數說明:

      -bytes 1024:篩選大于1024字節的key

      -file bigkeys.csv:將結果保存到bigkeys.csv文件

      -sorted:從大到小進行排序

      -threads:使用的線程個數

      /home/redis/dump.rdb:實際的rdb文件路徑

      生成文件樣式如下所示:

      每列分別為數據庫編號,key類型,key名,key大小,元素數量,最大值元素名,元素大小,key過期時間。文檔鏈接:https://www.cnblogs.com/yqzc/p/12425533.html

      四、解決方案

      導致本次OOM問題的根因為大KEY導致數據大小分布不均勻,某一個分片內存達到maxmemory,在進行數據寫入的過程中,如果調度到該分片,則會產生OOM問題。將該分片的rdb文件導出一份,以便于后期針對大key做對應的優化。

      臨時方案:

      為盡快回復業務,刪除上有步驟中查詢到的大KEY,執行操作如下:(非字符串的bigkey,不要使用 del 刪除,使用 hscan、sscan、zscan 方式漸進式刪除)

      長期方案:

      通過對大KEY進行拆分,將一個大的KEY拆分為多個小的KEY,?變成value1,value2… valueN,打散分不到不同的分片中,避免因為數據傾斜導致的數據分布不均。

      其他的類型的數據也可以按照相同的方式進行拆分重組,從而避免大KEY帶來的影響。

      五、?結果驗證

      查看分片監控,192.168.1.10內存使用率下降到24%,結果如下圖所示:

      執行set t2 s2,返回正常,登錄集群,執行get命令,正常返回數據信息。結果如下所示,至此業務恢復正常。

      【優化及建議】

      1)?配置節點級別的內存利用率監控指標的告警。如果某個節點存在大key,這個節點比其他節點內存使用率高很多,會觸發告警,便于用戶發現潛在的大key。

      2) 配置節點級別的入網最大帶寬、出網最大帶寬、CPU利用率監控指標的告警。如果某個節點存在熱key,這個節點的帶寬占用、CPU利用率都比其他節點高,該節點會容易觸發告警,便于用戶發現潛在熱key。

      3)?string類型控制在10KB以內,hash、list、set、zset元素盡量不超過5000。

      4)?定期通過大key、熱key分析工具檢查集群中是否存在大key問題,盡早識別風險。

      分布式緩存服務 Redis

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:WPS怎么設計一款簡潔的名片?
      下一篇:在Word2007文檔中怎么插入表格題注(word文檔表格怎么添加題注)
      相關文章
      久久亚洲AV成人无码国产| 久久亚洲精品人成综合网| 亚洲αv在线精品糸列| 一区二区亚洲精品精华液| 亚洲日本中文字幕| 久久久久久亚洲精品| 亚洲AV无码专区国产乱码电影 | 久久精品九九亚洲精品| 亚洲国产精品人久久| 亚洲成色999久久网站| 亚洲不卡中文字幕无码| 久久亚洲免费视频| 亚洲天堂在线播放| 亚洲精品高清国产麻豆专区| 亚洲AV第一页国产精品| 亚洲国产精品国自产电影| 日本久久久久亚洲中字幕| 亚洲黄色免费在线观看| 亚洲色偷偷偷网站色偷一区| 亚洲精品亚洲人成在线观看麻豆 | 亚洲av色香蕉一区二区三区 | 色欲色欲天天天www亚洲伊| 国产综合成人亚洲区| 亚洲成A人片77777国产| 亚洲精品岛国片在线观看| 伊人久久综在合线亚洲91| 好看的亚洲黄色经典| 亚洲狠狠综合久久| 亚洲国产韩国一区二区| 97久久国产亚洲精品超碰热| 亚洲狠狠婷婷综合久久蜜芽| 无码天堂va亚洲va在线va| 亚洲天堂在线视频| 亚洲热线99精品视频| 亚洲AV日韩AV永久无码下载| 亚洲电影在线免费观看| 亚洲中文字幕无码中文字| 18禁亚洲深夜福利人口| 久久激情亚洲精品无码?V| 亚洲AV无码专区国产乱码4SE| 亚洲欧洲在线观看|