簡體   English   中英

Redis群集中“磁盤支持的”復制如何工作

[英]how does “Disk-backed” replication work in redis cluster

redis.conf說:

1)支持磁盤:Redis主服務器創建一個新過程,將RDB文件寫入磁盤。 之后,文件由父進程逐步傳輸到從屬服務器

我只是不知道“由父進程轉移到奴隸”是什么意思?

謝謝

很簡單。 首先,將RDB文件讀入緩沖區,然后使用socket.write將其發送到正在監聽的Salve端口。

實現比我說的要復雜。 但這就是redis所做的。 您可以在redis / src中引用replication.c以獲得更多詳細信息。

編輯:

是的, 無磁盤機制僅使用子進程,而不使用磁盤作為中間存儲,而直接通過電線將RDB發送到從屬。
實際上,如果您使用磁盤保存RDB,則redis主服務器可以同時為多個從服務器提供服務而無需排隊。 無盤復制一旦在從屬服務器上運行,並且如果另一個從屬服務器出現並要進行完全同步,則需要將其排隊等待第一個從屬服務器完成。 因此,還有另一個設置repl-diskless-sync-delay來等待更多從屬服務器並行執行此操作。

並且這兩種方法僅在發生錯誤后才發生。 在正常情況下,redis主機和主機通過一條連接良好的導線進行復制以復制redis命令從機,以使主機和從機之間保持相同。 並且如果電線斷線或從機掉線,則需要執行部分重新同步操作以獲得丟失的部分從機。 如果無法實現psync,它將嘗試執行完全重新同步。 完全重新同步就是我們所說的。

完整同步的工作方式如下:

主機開始后台保存過程以生成RDB文件。 同時,它開始緩沖從客戶端收到的所有新寫命令。 后台保存完成后,主服務器將數據庫文件傳輸到從服務器,從服務器將其保存在磁盤上,然后將其加載到內存中。 然后,主機將所有緩沖命令發送到從機。 這是作為命令流完成的,並且與Redis協議本身的格式相同。

無盤復制只是一項新功能,在這種情況下,它支持完全重新同步以應對緩慢的磁盤壓力。 有關它的更多信息,請參閱https://redis.io/topics/replication 例如如何做psync以及為什么psync會失敗,您可以從本文中找到答案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM