redis學習(七)redis主從複製

来源:https://www.cnblogs.com/xiaoxiongcanguan/archive/2018/11/15/9964085.html
-Advertisement-
Play Games

redis主從複製 1.redis主從複製的作用 redis的定位是一個高可用的數據伺服器,可是在實際生產環境下,單機的redis伺服器是無法滿足真正意義上的高可用性的。 第一,單機的redis伺服器很容易發生單點故障,即使redis提供了各種持久化的方法來避免數據的丟失,但是物理上的故障(硬碟損毀 ...


redis主從複製

1.redis主從複製的作用

  redis的定位是一個高可用的數據伺服器,可是在實際生產環境下,單機的redis伺服器是無法滿足真正意義上的高可用性的。

  第一,單機的redis伺服器很容易發生單點故障,即使redis提供了各種持久化的方法來避免數據的丟失,但是物理上的故障(硬碟損毀等)還是無法完全避免的。

  第二,如果對單台機器的性能進行縱向拓展,無論是CPU,記憶體還是磁碟容量都很容易達到瓶頸,無法滿足實際需求。

  針對這些問題,redis提供了複製(replication)的功能,通過"主從(一主多從)"和"集群(多主多從)"的方式對redis的服務進行水平擴展,用多台redis伺服器共同構建一個高可用的redis服務系統。

  在這裡,我們主要介紹redis的主從複製功能。

2.redis主從複製介紹  

  在redis的複製概念模型中,分為"主(master)""從(slave)"兩種角色類型的伺服器,從伺服器"服從"主伺服器。主伺服器既可以讀也可以寫,而從伺服器原則上只允許讀操作(通過修改配置,從伺服器也可以執行寫入操作),同時負責接收和同步主伺服器上的數據。主伺服器和從伺服器是一對多的關係,從伺服器也可以擁有從伺服器,以此類推。  

  可以看到主從結構下的redis伺服器集群節點的拓撲結構是一棵樹。

             

  使用了主從結構的redis系統,一般是讀寫分離的:"主庫負責寫入,在寫入的同時和從庫進行數據的同步;而從庫負責讀取操作。"

  一主多從的結構下,不會出現單點故障,同時可用性也得到了保障。由於負責讀取的從庫相對較多,因此很適合讀多寫少(例如:電商)的場景。

  使用redis的主從複製功能比較簡單,只需要在從伺服器啟動的配置文件中添加slaveof "IP" "PORT"配置即可,同時redis也允許其它的方式來實現這一目的(啟動時命令行參數、redis命令等)。可以通過info replication來查看當前redis伺服器在主從複製中的狀態。

    6381埠 從庫狀態

    6379埠 主庫狀態

3.redis主從複製原理  

  1.從伺服器初始化

  當從伺服器啟動時,會向主伺服器發送SYNC命令,請求同步數據。主伺服器接收到消息之後,進行RDB持久化,並生成一個快照文件;與此同時,主伺服器會將生成快照期間新執行的命令緩存起來。在快照文件生成完畢之後,主伺服器將RDB快照文件和緩存下來的命令一併發送給從伺服器,從伺服器首先載入接收到的RDB快照文件,接著執行被緩存下來的新命令,完成主從數據的初始化同步操作。

  2.從伺服器保持同步

  從伺服器在同步完成之後,主伺服器接收到的所有命令都會非同步的發送給從伺服器用來保持主從數據的一致性。

  3.從伺服器故障後處理

  當從伺服器崩潰之後,重啟之後進行初始化,會自動的同步主伺服器的數據。在redis的2.8版本之後,redis採用了"增量複製"的方式優化了從伺服器的初始化同步數據的過程。

  4.主伺服器故障後處理

  當主伺服器崩潰之後,首先需要手動的選擇一個從伺服器升級為主伺服器(需要手動調整所有相關的從伺服器),然後啟動之前已經崩潰的主伺服器作為從伺服器回到系統中。

  可以看到,redis在主伺服器崩潰之後需要繁瑣的人工干預來恢復服務,特別是在主資料庫禁止了持久化之後,上述步驟不能錯亂,否則會導致主資料庫重啟後恢復了錯誤數據,進而導致從資料庫也同步錯誤數據這一災難性後果。為此,redis提供了哨兵機制,用於自動化的監控和維持分散式redis系統的良好運轉。

4.redis哨兵

  1.哨兵的介紹  

  redis的設計者為了讓redis能夠在主從模式下實現故障恢復的自動化,為此提供了redis的哨兵功能。哨兵是一個獨立於數據伺服器的進程,用於監控redis數據伺服器的狀態,當主從模式下最關鍵的主伺服器出現故障時,能夠被哨兵自動的察覺。同時哨兵會在剩餘的從伺服器中"選舉"出新的主伺服器,達到自動化恢復系統服務的目的。

   2.哨兵的使用

  redis提供了redis-sentinel腳本用於部署哨兵,啟動時通過指定的哨兵配置文件來對哨兵的行為進行靈活的控制。哨兵的配置文件中至少需要包含被哨兵監控的主伺服器IP、埠、投票決定數目,當然也可以配置諸如down-after-milliseconds(發送ping命令的時間間隔,用於監聽)等選項。

  sentinel monitor "master_name" "IP" "PORT" 

  down-after-milliseconds "milliseconds" ("milliseconds"大於1000時,預設為1000)

  3.哨兵的工作方式

  哨兵啟動時會與主伺服器建立連接,並且間接的獲得所屬從伺服器信息,完成哨兵的初始化。哨兵初始化完成之後,會周期性的和主從伺服器、其它哨兵節點(通過消息頻道的訂閱/發佈)進行通信。

  哨兵每10秒會向所有伺服器發送一次INFO命令,獲得相關redis伺服器的當前狀態以便決定是否需要故障恢復。

  當一個哨兵在down-after-milliseconds規定時間內未收到主伺服器的響應,則當前哨兵"主觀"認為主伺服器下線,同時和監視當前系統的其它哨兵進行投票決定,當超過當前哨兵配置中投票決定的數目時,則當前哨兵"客觀"認為主伺服器下線,哨兵集群會選舉出領導哨兵來進行主從伺服器集群主從狀態的切換(使用Raft演算法)。

5.redis主從複製總結

  1.樂觀複製策略

  redis的主從複製採用的是樂觀複製的策略,在一定的時間內允許主從伺服器的數據不完全一致,但是保持主從資料庫數據的最終一致性(按照CAP定理,放棄了C(強一致性))。

  這意味著redis主從伺服器之間的數據複製操作時非同步的,主伺服器不等待從伺服器返回覆制的結果,可以立即處理新的寫入命令。這一策略使得主伺服器的性能在複製時不會受到太大影響,但是從伺服器會出現短時間內數據不一致的情況。redis允許用戶配置主庫的min-slaves-to-write(代表至少N台從伺服器完成複製,才允許主伺服器寫入)和min-slaves-max-lag(允許從伺服器斷開連接的時間)這兩個配置項來控制分區中數據不一致的影響。

  2.和集群的區別

  redis的主從複製特性為redis帶來了很高的讀取可用性,但是對於海量數據的持久化存儲是力不從心的。因為主從複製結構下,任意的節點都保存了100%的存儲數據,所以能夠存儲的數據規模還是受限於單例伺服器存儲容量的大小。

  為此,在單主多從結構的基礎上,redis還提供了集群特性。通過將存儲數據合理的分片存儲在不同的redis節點上,通過集群水平擴容之後的redis集群擁有了極高的讀寫可用性和分區容錯性。為了理解更強大、複雜的集群特性其基礎之一就是redis的主從複製原理。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Linux read 命令 參數說明: -a 後跟一個變數,該變數會被認為是個數組,然後給其賦值,預設是以空格為分割符。 -d 後面跟一個標誌符,其實只有其後的第一個字元有用,作為結束的標誌。 -p 後面跟提示信息(prompt),即在輸入前列印提示信息。 -e 在輸入的時候可以時候命令補全功能。 ...
  • samba 服務 簡介 1987年,微軟公司和英特爾公司共同制定了SMB(Server Messages Block,伺服器消息塊)協議,旨在解決區域網內的文件或印表機等資源的共用問題,這也使得在多個主機之間共用文件變得越來越簡單。到了1991年,當時還在讀大學的Tridgwell為瞭解決Linux ...
  • 一、命令介紹 find 命令用於按照指定條件來查找文件。 一些比較常用參數如下表 參數 作用 -name 匹配名稱 -perm 匹配許可權mode為完全匹配( –mode包含即可) -user 匹配所有者 -group 匹配所有組 -mtime –n +n 匹配修改內容時間(-n n天以內 +n n天 ...
  • zabbix設置微信報警的配置過程 zabbix設置微信報警的配置過程 zabbix設置微信報警的配置過程 zabbix設置微信報警的配置過程 zabbix的報警方式有很多,在這裡我們來詳細說明一下如何通過微信報警 微信企業號的申請 註冊的地址https://qy.weixin.qq.com/ 這樣 ...
  • /etc 一、修改配置文檔(需要重啟網路配置,永遠生效) 1、修改IP地址[MariaDB@db1]$ vi /etc/sysconfig/network-scripts/ifcfg-eth0DEVICE=eth0ONBOOT=yesBOOTPROTO=staticIPADDR=192.168.30 ...
  • nginx不僅可以隱藏版本信息,還支持自定義web伺服器信息 先看看最終的隱藏結果吧 具體怎麼實現呢,其實也很簡單,請往下看 1 官網下載最新穩定版 2 解壓 3 修改C文件 (1)vim src/http/ngx_http_header_filter_module.c #修改49行 static ...
  • linux修改時間 伺服器時間與網路時間不符: 一、手動修改 1. date命令:查看當前時間 2. date -s 時分秒 :修改時間 還需要把日期改過來 3. date -s 完整日期時間(YYYY-MM-DD hh:mm[:ss]):修改日期、時間 時間要用雙引號括起來,否則報錯 手動修改會存 ...
  • 資料庫編碼 查看資料庫編碼 切換資料庫編碼 修改自增ID 創建表格時設置自增ID從N開始: 讓自增ID從預設值開始, 但是註意:這個命令會清空數據包記錄! 設置user表自增ID從123456開始 無法遠程登錄 在已經修改配置文件中的地址為 但仍然無法遠程登錄的情況下, 一般是需要對資料庫中的賬戶信 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...