redis複製(集羣的複製)

1.複製

redis集羣,使用info replication查看本redis的信息,包括是主從redis等信息

redis-server /etc/redis.conf --port 6380 --slaveof 127.0.0.1 6379 建立一個從數據庫  或者連接上數據庫後,使用slaveof 127.0.0.1 6379 連接主數據庫

redis-cli -p 6380 連接6380端口的數據庫

主數據庫一般負責寫,從數據庫負責讀

在從數據庫啓動後,會相主數據庫發送sync命令,這時主數據庫會在後臺生成rdb快照文件,和生產快照期間的命令緩存起來一起發送到從數據庫

在從數據庫和主數據庫連接期間,主數據庫向從數據庫複製的時候,會採取的樂觀複製的方式,也就是說,主數據庫接受客戶端的命令並執行完命令後,將執行結果返回給客戶端,並異步的將命令同步給從數據庫,這期間,主數據庫和從數據庫之間存在着不同,但他們的最終數據會同步。但是,在主數據庫執行完一條寫命令後,再將命令同步到從數據庫之前,從數據庫與主數據庫連接中斷,造成二者之間數據的不一致性,

現在有兩個問題,第一個是,主數據庫不知道同步給了多少個從數據庫,所以在配置文件中,通過設置,

min-slaves-to-write 3  意思是,只有3個或者3個從數據庫連接主數據庫,主數據庫纔是可寫的

min-slaves-max-log 10    意思是,從數據庫最長失聯多長時間,當超過10秒之後,就認爲該從數據庫失聯了

第二個問題是,在主數據庫和從數據庫失聯之後,從數據庫的恢復問題。這時採用的就是增量複製,每個數據庫都會有一個獨立的ID,每次重啓數據庫之後,ID都會不同,在複製同步階段,主數據庫在講數據發送到從數據庫的時候,會將該命令存儲到積壓隊列中(backlog),並記錄該積壓隊列的命令的偏移範圍,從數據裏接到命令之後,會存儲該命令的偏移位置。

當從數據庫恢復數據的時候,會先將自己的主數據庫的ID傳到主數據庫中,進行驗證他們之間是否是主從關係,然後,從數據庫將最後一條同步的命令的偏移量取出,判斷是否在主數據庫的積壓隊列的偏移範圍之內,如果在,主數據庫會將該偏移量之後的命令傳給從數據庫,如果不在,則執行全部複製



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