主配置
1 daemonize yes
2 pidfile /var/run/redis-6382.pid
3 port 6382
4 logfile "/usr/local/redis/redis-5.0.4/data/6382.log"
5 dbfilename dump-6382.rdb
6 dir /usr/local/redis/redis-5.0.4/data/
7 slave-read-only yes
從配置
1 daemonize yes
2 pidfile /var/run/redis-6383.pid
3 port 6383
4 logfile "/usr/local/redis/redis-5.0.4/data/6383.log"
5 dbfilename dump-6383.rdb
6 dir /usr/local/redis/redis-5.0.4/data/
7 slaveof 127.0.0.1 6382
開啓主從redis
redis-server redis-6382.conf
查看是否開啓成功
ps -aux | grep redis
開啓客戶端redis
redis-cli -p 6382
查看replication
查看run_id(標識作用)
redis-cli -p 6382 info server | grep run
全量複製
對於一個存儲了很多信息的master,slave需要同步連接master之前的數據,以及連接當前的數據,就用到全量複製。
1.psyns ? -1 第一個參數表示run_id 第二個參數表示偏移量,第一次不知道兩個值,所以傳?和-1
2.master收到slave的消息後,把run_id和偏移量傳給slave
3.slave報錯master的基本信息
4.master生成快照,bgsave是觸發redis生成快照的方式之一
5.redis的buffer緩衝區中保存了最新數據
部分複製
如果slave突然斷開連接,爲保證這段時間master中的數據不會再slave中丟失,當slave再次連接的時候,使用部分複製實現數據同步(雖然可以使用全量複製,但是全量複製開銷大)
下圖中的第四步,slave把自己的run_id和偏移量給master,如果master發現偏移量在自己的buffer(隊列)內,則返回contiune,把buffer中的數據傳給slave,如果超出了buffer,爲了保證數據不丟失,則只能使用全量複製。這樣,slave和master數據就能達到同步。