Redis 常見的效能問題和解決方法
1.Master寫記憶體快照,save命令排程rdbSave函式,會阻塞主執行緒的工作,當快照比較大時對效能影響是非常大的,會間斷性暫停服務,所以Master最好不要寫記憶體快照。
2.Master AOF持久化,如果不重寫AOF檔案,這個持久化方式對效能的影響是最小的,但是AOF檔案會不斷增大,AOF檔案過大會影響Master重啟的恢復速度。
3.Master呼叫BGREWRITEAOF重寫AOF檔案,AOF在重寫的時候會佔大量的CPU和記憶體資源,導致服務load過高,出現短暫服務暫停現象。
下面是我的一個實際專案的情況,大概情況是這樣的:一個Master,4個Slave,沒有Sharding機制,僅是讀寫分離,Master負責寫入操作和AOF日誌備份,AOF檔案大概5G,Slave負責讀操作,當Master呼叫BGREWRITEAOF時,Master和Slave負載會突然陡增,Master的寫入請求基本上都不響應了,持續了大概5分鐘,Slave的讀請求過也半無法及時響應,上面的情況本來不會也不應該發生的,是因為以前Master的這個機器是Slave,在上面有一個shell定時任務在每天的上午10點呼叫BGREWRITEAOF重寫AOF檔案,後來由於Master機器down了,就把備份的這個Slave切成Master了,但是這個定時任務忘記刪除了,就導致了上面悲劇情況的發生,原因還是找了幾天才找到的。
將no-appendfsync-on-rewrite的配置設為yes可以緩解這個問題,設定為yes表示rewrite期間對新寫操作不fsync,暫時存在記憶體中,等rewrite完成後再寫入。最好是不開啟Master的AOF備份功能。
4.Redis主從複製的效能問題,第一次Slave向Master同步的實現是:Slave向Master發出同步請求,Master先dump出rdb檔案,然後將rdb檔案全量傳輸給slave,然後Master把快取的命令轉發給Slave,初次同步完成。第二次以及以後的同步實現是:Master將變數的快照直接實時依次傳送給各個Slave。不管什麼原因導致Slave和Master斷開重連都會重複以上過程。Redis的主從複製是建立在記憶體快照的持久化基礎上,只要有Slave就一定會有記憶體快照發生。雖然Redis宣稱主從複製無阻塞,但由於磁碟io的限制,如果Master快照檔案比較大,那麼dump會耗費比較長的時間,這個過程中Master可能無法響應請求,也就是說服務會中斷,對於關鍵服務,這個後果也是很可怕的。
以上1.2.3.4根本問題的原因都離不開系統io瓶頸問題,也就是硬碟讀寫速度不夠快,主程式 fsync()/write() 操作被阻塞。
5.單點故障問題,由於目前Redis的主從複製還不夠成熟,所以存在明顯的單點故障問題,這個目前只能自己做方案解決,如:主動複製,Proxy實現Slave對Master的替換等,這個也是Redis作者目前比較優先的任務之一,作者的解決方案思路簡單優雅,詳情可見 Redis Sentinel design draft 。
總結:
1.Master最好不要做任何持久化工作,包括記憶體快照和AOF日誌檔案,特別是不要啟用記憶體快照做持久化。
2.如果資料比較關鍵,某個Slave開啟AOF備份資料,策略為每秒同步一次。
3.為了主從複製的速度和連線的穩定性,Slave和Master最好在同一個區域網內。
4.儘量避免在壓力較大的主庫上增加從庫
5.為了Master的穩定性,主從複製不要用圖狀結構,用單向連結串列結構更穩定,即主從關係為:Master
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26477398/viewspace-1258932/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Redis常見的效能問題和解決方法UWRedis
- Redis常見問題和解決辦法梳理Redis
- Firefox 使用常見問題和解決方法Firefox
- MyCAT的常見問題分析和解決
- 攝像頭十大常見問題和解決方法
- 社交電商系統開發時的常見問題和解決方法
- Ubuntu 常見問題和解答Ubuntu
- As常見問題解決方法
- Redis面試常見問題Redis面試
- Windows作業系統常見故障問題和解決方案Windows作業系統
- redis分散式鎖的問題和解決Redis分散式
- Nacos 常見問題及解決方法
- Oracle 11.2.0.4.0 install for Win10(專業版) 常見問題和解決方法OracleWin10
- Redis常見問題彙總Redis
- 域名管理常見問題:域名解析不生效的原因和解決方法(中科三方)
- Hadoop常見問題及解決方法Hadoop
- KMP常見問題及解決方法【Z】KMP
- Solaris 常見問題及解決方法(轉)
- BlueHost SSH連線常見錯誤和解決方法
- Oracle 常見的錯誤問題及解決方法Oracle
- Redis Manager 常見問題彙總Redis
- redis 叢集常見問題 QARedis
- Redis常見問題(快取雪崩)Redis快取
- IE不能上網瀏覽的常見原因和解決方法
- DevExpress DateEdit 5 常見問題解決方法devExpress
- VictoriaMetrics常見效能問題排查
- 常見的反爬手段和解決思路
- 粘包問題原因和解決方法
- 常見網頁相容性問題的解決方法網頁
- 漫畫 | Redis常見面試問題(一)Redis面試
- Redis 快取常見問題處理Redis快取
- git常見問題解決Git
- 常見問題及解決
- 手動生成C#的COM包裝類的常見問題和解決辦法C#
- windows 7常見的三種字型問題的解決方法Windows
- 10個常見的Redis面試"刁難"問題Redis面試
- Windows共享資料夾常見問題解決方法Windows
- git 常見問題的解決方案Git