1. 程式人生 > >Redis的複製原理和配置引數

Redis的複製原理和配置引數

Redis使用的是master-slave主從複製模式,從2.8版本開始,這個過程是非同步的。


1. 工作原理


當一個slave首次或重新連線到master的時候,會向master傳送一個PSYNC命令(2.8版本之前是SYNC命令)要求同步資料。


1.1 全量同步 Full resynchronization


當master接收到slave的同步命令之後會執行BGSAVE啟動一個background程序建立.rdb持久化檔案,同時會將所有新執行的寫入命令都儲存到一個緩衝區裡面。當.rdb儲存完畢之後,master會把.rdb檔案傳送給slave,然後slave會把儲存的.rdb檔案load到記憶體裡面,最後master會將緩衝區裡面的所有寫命令傳送給slave。如果master接收到多個slave的同步請求,master只會執行一次BGSAVE命令,然後把儲存的.rdb檔案同時傳送給所有的slave(佔用較多的資源和頻寬)。當master-slave的連線由於某種原因斷開時,slave會自動重新連線。在2.8版本之前,斷線後的重新連線是會執行全量同步,在2.8版本開始,slave是可以根據master的情況來自動選擇執行全量同步還是增量同步(partial resynchronization)。


1.2 增量同步 Partial resynchronization



從2.8版本開始,Redis在master端建立了一個複製流的記憶體緩衝區,master和所有slave都標記一個複製的偏移量和master runid,用於當master-slave連線短暫斷開然後重新連線的時候,master和slave可以執行增量同步,也就是從之前斷開的部分開始同步,而不需要執行全量同步。前提條件是master runid和之前是相同的,並且標記的複製偏移量仍然在複製流的記憶體緩衝區裡面,否則的話會執行全量同步。這種新的增量同步特性會使用PSYNC命令,而2.8版本之前會使用SYNC命令。值得注意的是,如果slave是2.8或以上的版本能夠檢測master是否支援PSYNC命令,如果不支援會自動使用SYNC命令。


2. 無盤複製 Diskless replication



從2.8.18版本開始支援無盤複製,master以流的方式直接傳送資料給slave,不需要建立.rdb檔案,slave接收資料後仍然會儲存.rdb檔案然後load到記憶體裡面。這種選項的優點就是避免master的磁碟讀寫慢導致的效能問題。


3. Replication的配置


Redis的複製有3種配置方式:


3.1 在slave的配置檔案redis.conf裡面新增slaveof <masterip> <masterport>,masterip是master的ip,masterport是master的埠
3.2 在使用redis-server啟動slave的時候,直接新增--slaveof <masterip> <masterport>引數(非配置檔案啟動方式)
3.3 使用redis-cli連線slave,然後執行slaveof <masterip> <masterport>命令


4. slave端的相關配置



slave-read-only yes #從2.6版本開始支援只讀的slave,預設是yes的


masterauth <master-password> #如果master配置了requirepass設定密碼,slave需要配置連線master的密碼


slave-serve-stale-data yes #當slave與master斷開或者複製正在進行的時候是否繼續提供服務,預設是yes繼續服務,可以配置為no返回錯誤提示“SYNC with master in progress”(除了INFO和SLAVEOF命令)


repl-ping-slave-period 10 #slave傳送心跳的間隔時間,預設是10秒


5. master端的相關配置



repl-diskless-sync no #是否使用無盤複製 Diskless replication,預設是no


repl-diskless-sync-delay 5 #無盤複製延時開始秒數,預設是5秒,意思是當PSYNC觸發的時候,master延時多少秒開始向master傳送資料流,以便等待更多的slave連線可以同時傳送資料流,因為一旦PSYNC開始後,如果有新的slave連線master,只能等待下次PSYNC。可以配置為0取消等待,立即開始


repl-backlog-size 1mb #複製流的記憶體緩衝區大小,用於增量同步,當master-slave斷開的時候,master儲存在複製流記憶體緩衝區的資料大小限制,預設是1mb。如果至少有1個slave連線的話,就會釋放


