Redis單機主從高可用性優化

版權聲明:本文由陳龍原創文章,轉載請註明出處: 
文章原文連接:https://www.qcloud.com/community/article/127html

來源:騰雲閣 https://www.qcloud.com/communityredis

 

redis是一款高性能的內存數據庫,本文側重描述redis在主從模式下遇到的一些問題以及如何調優,特別是在雲環境下遇到的一些特殊問題,至於redis如何使用以及數據結構等,能夠百度,網上有大量的資料。數據庫

主結點

在非集羣環境的狀況下,使用redis主從模式來保證業務的高可用性,所以在此種模式下,讀寫都在主機,要保證主機高性能必須在主機上儘可能少的IO操做同時又要兼顧網絡致使的主從斷鏈而帶來的頻繁的fullsync,所以針對主機優化要點以下:緩存

關閉主結點aof

關閉主aof比較簡單,能夠經過以下命令進行關閉,在主結點上執行安全

config set appendonly no網絡

關閉主結點save

關閉主上的save緣由是避免save的規則致使的bgsave而引發業務波動,bgsave是很是消耗性能的,redis的默認save規則爲" 900 1 "," 300 10 ","," 60 10000 ",在此規則下寫入量大的狀況下會致使主機頻繁的bgsave而致使性能急劇降低,能夠經過命令config set save關閉主機上因寫入而觸發的bgsave,數據的完整性交給備機完成,即便這樣也沒法徹底杜絕bgsave,在從機第一連上來或者從機斷開太久的狀況下仍是會觸發bgsave數據結構

主從同步後key數量不一致問題

由於redis只會在主上進行按期key淘汰並命令傳播到從機,所以在key數量不少並且不少key又帶有過時時間的狀況下,由於淘汰機制問題會致使主從同步後從機的key數量和主機的key數量不一致(過時的key不會同步到從機),而最根本緣由是主機在在serverCron函數中進行淘汰的時候一次默認只會淘汰20個key,默認值在redis.h#define ACTIVE_EXPIRE_CYCLE_LOOKUPS_PER_LOOP 20 /* Loopkups per loop. */定義,解決該問題的方式一是修改該數量從新編譯,而是修改redis.conf中的hz屬性,加快serverCron執行頻率app

發送緩衝區滿致使主從斷開頻繁fullsync問題

redis爲每個連接的客戶端維護了一個發送緩衝區,並限定了大小(有軟硬之分),當發送緩衝區滿後(超過了設定的值)redis即會斷開該連接從而實現自我保護功能,可是問題也出現,當寫入量很是大的時候而該值又設置的不合理會致使主從頻繁斷連,並且由於寫入量巨大新鏈接上來的從機不能進行部分同步而觸發全量同步,所以爲了不該問題能夠根據redis實際的寫入數據以及網絡狀況綜合來修改參數client-output-buffer-limit,具體修改多大要結合實際寫量和網絡狀況而定,設置方式爲:
config set client-output-buffer-limit "slave 4295000768 4295000768 0"
slave 表示從機連接,普通客戶端爲normal,發佈訂閱客戶端爲:pubsub函數

複製積壓緩衝區repl-backlog-size

複製積壓緩衝區緩存了最近的寫命令,在有從機連接的時候建立,該緩衝區大小默認爲1M,改值決定了從機斷開在從新連接上來後是全量同步仍是部分同步,若是複製偏移量在複製積壓緩衝區內爲部分同步,小於或者大於複製積壓緩衝區那麼就行全量同步,能夠根據實際狀況經過config set 命令從新設定repl-backlog-sizeoop

節點死活斷定

在高可用系統中,節點的死活檢查很是重要,檢測邏輯要快速發現問題並迅速切換,檢測手段也是多重多樣, redis檢測節點死活採用了進程探測加服務ping的方式進行,進程探測是爲了確認目標進程存在,可是目標進程存在也不必定確認服務可用,因此另加了去ping指定服務節點的方式,在實際使用過程當中發現某些節點會奇怪的進行切換,而去看機器的內存、網絡、以及IO都很低,除了某些CPU核在切換的時刻被跑滿,而後分析切換節點的slowlog發現,用戶在那個時間點提交了耗時高達幾分鐘的查詢,由於redis是單線程處理,由於某一個耗時高的命令而致使了ping超時致使了切換,優化邏輯就是適當增長ping的耗時和增長ping的次數,這個過程當中也要有所取捨,即要很快的發現問題,又不能由於高耗時命令而誤判進行切換

從結點

從結點主要用來保證數據安全性,並在主結點死掉後快速恢復成主結點並提供服務,在做爲從結點的時候須要打開rdb和aof,並按照必定的時間規則把用戶的rdb放入到冷備中心,

在提高爲主節點後,相關設置要馬上恢復到和主節點同樣的配置

相關文章
相關標籤/搜索