Redis支持複製的功能,以實現當一臺服務器的數據更新後,自動將新的數據同步到
redis
其它數據庫。數據庫
Redis複製實現中,把數據庫分爲主數據庫master和從數據庫slave,主數據庫能夠緩存
進行讀寫操做,從數據庫通常是隻讀的,當主數據庫數據變化的時候,會自動同步給從數服務器
據庫。less
一,複製帶來的好處工具
1:能夠實現讀寫分離性能
2:利於在主數據庫崩潰時的數據恢復ip
二, 複製的配置同步
主數據庫不作配置;從數據庫須要在配置中設置slaveof 主數據庫ip 主數據庫端口。it
三,複製的基本操做命令
1:info replication :能夠查看複製節點的相關信息
2:slaveof:可在運行期間修改slave節點的信息,若是該數據庫已是某個主數據庫的從數
據庫,那麼會中止和原主數據庫的同步關係,轉而和新的主數據庫同步
3:slaveof no one:使當前數據庫中止與其餘數據庫的同步,轉成主數據庫
四,複製的基本原理
1:slave啓動時,會向master發送sync命令,2.8版後發送psync,以實現增量複製
2:主數據庫接到sync請求後,會在後臺保存快照,也就是實現RDB持久化,並將保
存快照期間接收到的命令緩存起來
3:快照完成後,主數據庫會將快照文件和全部緩存的命令發送給從數據庫
4:從數據庫接收後,會載入快照文件並執行緩存的命令,從而完成複製的初始化
5:在數據庫使用階段,主數據庫會自動把每次收到的寫命令同步到從服務器
五,樂觀複製策略
Redis採用樂觀複製的策略,容忍在必定時間內主從數據庫的內容不一樣,當
然最終的數據會是同樣的。這個策略保證了性能,在複製的時候,主數據庫並不
阻塞,照樣處理客戶端的請求。
Redis提供了配置來限制只有當數據庫至少同步給指定數量的從數據庫時,
主數據庫纔可寫,不然返回錯誤。配置是:min-slaves-to-write、min-slavesmax-lag
六,無硬盤複製
當複製發生時,主數據庫會在後臺保存RDB快照,即便你關閉了RDB,它也會這麼作,這樣就會導
致:
1:若是主數據庫關閉了RDB,如今強行生成了RDB,那麼下次主數據庫啓動的時候,可能會從RDB來恢復數
據,這多是舊的數據。
2:因爲要生成RDB文件,若是硬盤性能不高的時候,會對性能形成必定影響
所以從2.8.18版本,引入了無硬盤複製選項:repl-diskless-sync
七,哨兵(sentinel)
Redis提供了哨兵工具來實現監控Redis系統的運行狀況,主要實現:
1:監控主從數據庫運行是否正常
2:當主數據庫出現故障時,自動將從數據庫轉換成爲主數據庫
3:使用Redis-sentinel,redis實例必須在非集羣模式下運行
開啓哨兵功能
創建一個sentinel.conf文件,裏面設置要監控的主數據庫的名字,形如:
sentinel monitor 監控的主數據庫的名字127.0.0.1 6379 1
1 表示選舉主數據庫的最低數
(1)這個文件的內容,在運行期間會被sentinel動態進行更改
(2)能夠同時監控多個主數據庫,一行一個配置便可