repl-backlog-ttl 3600 #複製流的記憶體緩衝區過時時間,預設3600秒,就是說無論儲存在複製流記憶體緩衝區的資料大小是否超過限制,當master-slave斷開超過上述時間就會釋放


min-slaves-to-write 3 #從2.8版本開始,可以配置與master連線的slave的最少數量,預設是0沒有限制,如果配置>0,需要結合下面的選項一起使用,只有同時滿足這2個選項,master才能接收寫操作


min-slaves-max-lag 10 #允許master-slave的心跳最大間隔,預設是10秒,需要結合min-slaves-to-write選項一起使用

6. 複製+持久化的資料完整性考慮


如果master配置了slave,那麼強烈建議master啟用持久化。因為當master重啟的時候,如果沒有啟用持久化,資料會全部丟失,而且當slave重新連線master的時候,slave原有的資料也會被清空。如果真的要配置不啟用持久化,最好不要設定自動啟動master,除非資料全部丟失對你來說不重要。

相關推薦

Redis複製原理配置引數

Redis使用的是master-slave主從複製模式,從2.8版本開始,這個過程是非同步的。1. 工作原理 當一個slave首次或重新連線到master的時候,會向master傳送一個PSYNC命令(2.8版本之前是SYNC命令)要求同步資料。1.1 全量同步 Full

MySQL 主從複製原理配置

工作原理圖: 主從複製的原理: 分為同步複製和非同步複製,實際複製架構中大部分為非同步複製。 複製的基本過程如下: 1).Slave上面的IO程序連線上Master,並請求從指定日誌檔案的指定位置(或者從最開始的日誌)之後的日誌內容; 2).Master接收

Redis持久化原理配置詳解(RDB方式AOF方式)

Redis的強大功能很大程度上是由於其將所有資料都儲存在記憶體中。為了使Redis在重啟後仍能保證資料不丟失,需要將資料從記憶體中以某種形式持久化到硬碟中。Redis支援兩種持久化方式,一種是RDB方式,一種是AOF方式。可以單獨使用其中一種或兩種結合使用。(持

redis學習教程一《Redis的安裝配置

遠程服務 name 工具 列表 端口號 裏的 redis服務器 映射 tin redis學習教程一《Redis的安裝和配置》 Redis的優點 以下是Redis的一些優點。 異常快 - Redis非常快,每秒可執行大約110000次的設置(SET)操作,每秒大約可執

二、Redis命令行配置文件redis.windows.conf

存在 默認 localhost 字符串 con all get bsp 多行 一、Redis發送命令的兩種方式 redis-cli -h localhost -p 6379redis-cli ping 返回pong 證明正常 二、命令返回值 1、狀態回復,如ping命令

keepalived工作原理配置文件說明

其中 before red 進行 targe ip) lis 後端 取值 keepalived是什麽 keepalived是集群管理中保證集群高可用的一個服務軟件,其功能類似於heartbeat,用來防止單點故障。 keepalived工作原理 keepalived是以VR

淺析 SpringMVC 原理配置.

charset 多個 gb2312 替代 bubuko 控制 const ner tps 一、原理 Spring MVC基於模型-視圖-控制器(Model-View-Controller,MVC)模式實現,它能夠幫你構建像Spring框架那樣靈活和松耦合的We

Nginx原理配置總結

some serve delay 找到 部署 正則表達式 emp cnblogs process 一:前言   Nginx是一款優秀的HTTP服務器和反向代理服務器,除卻網上說的效率高之類的優點,個人的切身體會是Nginx配置確實簡單而且還好理解,和redis差不多,比r

Redis的安裝配置(一)

execute local bench redis-cli HR file 版本 dir mac 一. mac下redis的安裝 1. 官網http://redis.io/ 下載最新的穩定版本,這裏是3.2.0 2. sudo mv 到 /usr/local/ 3.

