久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

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

271次閱讀
沒有評論

共計 2344 個字符,預計需要花費 6 分鐘才能閱讀完成。

這篇文章給大家介紹分布式緩存數據庫 Redis 大 KEY 問題定位及優化建議是怎樣的,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

如何定位分布式緩存數據庫 Redis 大 KEY 問題,實操案例帶你掌握優化方法。

【背景】

訪問 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。具體步驟如下:

編譯方法:

# 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%,結果如下圖所示:

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

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

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

【優化及建議】

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

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

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

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

關于分布式緩存數據庫 Redis 大 KEY 問題定位及優化建議是怎樣的就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-08-16發表,共計2344字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 盘山县| 许昌市| 咸阳市| 全州县| 田林县| 桃园县| 南澳县| 龙江县| 万宁市| 清流县| 井陉县| 石河子市| 密云县| 陆河县| 柘荣县| 瓦房店市| 曲松县| 满洲里市| 搜索| 泊头市| 尉犁县| 林甸县| 平南县| 灵山县| 都匀市| 温宿县| 营口市| 德阳市| 广德县| 彰武县| 股票| 宁远县| 宁陵县| 兴化市| 临湘市| 子洲县| 德令哈市| 锡林浩特市| 南部县| SHOW| 霍山县|