本文例子基於:5.0.4redis
在如今無論啥應用都談分佈式的階段下(真的有必要???),咱們的redis都會作一下主備,唔,若是redis存的數據不重要的話,其實也能夠不用作[手動狗頭].爲了能進一步上分佈式,先讓咱們來了解一下CAP原理吧~緩存
在分佈式系統中,只能保證CP or AP,那麼Redis裏面採用哪種機制呢?網絡
Redis採用的是AP機制,Redis的主備是異步同步數據的。也就是說,當Redis主服務接受了客戶端的修改請求以後,會當即返回,這期間就算備服務節點網絡不通(嗯,絕大部分是挖斷了光纜),主服務依然走得風生水起。那麼此時Redis備節點就處於數據落後的一種狀況,此時Redis主節點同步的時候會採用快照同步的方式去將數據發送到備節點上(下文會講到).正常狀況下的數據同步都是經過增量buffer去同步的(即個人光纜開啓了無敵狀態).less
replicaof <masterip> <masterport> //當master有設置了密碼的時候須要配置 masterauth <master-password>
當備份節點處於正常的狀況下,redis會在master節點爲replica節點設置一個複製緩衝區,而後每次異步將緩存區中的指令同步到replica節點上面,replica節點消費的時候會同時告知master節點消費到了那兒.異步
咱們先來看一下複製緩存區的設置配置socket
//當replica節點斷開一段時間以後,若是其消費的進度還在該緩存區內,那麼能夠繼續執行增量同步。 repl-backlog-size 1mb //當沒有replica節點的時候,緩存區的設置過時時間 repl-backlog-ttl 3600
複製緩存區若是寫滿的話,會從頭開始覆蓋前面的數據,而後致使replica節點須要全量複製,因此這裏須要設置一個合理的複製緩衝區的值,防止replica節點全量複製(eg: repl-backlog-size = 重啓從實例時長 * 主實例offset每秒寫入量).分佈式
快照同步是一個耗時操做,將數據bgsave到磁盤中,而後將快照文件傳輸備份節點,當備份節點過長時間沒有鏈接上master節點/新備份節點剛增長到集羣中,須要執行快照同步。spa
快照同步有兩種策略:code
當開啓了無盤快照以後,每次傳輸的時候,默認不能爲其餘的備節點提供無盤快照,新的備節點將會排隊等待下一次無盤快照,能夠調整時間,達到多個副本並行傳輸.進程
當使用非SSD磁盤跟有比較大的帶寬的時候,採用無盤快照會比磁盤備份好不少.
能夠經過一下配置來設置無盤快照:
repl-diskless-sync no //當收到第一個無盤快照請求時,等待多少秒以後接受其餘備節點的無盤快照請求 repl-diskless-sync-delay 5
其實寫做這東西真的是花時間~不過當看到有人點贊/收藏的時候仍是很開心的,感受獲得了承認~
謝謝關注的各位~