nginx 工作原理配置文件講解

打開 cli ssi http 狀態碼 stat pro clu libs red 1、nginx 介紹 Nginx (engine x) 是一個高性能的HTTP和反向代理服務,也是一個IMAP/POP3/SMTP服務。Nginx是由伊戈爾·賽索耶夫為俄羅斯訪問量第二的Ra

3、Redis的安裝配置

其實在暑假的時候是配置過Redis的,但是由於當時是跟著教學視訊操作的,所以有些步驟都忘記了,所以這次直接把整個安裝和配置的過程都記錄下來,方便以後再用到的時候檢視~ Redis其實是可以安裝在Linux和windows的,都是實際應用中肯定是在Linux環境下,所以就只記錄在Lin

kaldi中文語音識別thchs30模型訓練程式碼功能配置引數解讀

Monophone 單音素模型的訓練 # Flat start and monophone training, with delta-delta features. # This script applies ceps

Nginx反向代理配置詳解(正向代理、反向代理、負載均衡原理、Nginx反向代理原理配置講解)

nginx概述 nginx是一款自由的、開源的、高效能的HTTP伺服器和反向代理伺服器;同時也是一個IMAP、POP3、SMTP代理伺服器;nginx可以作為一個HTTP伺服器進行網站的釋出處理,另外nginx可以作為反向代理進行負載均衡的實現。 Nginx是一款開原始碼的高效能HT

關於車牌識別的工作原理技術引數

綜合網上上各種車牌識別方法,總結出一個較為簡單的車牌識別方案,採用VS2013+OpenCv2.4.9實現。並且附上可執行的原始碼以及測試圖片和視訊,詳細引數設定請參照原始碼。識別部分的訓練樣本見我上傳的資源。 實現方法 (一) 檢測車輛(基於混合高斯模型的背景差分法) 讀取視訊(avi格式),

Super VLAN技術原理配置

Super VLAN技術原理和配置 Super VLAN產生的背景:          在大型區域網組網中,常採用接入層和核心層二層結構的組網方式,所有的閘道器都設在核心層裝置上。由於每個VLAN都需要一個介面實現路由互通,這樣問題就來了,如

Redis複製原理

1、在從節點執行slaveof命令後,從節點只儲存主節點(master)的地址資訊便直接返回,此時複製流程還沒開始; 2、從節點(slave)內部通過每秒執行的定時任務維護複製相關邏輯,當定時任務發現新的主節點後,會嘗試與該節點建立網路連線,即主從建立socket連線; 3、傳送ping命令,主

全面剖析Redis Cluster原理應用

        Redis3以上版本叢集方式,使用Ruby解本命令完成叢集、主從配置。前段時間配置redis主從時在配置哨兵模式時卡死了,主要是用YUM安裝的redis導致sentinel.conf配置失敗。現在使用Redis Cluster可以完美解決問題了,並且支援Jed

nginx 反向代理原理配置解釋

一  概述                          反向代理(Reverse Proxy)方式是指以代理伺服器來接受Internet上的連線請求,然後將請求轉發給內部網路上的伺服器;並將從伺服器上得到的結果返回給Internet上請求連線的客戶端,此時代理伺服器對

Nginx詳解(正向代理、反向代理、負載均衡原理、ginx反向代理原理配置講解

nginx概述 nginx是一款自由的、開源的、高效能的HTTP伺服器和反向代理伺服器;同時也是一個IMAP、POP3、SMTP代理伺服器;nginx可以作為一個HTTP伺服器進行網站的釋出處理,另外nginx可以作為反向代理進行負載均衡的實現。 這裡主要通過三

redis叢集(Redis Cluster)原理應用

全面剖析Redis Cluster原理和應用 1.Redis Cluster總覽 1.1 設計原則和初衷 在官方文件Cluster Spec中,作者詳細介紹了Redis叢集為什麼要設計成現在的樣子。最核心的目標有三個: 效能:這