【Redis】redis-cluster需要注意的幾個地方
1.收到150告警,rdb持久化失敗
15011:M 17 Sep 08:54:43.037 # Can't save in background: fork: Cannot allocate memory 15011:M 17 Sep 08:54:49.043 * 1 changes in 900 seconds. Saving... 15011:M 17 Sep 08:54:49.043 # Can't save in background: fork: Cannot allocate memory
2 檢視主機記憶體(內心os:尼瑪還有這麼多記憶體呢)
[root@ip-172-31-43-150 ~]# free -g total used free shared buff/cache available Mem: 29 14 10 0 4 14 Swap: 0 0 0
3 檢視redis-cluster叢集狀態,顯示150已down機,心慌慌
[root@ip-172-31-39-42 ~]# /usr/local/src/redis-4.0.8/src/redis-trib.rb check 172.31.39.42:6379 [ERR] Sorry, can't connect to node 172.31.43.150:6379 *** WARNING: 172.31.39.54:6379 claims to be slave of unknown node ID 6d2b67b9745a8d4bedb70d480645e3651fddaf3f. >>> Performing Cluster Check (using node 172.31.39.42:6379) M: 00f7bd511046438af2d1b41666a69ff77b6f176f 172.31.39.42:6379 slots:11258-11832,13655-16383 (3304 slots) master 1 additional replica(s) S: e771e70f580ec2799af50268865444cf425e000e 172.31.33.17:6379 slots: (0 slots) slave replicates 00f7bd511046438af2d1b41666a69ff77b6f176f S: 8bb99c5b9585269b66684400f036fca1d30e72cb 172.31.47.157:6379 slots: (0 slots) slave replicates 148697f75e9b4f84ad893f4d5377e96fdde7664d M: 148697f75e9b4f84ad893f4d5377e96fdde7664d 172.31.34.25:6379 slots:28,4799-5462,6375-7282,8194-9106,11833-12744 (3398 slots) master 1 additional replica(s) M: 40b766b505c54066de5b5d8eb214ea78c7df8c4b 172.31.36.10:6379 slots:7542-8193,9107-10922,12745-13654 (3378 slots) master 1 additional replica(s) S: f6a625cc2d6fb66d267b15c8d668ea150be262bc 172.31.37.68:6379 slots: (0 slots) slave replicates 792ab7473fa447d07582817eb2f489633001d831 M: 792ab7473fa447d07582817eb2f489633001d831 172.31.33.182:6379 slots:0-27,29-1145,1822-2105,3406-4798,7283-7541 (3081 slots) master 1 additional replica(s) S: 92a5541964fc3e4bfb90f1750b9105d5705beb93 172.31.39.54:6379 slots: (0 slots) slave replicates 6d2b67b9745a8d4bedb70d480645e3651fddaf3f S: 7e5e1e341f33ebd7a3c20480b66a76bbd0922a4f 172.31.32.254:6379 slots: (0 slots) slave replicates 40b766b505c54066de5b5d8eb214ea78c7df8c4b [OK] All nodes agree about slots configuration. >>> Check for open slots... >>> Check slots coverage... [ERR] Not all 16384 slots are covered by nodes.
登上150檢查redis的狀態,發現好好的!
先解決持久化失敗的問題:
1. 172.31.39.54:6379> config set stop-writes-on-bgsave-error no ---解決應用端拋異常的問題 OK 172.31.39.54:6379> config rewrite OK 172.31.39.54:6379> 2.開啟核心引數,解決bgsave失敗的問題 [root@ip-172-31-33-182 ~]# sudo echo 'vm.overcommit_memory = 1' >> /etc/sysctl.conf [root@ip-172-31-33-182 ~]# sysctl -p vm.overcommit_memory = 1
再次檢視日誌,已經持久化成功,check叢集也發現叢集恢復正常
關於redis的記憶體分配學習:
Redis有自己的記憶體分配器,當key-value物件被移除時,Redis不會馬上向作業系統釋放其佔用記憶體(例如,當使用者往一個例項填充了5G的資料,移除其中2G資料,但佔用記憶體可能仍會保持在5G左右)。為什麼Redis要這樣處理?有兩個原因: 1、OS可能會將釋放記憶體交換到VM,但OS的VM又是物理檔案,其IO讀寫效率較低,從而影響Redis效能表現; 2、OS的VM換入換出是基於Page機制,同一Page內的部分資料物件被釋放,但其他資料物件依然被其他應用使用中,導致在該Page內的Redis物件沒有被釋放。 而Redis作者應該是考慮到以上問題,不希望Redis由此降低效能,所以在設計上Redis更傾向於自己掌控VM換入的粒度。()
持久化的問題
Redis持久化磁碟IO方式及其帶來的問題 有Redis線上運維經驗的人會發現Redis在實體記憶體使用比較多,但還沒有超過實際實體記憶體總容量時就會發生不穩定甚至崩潰的問題,有人認為是基於快照方式持久化的fork系統呼叫造成記憶體佔用加倍而導致的,這種觀點是不準確的,因為fork 呼叫的copy-on-write機制是基於作業系統頁這個單位的,也就是隻有有寫入的髒頁會被複制,但是一般你的系統不會在短時間內所有的頁都發生了寫入而導致複製,那麼是什麼原因導致Redis崩潰的呢? 答案是Redis的持久化使用了Buffer IO造成的,所謂Buffer IO是指Redis對持久化檔案的寫入和讀取操作都會使用實體記憶體的Page Cache,而大多數資料庫系統會使用Direct IO來繞過這層Page Cache並自行維護一個資料的Cache,而當Redis的持久化檔案過大(尤其是快照檔案),並對其進行讀寫時,磁碟檔案中的資料都會被載入到實體記憶體中作為作業系統對該檔案的一層Cache,而這層Cache的資料與Redis記憶體中管理的資料實際是重複儲存的,雖然核心在實體記憶體緊張時會做Page Cache的剔除工作,但核心很可能認為某塊Page Cache更重要,而讓你的程式開始Swap ,這時你的系統就會開始出現不穩定或者崩潰了。我們的經驗是當你的Redis實體記憶體使用超過記憶體總容量的3/5時就會開始比較危險了。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29096438/viewspace-2214326/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Python中Lambda使用要注意的幾個地方Python
- 離職那些需要注意的地方
- distinct 去重需要注意的地方
- 【Redis】redis-cluster到redis-cluster的快速複製Redis
- Javascript需要注意的幾個運算子JavaScript
- Spring事務需要注意的幾個點Spring
- equals中關於空格需要注意的地方
- SAP打補丁時需要注意的地方
- 一個優秀的雲原生架構需要注意哪些地方架構
- 微信企業付款介面PHP開發需要注意的兩個地方PHP
- 使用MVCPager做AJAX分頁所需要注意的地方MVC
- 建設個性化主題多媒體展廳需要注意的地方
- 【Redis】 redis-cluster刪除指定的keyRedis
- 做聚合支付代理需要注意的這幾個問題?
- 開發網路影片直播系統需要注意的地方
- RationalDMIS7.1 定義校驗規需要注意的地方
- 選擇雲伺服器有哪些需要注意的地方?伺服器
- 進行爬蟲的時候需要注意哪些地方?爬蟲
- BigDecimal使用注意的地方Decimal
- 【Redis】redis-cluster 安裝遇到的問題Redis
- 【Redis】redis遷移資料到redis-clusterRedis
- Java基礎系列(三十六):泛型中需要注意的地方Java泛型
- 箭頭函式適用場景及需要注意的地方函式
- 平臺接入美顏SDK工具有哪些需要注意的地方?
- redis-cluster主從搭建Redis
- 網路爬蟲設計中需要注意的幾個問題爬蟲
- 藍橋杯注意的地方
- 智慧城市展廳建設需要注意哪幾個方面
- 寶鯤財經:市場投資需要注意的幾個問題
- SpringBoot 2.0 如何使用Redis-ClusterSpring BootRedis
- 規劃館設計建設需要注意哪幾個方面?
- 你認為一個好的佈局應該是什麼樣的?有哪些需要注意的地方?
- Go 1.16 中關於 go get 和 go install 你需要注意的地方Go
- 搭建前後需要注意哪幾點?
- 企業用好WMS(倉庫管理系統),需要注意的幾個要點
- Collectors.toMap的幾個注意點
- 關於redis,你需要了解的幾點!Redis
- cmake混編.c和.cpp需要注意的地方--指定兩種編譯器編譯