1. 程式人生 > >redis(11)——主從複製的原理

redis(11)——主從複製的原理

        在Redis中,使用者可以通過執行SLAVEOF命令或者設定slaveof選項,讓一個伺服器去複製(replicate)另一個伺服器,我們稱呼被複制的伺服器為主伺服器( master ),而對主伺服器進行復制的伺服器則被稱為從伺服器( slave )

        2.8版本之前與之後版本的主從複製的功能實現方法不同。主要掌握新版本的複製功能

一、新版複製功能的實現

        從伺服器對主伺服器的同步操作需要通過向主伺服器傳送PSYNC命令來完成,PSYNC命令具有完整重同步(full resynchronization)和部分重同步(partialresynchronization)兩種模式:

        完整重同步用於處理初次複製情況:通過讓主伺服器建立併發送RDB檔案,以及向從伺服器傳送儲存在緩衝區裡面的寫命令來進行同步。

部分重同步則用於處理斷線後重複製情況:當從伺服器在斷線後重新連線主伺服器時,如果條件允許,主伺服器可以將主從伺服器連線斷開期間執行的寫命令傳送給從伺服器,從伺服器只要接收並執行這些寫命令,就可以將資料庫更新至主伺服器當前所處的狀態。

二、部分重同步的實現

部分重同步功能由以下三個部分構成:

       主伺服器的複製偏移量(replication offset)和從伺服器的複製偏移量。

       主伺服器的複製積壓緩衝區(replication backlog )

       伺服器的執行ID ( run ID)。

1、複製偏移量

        執行復制的雙方——主伺服器和從伺服器會分別維護一個複製偏移量:主伺服器每次向從伺服器傳播N個位元組的資料時,就將自己的複製偏移量的值加上N。從伺服器每次收到主伺服器傳播來的N個位元組的資料時,就將自己的複製偏移量的值加上N。

        通過對比主從伺服器的複製偏移量,程式可以很容易地知道主從伺服器是否處於一致狀態

2、複製積壓緩衝區   

        複製積壓緩衝區是由主伺服器維護的一個固定長度(fixed-size)先進先出(FIFO)佇列,預設大小為1MB。

        當主伺服器進行命令傳播時,它不僅會將寫命令傳送給所有從伺服器,還會將寫命令入隊到複製積壓緩衝區裡面。

  

        當從伺服器重新連上主伺服器時,從伺服器會通過PSYNC命令將自己的複製偏移量offset傳送給主伺服器,主伺服器會根據這個複製偏移量來決定對從伺服器執行何種同步操作:

        如果offse七偏移量之後的資料(也即是偏移量offset+1開始的資料)仍然存在於複製積壓緩衝區裡面,那麼主伺服器將對從伺服器執行部分重同步操作)

        相反,如果offset偏移量之後的資料已經不存在於複製積壓緩衝區,那麼主伺服器將對從伺服器執行完整重同步操作。

3、伺服器執行ID

        每個Redis伺服器,不論主伺服器還是從服務,都會有自己的執行ID。

        執行ID在伺服器啟動時自動生成,由40個隨機的十六進位制字元組成。

        當從伺服器對主伺服器進行初次複製時,主伺服器會將自己的執行ID傳送給從伺服器,而從伺服器則會將這個執行ID儲存起來。

        當從伺服器斷線並重新連上一個主伺服器時,從伺服器將向當前連線的主伺服器傳送之前儲存的執行ID。

三、PSYNC命令的實現


四、複製的實現步驟

1:設定主伺服器的地址和埠步驟

        從伺服器首先要做的就是將客戶端給定的主伺服器IP地址以及埠儲存到伺服器狀態的masterhost屬性和masterport屬性裡面。

2:建立套接字連線步驟

        主伺服器在接受( accept)從伺服器的套接字連線之後,將為該套接字建立相應的客戶端狀態,並將從伺服器看作是一個連線到主伺服器的客戶端來對待,這時從伺服器將同時具有伺服器( server)和客戶端(client )兩個身份:從伺服器可以向主伺服器傳送命令請求,而主伺服器則會向從伺服器返回命令回覆。

3:傳送PING命令步驟

        通過傳送PING命令可以檢查套接字的讀寫狀態是否正常,檢查主伺服器能否正常處理命令請求。


4:身份驗證步驟

        在需要進行身份驗證的情況下,從伺服器將向主伺服器傳送一條AUTH命令,命令的引數為從伺服器masterauth選項的值。如果從伺服器沒有設定masterauth選項,那麼不進行身份驗證。


5:傳送埠資訊步驟

6:同步步驟

        如果PSYNC命令執行的是完整重同步操作,那麼主伺服器需要成為從伺服器的客戶端,才能將儲存在緩衝區裡面的寫命令傳送給從伺服器執行。

        如果PSYNC命令執行的是部分重同步操作,那麼主伺服器需要成為從伺服器的客戶端,才能向從伺服器傳送儲存在複製積壓緩衝區裡面的寫命令。

7:命令傳播

        當完成了同步之後,主從伺服器就會進人命令傳播階段,這時主伺服器只要一直將自己執行的寫命令傳送給從伺服器,而從伺服器只要一直接收並執行主伺服器發來的寫命令,就可以保證主從伺服器一直保持一致了。

四、心跳檢測

        在命令傳播階段,從伺服器預設會以每秒一次的頻率,向主伺服器傳送命令

1、檢測主從伺服器的網路連線狀態

2、輔助實現min-slaves配置選項

        Redis的min-slaves-to-write和min-slaves-max-lag兩個選項可以防止主伺服器在不安全的情況下執行寫命令。

3、檢測命令丟失

相關推薦

redis11——主從複製原理

        在Redis中,使用者可以通過執行SLAVEOF命令或者設定slaveof選項,讓一個伺服器去複製(replicate)另一個伺服器,我們稱呼被複制的伺服器為主伺服器( master ),而對主伺服器進行復制的伺服器則被稱為從伺服器( slave )    

redis10——主從複製的配置

redis主從複製的配置: clone伺服器之後修改slave的IP地址: 修改配置檔案:/usr/local/redis/etc/redis.conf 第一步:slaveof <masterip><mastport> 第二步:masterauth

Redis筆記-主從複製與哨兵機制

單機缺點及解決方案 單機問題:機器故障資料丟失、容量瓶頸。QPS瓶頸 需要叢集的原因: 併發量OPS的需求。要超過10w/s。 資料量“大資料”,機器只能存256G,但是需要存500G 3.叢集可以備份資料   Redis不能支撐高併發的瓶頸--

自學系列之 —— NoSQL、Redis、Memcache、尚矽谷主從複製

Redis 的主從複製,讀寫分離—— Master / Slave      1、是什麼   2、能做什麼    3、怎麼用   一主二僕

redis基礎簡介- 主從複製master & slave

簡介 redis主從複製配置和使用都非常的簡單。通過主從複製可以允許多個 slave 擁有和 master 相同的資料庫副本。 redis主從複製的特點: master可以擁有多個slave 多個 slave 除了可以連線同一個master之外,還可以連

Redis主從復制

缺少 等待 中斷問題 缺失 mage discard 準備 如何 partial 本文轉載自編程迷思,原文鏈接 深入學習Redis(3):主從復制 前言 在前面的兩篇文章中,分別介紹了Redis的內存模型和Redis的持久化。 在Redis的持久化中曾提到,Redi

redis11——redis的持久化機制

redis有兩種持久化機制。分別是RDB和AOF機制。 redis RDB的持久化機制 配置redis RDB的持久化機制 修改redis的配置檔案 vim /etc/redis/6379.conf 以下是預設的快照儲存配置: save 900 1 sav

Redis系列Redis持久化和主從複製原理

一、持久化   所謂的持久化就是把記憶體中的資料寫到磁碟中去,防止服務宕機後記憶體資料丟失。Redis4.0之前提供了兩種持久化方式:RDB(預設) 和AOF,Redis4.x之後新增了一種混合持久化(本文所用的Redis版本是redis‐5.0.2)   1、RDB   RDB是Redis Dat

Redis的叢集與主從複製Redis持久化

Redis持久化 1、Rdb方式 Redis預設的方式,redis通過快照來將資料持久化到磁碟中。 (1)設定持久化快照的條件:在redis.conf中修改持久化快照的條件,如下: 圖表示的意思:900秒內操作1次或者300秒內操作10次或者60

