1. 程式人生 > >redis 復制

redis 復制

sync 緩沖區 重新 完全 時間差 寫入 slave 查詢 nbsp

配置:

  配置項:slaveof <masterip> <masterport>

  信息查詢:INFO REPLICATION

完全重新同步:

  當從實例第一次連接到主實例時,總是需要進行完全重新同步。在進行完全重新時,為了將所有數據復制到從實例中,主實例將數據轉儲到一個RDB文件(保存到磁盤,占用內存),然後發送給從實例;從實例接受到RDB文件後,會先將內存中的數據清空,然後將RDB文件中的數據導入。主實例上的復制過程時完全異步的,因此不會阻礙請求的處理。

部分重新同步:

  當主實例與從實例斷開連接後,主實例會將期間所做的操作記錄到命令積壓緩沖區replication backlog中;當從實例重連後使用PSYNC命令來發送最後一個的master_replid和最後一個master_repl_offset;主實例首先會檢查請求中的master_replid是否與自己的一致,然後再檢查請求中的offset能否從replication backlog中獲取,如果能master_repl_offset在緩沖區範圍內,主實例將從master_repl_offset開始到隊列結束的數據傳給slave,從而達到同步,降低了使用全量復制的開銷。否則,如果主實例在連接斷開期間,寫入的命令數量超出了緩沖區的容量,那麽部分重新同步就會被拒絕,完全重新同步將會開啟。

backlog緩沖區的大小默認事1M,可以利用以下公式估算緩沖區合適大小:

  t*(master_repl_offset2-master_repl_offset1)/(t2-t1)

  t是斷開連接的時間。公式是先用兩個時間節點的偏移量除以時間差算出平均流量,然後乘以斷開時間。

redis 復制