redis主從同步原理及優化

主從複製簡介:redis

互聯網"三高"架構數據庫

  • 高併發服務器

  • 高性能網絡

  • 高可用

高可用目標:業界可用性目標5個九,即99.999%,即服務器年宕機時長低於315秒,約5.25分鐘架構

單機Redis的風險與問題併發

問題1.機器故障負載均衡

  • 現像: 硬盤故障、系統崩潰運維

  • 本質:數據丟失,極可能對業務形成災難性打擊ide

  • 結論: 基本上會放棄使用redis

問題2.容量瓶頸高併發

  • 現像:內存不足,從16G升到64G,從64G升級到128G,無限升級內存

  • 本質:窮,硬件跟不上

  • 結論:放棄使用redis

結論:

爲了不單點Redis服務器故障,準備多臺服務器,互相連通,將數據複製多個副本保存不一樣的服務器上,鏈接在一塊兒,並保存數據是同步的 ,即便有其中一臺服務器宕機,其餘服務器依然能夠繼續提供服務,實現Redis的高可用,同時實現數據冗餘備份

架構:

redis主從同步原理及優化

主從複製:主從複製將master中的數據即時、有效的複製到slave中,特徵:一個master能夠擁有多個salve,g,一個slave只對應一個master。

職責:

master:

         - 寫數據,執行寫操做時

         - 將出現變化的數據自動同步到salve

         - 讀數據(可忽略)

 slave:

         - 讀數據

         - 寫數據(可忽略)

主從複製的做用:

  • 讀寫分離:master寫,salve讀,提升服務器的讀寫負載能力

  • 負載均衡:基於主從架構,配合讀寫分離,由slave分擔master負載,並根據需求的變化,改變slave的數量,經過多我的節點分擔數據讀取負載,大大提升redis服務器併發量與數據吞吐量
  • 故障恢復:當master出現問題時,由slave提供服務,實現快速的故障恢復

  • 數據冗餘:實現數據熱備份,是持久以外的一種數據冗餘方式

  • 高可用基石:基於主從複製,構建哨兵模式與集羣,實現Redis的高可用方案

主從複製工做流程:

大致分爲三個階段:

- 創建鏈接階段(即準備階段)

 - 數據同步階段

 - 命令傳播階段

架構如圖:

redis主從同步原理及優化

階段一:創建鏈接階段

創建slave到master的鏈接,使master可以識別slave,並保存slave端口號

創建鏈接階段工做流程
redis主從同步原理及優化

步驟1:從服務器設置master的地址和端口,保存master信息

步驟2:創建socker鏈接

步驟3:發送ping 命令(定時器任務)

步驟4:身份驗證

步驟5:發送slave端口信息

至此,主從鏈接成功

主從鏈接(slave鏈接master)

方式一:客戶端發送命訟

slaveof <masterip> <masterport>

方式二:啓動服務器參數

redis-server -slaveof <masterip> <masterport>

方式三:服務器配置

slaveof <masterip> <masterport>

slave系統信息

info

  • maste_link_down_since_seconds

  • masterhost

  • masterport

master系統信息

info

  • slave_listening_port(多個)

受權訪問

master配置文件設置密碼

requirepass <password>

master客戶端發送命令設置密碼

config set requirepass <password>

config get requirepass

slave客戶端發送命令設置密碼

auth <password>

salve配置文件設置密碼

masterauth <password>

啓動客戶端設置密碼

redis-cli -a <password>

啓動客戶端不設置密碼,進到密令行須要密碼,反之同樣

階段二: 數據同步階段工做流程
在salve初次鏈接master後,複製Master中全部數據到slave
將slave的數據庫狀態更新成master當前的數據爲狀態

架構如圖:
redis主從同步原理及優化

步驟1:請求同步數驟
步驟2:建立RDB同步數據
步驟3:恢復RDB同步數據
步驟4:請問部分同步數據
步驟5:恢復部分同步數據
步驟6:數據同步工做完成

狀態
slave: 具備master端所有數據,包含RDB過程接收的數據
master: 保存slave當前數據同步的位置
整體: 之間完成了數據克隆

數據同步階段master說明
一、若是master數據量巨大,數據同步階段應避開流量高峯期,避免形成master阻塞,影響業務正常運行
二、複製緩衝區大小設定不合理,會致使數據溢出,如進行全量複製週期太長,進行部分複製時發現數據已經存在丟失的狀況,必須進行第二次全量複製,導致slave陷入死循環狀態
repl-baklog-size 1mb
三、master單機內存佔用主機內存的比例不該過大,建議使用50-70%的內存,留下30%-50%的內存用於執行bgsave命令和建立複製緩衝區

redis主從同步原理及優化

數據同步階段slave說明
一、爲避免slave進行全量複製、部分複製時服務器響應阻塞或數據不一樣步,建議關閉此期間的對外服務
slave-serve-stale-data yes|no
二、數據同步階段,master發送給slave信息能夠理解master是slave的一個客戶端,主動向slave發送命令
三、多個slave同時對Master請求數據同步,master發送的RDB文件增多,會對寬帶形成巨大沖擊,若是master寬帶不足,所以數據同步須要根據業務需求,適量錯峯
四、salve過多時,建議調整拓撲結構,由一主多從結構變爲樹狀結構,中間的節點既是master,也是slave,注意使用樹狀結構時,因爲層級深度,致使深度越高的slave與最頂層master間數據同步延遲較大,數據一致性變差,應謹慎選擇,

階段三:命令傳播階段
當master數據庫狀態被修改後,致使主從服務器數據庫狀態不一致,此時須要讓主從數據同步到一致的狀態,同步的動做稱爲命令傳播
Master將接收到的數據變動命令發送給slave,slave接收命令後執行命令

命令傳播階段的部分複製
命令傳播階段出現了斷網現象
網絡閃斷閃連 忽略
短期網絡中斷 部分複製
長時間網絡中斷 全量複製

部分複製的三個核心要素
服務器的運維id(run id)
主服務器的複製積壓緩衝區
主從服務器的複製偏移量

服務器運行ID(runid)
概念:服務器運行ID是每一臺服務器每次運行身份證識別碼,一臺服務器屢次運行能夠生成多個運行id

組成:運行id由四十位字符組成,是一個隨機的十六進制字符

做用:運行id被用於在服務器進行傳輸,識別身份
若是想兩次操做均對同一臺服務器進行,必須每次操做攜帶對應的運行id,用於對方識別

實現方式: 運行id在每臺服務器啓動時自動生成的,master在首次鏈接slave時,會將自已的運行id發送給slave,slave保存此ID,經過info server命令,能夠查看節點的runid

複製緩衝區
概念: 複製緩衝區,又名複製積壓緩衝區,是一個先進先出(FIFO)的隊列,用於存儲服務器執行的命令,每次傳播命令,master都會將傳播的命令記錄下來,並存付在複製緩衝區

redis主從同步原理及優化
redis主從同步原理及優化
redis主從同步原理及優化
redis主從同步原理及優化
redis主從同步原理及優化
redis主從同步原理及優化
redis主從同步原理及優化
redis主從同步原理及優化
redis主從同步原理及優化
redis主從同步原理及優化
redis主從同步原理及優化

相關文章
相關標籤/搜索