Redis高可用之主從複製實踐 Redis介紹及部署在CentOS7上

一、介紹 1、Redis的高可用有如下幾個部分組成: 第一部分:redis主從複製 第二部分:Sentinel哨兵模式 第三部分:叢集部署 本篇將介紹第一部分-redis 主從複製。那麼問題來了,為什麼需要主從複製呢?   2、為什麼需要主從複製呢? 從以下三點說明: A、re

Redis主從複製的設計與實現解析

  前面幾篇我們已經完全理解了redis的基本功能的實現了。   但單靠基本功能實現,往往還是稱不上優秀的專案的。畢竟,我們現在面對的都是複雜的環境,高併發的場景,大資料量的可能。   簡而言之,現在的系統一般都需要支援分散式部署,不存在單點問題,才算是一個合格的系統。   而redis作為一個儲存系統,單點

MySQL13---MYSQL主從複製原理

# MYSQL主從複製原理 最近在做專案的時候,因為部署了 **MYSQL主從複製** 所以在這裡記錄下整個過程。這裡一共會分兩篇部落格來寫: ``` 1、Mysql主從複製原理 2、docker部署Mysql主從複製實戰 ``` 這篇只寫MYSQL主從複製原理。 ## 一、概述 #### 1

redis--高級命令、主從復制、安全性、哨兵

哨兵 伸縮性 當前 打印 一個 local cli info 不存在 返回滿足的所有鍵keys *(可以模糊匹配 keys n*)   keys *、keys l* exists 是否存在指定的key 存在返回1 不存在返回0   exists name expire 設

轉載.NET中使用RedisRedis主從復制

讀寫 博文 img jpg cnblogs bar 本機 tac spa   Redis跟MySQL一樣,擁有非常強大的主從復制功能,而且還支持一個master可以擁有多個slave,而一個slave又可以擁有多個slave,從而形成強大的多級服務器集群架構。     

redis 實驗主從復制

系統/運維 Linux 先在主機啟動redis-server再開一個6380的端口redis-server --port 6380 --slaveof 127.0.0.1 6379單機雙實例輸入info看replication狀態主機master role另外一個實例主實例存取正常,從實例只能讀取無法

Redis詳解------ 主從復制

文件名 con IV conf 詳解 sla 恢復 之前 變化   前面介紹Redis,我們都在一臺服務器上進行操作的,也就是說讀和寫以及備份操作都是在一臺Redis服務器上進行的,那麽隨著項目訪問量的增加,對Redis服務器的操作也越加頻繁,雖然Redis讀寫速度都很快,

Redis主從複製原理,步驟

和Mysql主從複製的原因一樣,Redis雖然讀取寫入的速度都特別快,但是也會產生讀壓力特別大的情況。為了分擔讀壓力,Redis支援主從複製,Redis的主從結構可以採用一主多從或者級聯結構,Redis主從複製可以根據是否是全量分為全量同步和增量同步。下圖為級聯結構。  全量同步

redis主從複製原理

1. 前言         和MySQL主從複製的原因一樣,Redis雖然讀取寫入的速度都特別快,但是也會產生讀壓力特別大的情況。為了分擔讀壓力,Redis支援主從複製,Redis主從複製可以根據是否是全量分為全量同步和增量同步。 2. 舊版複製功能實現 redis複製功能分為同步和命令傳播兩種操作: (1)

Redis 主從複製 原理與用法

Redis 複製功能的幾個重要方面: 1. 一個Master可以有多個Slave; 2. Redis使用非同步複製。從2.8開始,Slave會週期性(每秒一次)發起一個Ack確認複製流(replication stream)被處理進度; 3. 不僅主伺服器可以有從伺服器,

Redis 主從複製原理

為什麼要主從複製:     如果使用redis 的時候只使用一個數據庫服務,那是不存在什麼主從複製的。當redis 服務在兩個以上時才會有主從複製。為了讀寫分離和減輕壓力,在實際生產中一般會用到多個redis 服務。多個服務那就存在資料同步的問題,主從複製就是解決redis