Redis復制(replication)


介紹

Redis支持簡單的主從(master-slave)復制功能,當主Redis服務器更新數據時能將數據同步到從Redis服務器

配置

在Redis中使用復制功能非常容易

  • 在從Redis服務器的redis.conf中寫入slaveof masterip masterport即可,主Redis服務器不需要做任何配置
  • 在啟動Redis服務器的時候,指定主服務器,redis-server --slaveof masterip masterport
  • 在客戶端指定主服務器,redis> SLAVEOF masterip masterport,SLAVEOF命令會停止與原有主服務器的同步,轉而向新主服務器進行同步

復制運行原理

當從Redis服務器啟動時會向主Redis服務器發送SYNC命令,主Redis服務器接收到SYNC命令后開始進行RDB持久化,並將這期間接收到的寫入操作命令都緩存起來,等RDB持久化完成后,將快照和緩存起來的命令一並發送給從Redis服務器,從Redis服務器接收到后開始載入快照和命令,這一過程稱之為復制初始化。復制初始化完成后,每當主Redis接收到寫入命令后,就會將命令同步給從Redis服務器,保證主從數據一致。

增量復制

在Redis2.6之前,主從斷開重連后,一定會進行一次快照操作然后將快照發送給從數據庫,即使斷開期間只有幾條命令被執行,這就使得斷開重連后的數據恢復過程效率很低。在Redis2.8之后,主從斷開重連后會根據斷開之前最新的命令偏移量進行增量復制
1)主服務器在同步命令到從服務器的時候,會先將命令放入一個緩沖隊列中並記錄一個復制偏移量,同時主從服務器都會記錄一個主服務器的運行ID。
2)當主從斷開重連后,會判斷主服務器保存的運行ID和從服務器發送過來的運行ID是否相同,相同則將從復制偏移量開始往后的所有命令一並發送給從服務器。如果不同,則進行一次復制初始化(將RDB快照和和這期間緩存起來的命令一並發送給主服務器)。
3)緩沖隊列的大小默認是1MB,可以在redis.conf中的配置項repl-backlog-size進行設置,還有一個配置項repl-backlog-ttl,表示當主從斷開后,緩沖隊列的緩存時間。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM