一、概述
Redis主從同步結構與Mysql類似[Mysql主從同步]https://blog.csdn.net/ck784101777/article/details/100898344
但是Redis并不需要binlog日志,也不需要進行多少配置,隻需要指定目前主機是哪台主機的從伺服器即可
主從複制工作原理:
1)slave向master發送sync指令
2)master啟動背景存盤程序,并速記所有修改資料的指令
3)master完成背景存盤後,傳輸整個資料檔案到slave
4)slave接受資料檔案,加載到記憶體中完成首次完全同步
5)後續有新資料産生時,master繼續收集資料修改指令一次傳給slave,完成同步
對比Mysql主從複制的流程
1)主伺服器執行完全備份
2)将完全備份資料導入從伺服器,從伺服器執行完全備份檔案,完成第一次資料同步
3)主伺服器上開啟binlog日志,指定唯一id号,确定偏移量
4)從伺服器确定唯一id好,通過指令指定主伺服器資訊
我們可以看到相似性,即都完成了一次完全同步,在這個基礎上從伺服器繼續收集主伺服器資料
二、配置Redis主從複制
[安裝Redis伺服器教程]https://blog.csdn.net/ck784101777/article/details/101294306
1.拓撲圖
2.将主機192.168.4.51配置為主伺服器
每台redis伺服器,預設都是主伺服器;是以主伺服器不需要配置。
- [[email protected] ~]# redis-cli -h 192.168.4.51 –p 6351
- 192.168.4.51:6351> info replication //檢視複制資訊
- # Replication
- role:master //是master 伺服器
- connected_slaves:0 //從伺服器個數零台
- master_replid:eaa14478158a71c41f947eaea036658c2087e8f2
- master_replid2:0000000000000000000000000000000000000000
- master_repl_offset:0
- second_repl_offset:-1
- repl_backlog_active:0
- repl_backlog_size:1048576
- repl_backlog_first_byte_offset:0
- repl_backlog_histlen:0
- 192.168.4.51:6351>
3.将主機192.168.4.52配置為192.168.4.51的從伺服器
1)指令行配置(馬上生效)
指令行配置非常簡單,一條指令即可:slaveof 主伺服器ip 端口
- [[email protected] ~]# redis-cli -h 192.168.4.52 –p 6352
- 192.168.4.52:6352> slaveof 192.168.4.51 6351 //指定主伺服器ip位址與端口
- OK
- 192.168.4.52:6352> info replication //檢視複制資訊
- # Replication
- role:slave //從伺服器
- master_host:192.168.4.51 //主伺服器ip位址
- master_port:6351 //主伺服器端口
- master_link_status:up //連接配接狀态開啟
- master_last_io_seconds_ago:3
- master_sync_in_progress:0
2)永久配置(重新redis服務後,依然有效)
- [[email protected] ~]# vim /etc/redis/6379.conf
- slaveof 192.168.4.51 6351 //在檔案末尾添加或在原有配置項上修改都可以
- :wq
3)在主伺服器确認複制資訊
- [[email protected] ~]# redis-cli -h 192.168.4.51 –p 6351
- 192.168.4.51:6351> info replication //檢視複制資訊
- # Replication
- role:master
- connected_slaves:1 //從伺服器個數 1台
- slave0:ip=192.168.4.52,port=6352,state=online,offset=14,lag=1 //從伺服器資訊
- master_replid:db7932eb0ea4302bddbebd395efa174fb079319f
- master_replid2:0000000000000000000000000000000000000000
- master_repl_offset:14
- second_repl_offset:-1
- repl_backlog_active:1
- repl_backlog_size:1048576
- repl_backlog_first_byte_offset:1
- repl_backlog_histlen:14
- 192.168.4.51:6351>
4.測試
1)用戶端連接配接主伺服器存儲資料
- [[email protected] ~]# redis-cli -h 192.168.4.51 –p 6351
- 192.168.4.51:6351> set x 9
- OK
- 192.168.4.51:6351> set y 8
- OK
- 192.168.4.51:6351> set z 7
- OK
- 192.168.4.51:6351>
2)在從伺服器本機登入,檢視資料(與主伺服器資料一緻)
- [[email protected] ~]# redis-cli -h 192.168.4.52 –p 6352
- 192.168.4.52:6352> keys *
- 1)“x”
- 2)“y”
- 3)“z”
- 192.168.4.52:6352>
三、帶驗證的主從複制
通過以上案例我們知道主從複制非常簡單,隻需要一台裝有Redis的伺服器,通過一條指令即可實作,但是這樣非常的危險,因為任何一個知道主伺服器ip和端口的操作員都可以通過配置主從複制來盜取主伺服器上的資料,是以我們需要帶驗證的主從複制,即在進行主從配置的時候加入驗證資訊(輸入驗證密碼)來確定安全性
1.設定主伺服器192.168.4.51 設定連接配接密碼123456
修改主伺服器的配置檔案,設定密碼。
- [[email protected] ~]# vim +501 /etc/redis/6379.conf
- requirepass 123456 //設定密碼
- :wq
- [[email protected] ~]# vim +43 /etc/init.d/redis_6379 //修改腳本
- $CLIEXEC -h 192.168.4.51 -p 6351 -a 123456 shutdown //添加密碼
- :wq
- [[email protected] ~]# /etc/init.d/redis_6379 stop //停止服務
- [[email protected] ~]# /etc/init.d/redis_6379 start //啟動服務
- Starting Redis server...
- [[email protected] ~]#
- [[email protected] ~]# netstat -utnlp | grep :6351 //檢視端口
- tcp 0 0 192.168.4.51:6351 0.0.0.0:* LISTEN 11523/redis-server
2.配置從伺服器192.168.4.52
1) 修改配置檔案,設定從伺服器連接配接密碼。
- [[email protected] ~]# /etc/init.d/redis_6379 stop //停止服務
- [[email protected] ~]# vim +289 /etc/redis/6379.conf
- masterauth 123456 //設定密碼
- :wq
- [[email protected] ~]# /etc/init.d/redis_6379 start //啟動服務
- Starting Redis server...
- [[email protected] ~]#
- [[email protected] ~]# netstat -utnlp | grep :6351 //檢視端口
- tcp 0 0 192.168.4.51:6351 0.0.0.0:* LISTEN 11523/redis-server
2) 在從伺服器本機連接配接服務,檢視複制資訊
- [[email protected] ~]# redis-cli -h 192.168.4.52 –p 6352
- 192.168.4.52:6352> info replication //檢視複制資訊
- # Replication
- role:slave //從伺服器
- master_host:192.168.4.51 //主伺服器ip位址
- master_port:6351 //主伺服器端口
- master_link_status:up //連接配接狀态開啟
- master_last_io_seconds_ago:3
- master_sync_in_progress:0
- ……
- ……
- 192.168.4.52:6352>