您好,登錄后才能下訂單哦!
持久化保證了即使 redis 服務重啟也會丟失數據,因為 redis 服務重啟后會將硬盤上持久化的數據恢復到內存中,但是當 redis 服務器的硬盤損壞了可能會導致數據丟失,如果通過 redis 的主從復制機制就可以避免這種單點故障,如下圖:
說明:
主 redis 中的數據有兩個副本(replication)即從 redis1 和從 redis2,即使一臺 redis 服務器宕機其它兩臺 redis 服務也可以繼續提供服務。
主 redis 中的數據和從 redis 上的數據保持實時同步,當主 redis 寫入數據時通過主從復制機制會復制到兩個從 redis 服務上。
只有一個主 redis,可以有多個從 redis。
主從復制不會阻塞 master,在同步數據時,master 可以繼續處理 client 請求。
一個 redis 可以即是主又是從,如下圖:
1、主 redis 配置
無需特殊配置。
2、從redis配置
修改從 redis 服務器上的 redis.conf 文件,添加 slaveof 主 redisip 主 redis 端口。
上邊的配置說明當前該從 redis 服務器所對應的主 redis 是192.168.101.3,端口是6379。
1、完整復制過程
在 redis2.8 版本之前主從復制過程如下圖:
復制過程說明:
slave 服務啟動,slave 會建立和 master 的連接,發送 sync 命令。
master 啟動一個后臺進程將數據庫快照保存到 RDB 文件中
注意:此時如果生成 RDB 文件過程中存在寫數據操作會導致 RDB 文件和當前主 redis 數據不一致,所以此時 master 主進程會開始收集寫命令并緩存起來。
master 就發送 RDB 文件給 slave
slave 將文件保存到磁盤上,然后加載到內存恢復
master 把緩存的命令轉發給 slave
注意:后續 master 收到的寫命令都會通過開始建立的連接發送給 slave。
當 master 和 slave 的連接斷開時 slave 可以自動重新建立連接。如果 master 同時收到多個 slave 發來的同步連接命令,只會啟動一個進程來寫數據庫鏡像,然后發送給所有 slave。
完整復制的問題:
在 redis2.8 之前從 redis 每次同步都會從主 redis 中復制全部的數據,如果從 redis 是新創建的從主 redis 中復制全部的數據這是沒有問題的,但是,如果當從 redis 停止運行,再啟動時可能只有少部分數據和主 redis 不同步,此時啟動 redis 仍然會從主 redis 復制全部數據,這樣的性能肯定沒有只復制那一小部分不同步的數據高。
2、部分復制
部分復制說明:
從機連接主機后,會主動發起 PSYNC 命令,從機會提供 master 的 runid(機器標識,隨機生成的一個串) 和 offset(數據偏移量,如果offset主從不一致則說明數據不同步),主機驗證 runid 和 offset 是否有效,runid 相當于主機身份驗證碼,用來驗證從機上一次連接的主機,如果 runid 驗證未通過則,則進行全同步,如果驗證通過則說明曾經同步過,根據 offset 同步部分數據。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。