redis主從複製過程和實現主從複製

一.redis主從複製同步實現的過程

1.從服務發送一個sync同步命令給主服務要求全量同步
2.主服務接收到從服務的sync同步命令時,會fork一個子進程後臺執行bgsave命令(非阻塞)快照保存,生成RDB文件,並將
RDB文件發送給從服務
3.從服務再將接收到的RDB文件載入自己的redis內存
4.待從服務將RDB載入完成後,主服務再將緩衝區所有寫命令發送給從服務
5.從服務在將主服務所有的寫命令載入內存從而實現數據的完整同步
6.從服務下次在需要同步數據時只需要發送自己的offset位置(相當於mysql binlog的位置)即可,只同步新增加的數據,再不需要全量同步

二.通過命令行實現redis主從同步

master 192.168.1.9
slave 192.168.1.9
注意:建議保持主從redis的版本一致,避免導致因版本差異無法建立主從連接

1.設置master的配置文件

[root@localhost ~]# vim /app/redis/etc/redis.conf
…
bind 127.0.0.0.1 192.168.1.9 #綁定監聽地址
…
port 6379 #默認開啓的端口號
….
daemonize yes  #以守護進程開啓

supervised systemd  #由systemd管理服務的啓動、停止.

pidfile /app/redis/run/redis_6379.pid  #進程的pid保存路徑

logfile "/app/redis/log/redis_6379.log"  #日誌文件保存路徑
save 2 1              #每隔2秒進行一次快照保存
stop-writes-on-bgsave-error yes    #當快照保存失敗會禁止寫入redis,默認爲yes,一般改爲no不開啓
dbfilename dump.rdb    #保存快照的文件名
dir /app/redis/data/             #保存快照的路徑     
requirepass 123456     #設置redis登錄的連接密碼
…

2.開啓redis主服務並查看內存中的數據

[root@localhost ~]# redis-server /app/redis/etc/redis.conf 
[root@localhost ~]# redis-cli 
127.0.0.1:6379> auth 123456
OK
127.0.0.1:6379> keys *
1) "wang"
2) "dfd"
3) "lady"
4) "ddsds"
5) "name"
6) "zhang"
127.0.0.1:6379> 

3.先查看slave從服務狀態,在未設置時,從服務默認也爲master主服務

127.0.0.1:6379> info replication
#Replication
role:master
connected_slaves:0
master_replid:177a7792d02eb8e89c07b5441825a0f50d8ae8b8
master_replid2:37938cb9db73839bfc72e3fc805d42c56dc6352d
master_repl_offset:2240
second_repl_offset:2241
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:57
repl_backlog_histlen:2184

4.設置slave從服務的配置文件

[root@localhost ~]# vim /app/redis/etc/redis.conf
…
bind 127.0.0.0.1 192.168.1.106 #綁定監聽地址
…
port 6379 #默認開啓的端口號
….
daemonize yes  #以守護進程開啓

dir /app/redis/data/             #保存快照的路徑     
requirepass 123456     #設置redis登錄的連接密碼
…

5.slave從服務命令行操作實現主從連接

[root@localhost ~]# redis-server /app/redis/etc/redis.conf
[root@localhost ~]# redis-cli
127.0.0.1:6379> auth 123456
OK
127.0.0.1:6379> slaveof 192.168.1.9 6379   #設置爲另一臺服務的從服務
127.0.0.1:6379>config set masterauth 123456 #配置與主服務匹配的連接密碼
127.0.0.1:6379> info replication   #查看主從連接是夠成功
#Replication
role:slave                       #已經切換爲從服務
master_host:192.168.1.9  #主服服主機的ip
master_port:6379
master_link_status:up  #主從連接建立成功
…..
…..
27.0.0.1:6379> keys *  #查看從主服器同步到的數據
1) "wang"
2) "name"
3) "dfd"
4) "zhang"
5) "ddsds"
6) "lady"

6.也可在命令行取消主從同步

127.0.0.1:6379> slaveof no one   #取消主從同步的命令
OK
127.0.0.1:6379> info replication  #查看是否取消成功
#Replication
role:master               #已切換到master
connected_slaves:0
master_replid:77eab93a7015b0d338d1c44040d632e698d0159b
master_replid2:37938cb9db73839bfc72e3fc805d42c56dc6352d
master_repl_offset:4004
second_repl_offset:4005
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2241
repl_backlog_histlen:1764  

三.通過配置文件實現主從同步

1.只需配置從服務配置文件

[root@localhost ~]# vim /app/redis/etc/redis.conf
…..
slaveof 192.168.1.9 6379  #添加屬於某臺主機的從 服務
…..
masterauth 123456  #從服務連接主服的密碼
…… 
slave-read-only yes  #從服務只讀,不可在命令行寫入數據
……

2.重新啓動從服務即實現主從連接

[root@localhost ~]# redis-server /app/redis/etc/redis.conf
[root@localhost ~]# redis-cli
127.0.0.1:6379> auth 123456
OK
127.0.0.1:6379> info replication
#Replication
role:slave
master_host:192.168.1.9
master_port:6379
master_link_status:up
……
……
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章