redis主從復制(2)— replication buffer與replication backlog

1、redis主從復制過程
先不解釋replication buffer和replication backlog,而先看看redis主從復制的過程。

redis的主從復制分為兩個階段:

1)同步(sync rdb snapshot):slave復制master的某時間點(t)的全量數據,t為master接收到slave的sync命令后執行rdb bgsave的時間點。2.8增加psync,支持full resync和partial resync命令。master發送rdb文件到slave,slave讀取rdb把數據加載到內存。

2)命令傳播(commands propagation):同步時間點t后master上的數據更新到slave上, 發送的數據是redis的命令。

2、replication buffer的作用
redis的slave buffer(replication buffer,master端上)存放的數據是下面三個時間內所有的master數據更新操作。

1)master執行rdb bgsave產生snapshot的時間

2)master發送rdb到slave網絡傳輸時間

3)slave load rdb文件把數據恢復到內存的時間

replication buffer太小會引發的問題:

replication buffer由client-output-buffer-limit slave設置,當這個值太小會導致主從復制鏈接斷開。

1)當master-slave復制連接斷開,server端會釋放連接相關的數據結構。replication buffer中的數據也就丟失了,此時主從之間重新開始復制過程。

2)還有個更嚴重的問題,主從復制連接斷開,導致主從上出現rdb bgsave和rdb重傳操作無限循環。
查看[top redis headaches for devops – replication buffer]
因而推薦把slave replication buffer的hard/soft limit設置成512M

config set client-output-buffer-limit "slave 536870912 536870912 0"

3、replication backlog的出現

在2.8版本,redis使用了新的復制方式,引入了復制積壓緩沖(replication backlog)。
查看[Designing Redis replication partial resync]
1.png

上圖來自《redis設計與實現》
當主服務器進行命令傳播的時候,maser不僅將所有的數據更新命令發送到所有slave的replication buffer,還會寫入replication backlog。當斷開的slave重新連接上master的時候,slave將會發送psync命令(包含復制的偏移量offset),請求partial resync。如果請求的offset不存在,那么執行全量的sync操作,相當于重新建立主從復制。

4、區分replication buffer 和 replication backlog

1) replication buffer對應于每個slave,通過config set client-output-buffer-limit slave 設置。

2) replication backlog是一個環形緩沖區,整個master進程中只會存在一個,所有的slave公用。backlog的大小通過repl-backlog-size參數設置,默認大小是1M,其大小可以根據每秒產生的命令、(master執行rdb bgsave) +( master發送rdb到slave) + (slave load rdb文件)時間之和來估算積壓緩沖區的大小,repl-backlog-size值不小于這兩者的乘積。

參考資料:

[1] redis設計與實現(黃健宏)

[2] redis replication(http://redis.io/topics/replication)

[3] [Designing Redis replication partial resync](http://antirez.com/news/31)

轉自:http://mdba.cn/?p=804

原創文章,作者:s19930811,如若轉載,請注明出處:http://www.www58058.com/2478

(1)
s19930811s19930811
上一篇 2016-04-05 23:03
下一篇 2016-04-05 23:05

相關推薦

  • Memcached實現Tomcat的session會話綁定

    memcached介紹:  Memcached是一個高性能的分布式內存對稱緩存系統;通過緩存查詢數據庫結果,介紹數據庫訪問次數,以提高web應用的速度、提高擴展性。  Memcached特點:   協議簡單   基于libevent的事件處理   內置內存存儲方式  memcached不互相通信的分…

    Linux干貨 2015-08-01
  • 第八周作業

    1、寫一個腳本,使用ping命令探測172.16.250.1-172.16.250.254之間的所有主機的在線狀態;     在線的主機使用綠色顯示;     不在線的主使用紅色顯示; #!/bin/bash for i in {1..254};do if ping -c 1 -w 1 192.16…

    2017-07-03
  • 20160809作業

    一、如何設置tab縮進為4個字符       臨時設置:set tabstop=4       全局設置vim /etc/vimrc—>添加set tabstop=4       當前用戶生效,手動添加文…

    Linux干貨 2016-08-10
  • 權限管理

    權限管理包括普通權限、特殊權限、默認權限、ACL權限。 這些權限都是針對u(owner)、g(group)、o(other)三類定義的。 設置權限時文件和目錄不同(此處把文件和目錄分開,一般說文件就包含目錄(linux思想:一切皆文件))如下圖所示, 分別用兩個用戶分別創建了一個目錄一個文件,可以看到同是目錄的liutest和test的權限不同,它倆同為目錄…

    Linux干貨 2017-07-30
  • systemd

    systemd的新特性(centos 7) 系統引導時實現服務并行啟動 按需激活進程,在此之前可以讓進程處于半活動狀態 系統狀態快照:能夠自我保存當前系統上沒一個用戶空間的進程運行狀態快照,將來可以迅速恢復到某一種狀態,因此用戶空間有了時間機器??梢曰貪L到過去某一時刻的狀態 內在的基于依賴關系定義的服務控制邏輯 對與systemd來講,引入了一個新的核心概念…

    Linux干貨 2016-09-23
  • 文本查找相關命令簡單介紹

    文件查找命 在文件系統上查找符合條件的文件 非實時查找:基于索引查找 locate 實時查找:find locate介紹 依賴于事先構建的索引:索引的構建是在系統較為空閑時自動進行(周期性任務):手動更新數據庫(updatedb) 索引構建過程需要遍歷整個根文件系統,極消耗資源,生產中盡量避免手動更新。 語法: locate KEYWORD -i:忽略大小寫…

    Linux干貨 2017-04-10
欧美性久久久久