一、redis主從復制特點:
1.master可以擁有多個slave
2.多個slave可以連接同一個master外,還可以連接到其他slave
3.主從復制不會阻塞master,在同步數據時,master可以繼續處理client請求
4.提高系統的伸縮性
5.可以在master禁用數據持久化,注釋掉master配置文件中的所有save配置,只需在slave上配置數據持久化
二、redis主從復制過程:
當配置好slave后,slave與master建立連接,然后發送sync命令。無論是第一次連接還是重新連接,master都會啟動一個后台進 程,將數據庫快照保存到文件中,同時master主進程會開始收集新的寫命令並緩存。后台進程完成寫文件后,master就發送文件給 slave,slave將文件保存到硬盤上,再加載到內存中,接着master就會把緩存的命令轉發給slave,后續master將收到的寫命令發送給 slave。如果master同時收到多個slave發來的同步連接命令,master只會啟動一個進程來寫數據庫鏡像,然后發送給所有的slave。
三、redis主從配置過程
/> redis-cli -p 6380
redis 127.0.0.1:6380> slaveof 127.0.0.1 6379
OK
OK
上面的方式只是保證了在執行slaveof命令之后,redis_6380成為了redis_6379的slave,一旦服務(redis_6380)重新啟動之后,他們之間的復制關系將終止。
如果希望長期保證這兩個服務器之間的主從關系,可以在redis_6380的配置文件中做如下修改:
/> vi 6380.conf
將
# slaveof <masterip> <masterport>
改為
slaveof 127.0.0.1 6379
保存退出。
-
SLAVEOF host port
SLAVEOF 命令用於在 Redis 運行時動態地修改復制(replication)功能的行為。
通過執行 SLAVEOF host port
命令,可以將當前服務器轉變為指定服務器的從屬服務器(slave server)。
如果當前服務器已經是某個主服務器(master server)的從屬服務器,那么執行 SLAVEOF host port
將使當前服務器停止對舊主服務器的同步,丟棄舊數據集,轉而開始對新主服務器進行同步。
另外,對一個從屬服務器執行命令 SLAVEOF NO ONE
將使得這個從屬服務器關閉復制功能,並從從屬服務器轉變回主服務器,原來同步所得的數據集不會被丟棄。
利用『 SLAVEOF NO ONE
不會丟棄同步所得數據集』這個特性,可以在主服務器失敗的時候,將從屬服務器用作新的主服務器,從而實現無間斷運行。
SLAVEOF host port
,O(N),
N
為要同步的數據數量。
SLAVEOF NO ONE
, O(1) 。
OK
。
(integer) 1
"1"
1) "a"
2) "ab"
1) "a"
2) "ab"
1) "ab"
1) "ab"
參考:
http://redis.readthedocs.org/en/latest/server/slaveof.html
http://redis.io/topics/replication
http://www.cnblogs.com/stephen-liu74/archive/2012/02/23/2364717.html
http://sofar.blog.51cto.com/353572/861276/