Redis主從複製的配置以及全量複製和部分複製講解

主配置

  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數據就能達到同步。
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章