當前位置:網站首頁>你不知道的-主從複制,因為該命令redis作者曾攤上事?

你不知道的-主從複制,因為該命令redis作者曾攤上事?

2022-01-27 10:53:27 程序員社區

你不知道的-主從複制,因為該命令redis作者曾攤上事? , 你了解嗎? 本文就為大家帶來了一篇 你不知道的-主從複制,因為該命令redis作者曾攤上事? 一起看看吧!
另外小編還收集了很多不錯的編程資源,希望對你有幫助:點擊查看
祝您生活愉快~

一、什麼是主從複制

主從複制就是我們建立數據存檔的時候,將一份數據進行複制保存多分存儲在不同的機器上。

二、為什麼要用主從複制

在redis持久化機制中,我們已經提到為了防止數據丟失,redis提供了RDB和AOF兩種方式持久化數據,將內存的數據持久化到磁盤上。但是當出現服務器出現故障,比如服務磁盤壞掉導致數據不可恢複時。那又該怎麼辦呢?

那麼為了避免單點故障,我們需要將數據複制多份部署在多臺不同的服務器上,即使有一臺服務器出現故障其他服務器依然可以繼續提供服務。這就要求當一臺服務器上的數據更新後,自動將更新的數據同步到其他服務器上,這就是主從複制。

你不知道的-主從複制,因為該命令redis作者曾攤上事?插圖
image.png

當我們主節點壓力比較大時,那麼我們可以通過讀寫分離的方式,對複制的節點數據進行讀操作,以增加我們的服務性能

你不知道的-主從複制,因為該命令redis作者曾攤上事?插圖1
image

總結來講使用主從複制有以下原因

  1. 數據備份,容灾恢複

  2. 業務數據讀寫分離

三、redis主從複制實現

redis實現主從很簡單,只需要增加啟動脚本或者配置文件中配置slaveof命令即可

1、啟動命令

啟動redis服務時,後面新增 redis-server --slaveof ip(主redisip) port。

該配置到5.0版本以上改為了 replicaof <masterip> <masterport>,Redis 作者在 GitHub 上發起了一個“用其他詞匯代替 Redis 的主從複制術語”的 issue因為有人認為 Redis 中的術語 master/slave (主人 / 奴隸)冒犯到了別人(果然歪果仁們對這還是敏感啊,哈哈),要求 Redis 作者 ANTIREZ 修改這個術語,甚至連 ruby on rails 的作者 DHH 都在錶態。

你不知道的-主從複制,因為該命令redis作者曾攤上事?插圖2
image.png

2、配置文件新增

環境兩臺機器:148.70.47.76(主),111.229.169.46(從)

1、148.70.47.76直接啟動redis

2、修改111.229.169.46redis配置,新增slaveof 148.70.47.76 6379 配置或者使用replicaof配置

你不知道的-主從複制,因為該命令redis作者曾攤上事?插圖3
image.png

5.0以上

你不知道的-主從複制,因為該命令redis作者曾攤上事?插圖4
image.png

3、啟動111.229.169.46 的redis

4、查看148.70.47.76 redis狀態,發現role 為master主節點,有一個從節點,從節點ip為111.229.169.46(該信息很重要,哨兵機制會用到)

你不知道的-主從複制,因為該命令redis作者曾攤上事?插圖5
image

查看111.229.169.46 redis狀態,發現role 為slave從節點,有一個主節點,主節點ip為148.70.47.76.

你不知道的-主從複制,因為該命令redis作者曾攤上事?插圖6
image

3、Tips:

  • 配置主從為了安全性可以修改配置文件的masterauth屬性來增加同步密碼

  • 從節點建議用只讀模式slave-read-only=yes, 若從節點修改數據,主從數據不一致.

  • 傳輸延遲:主從一般部署在不同機器上,複制時存在網絡延時問題,redis 提供repl-disable-tcp-nodelay 參數决定是否關閉TCP_NODELAY,默認為關閉.參數關閉時:無論大小都會及時發布到從節點,占帶寬,適用於主從網絡好的場景.參數啟用時:主節點合並所有數據成TCP 包節省帶寬,默認為40 毫秒發一次,取决於內核,主從的同步延遲40 毫秒,適用於網絡環境複雜或帶寬緊張,如跨機房

四、主從複制原理

1、主要流程

redis主從主要流程如下:

[圖片上傳失敗...(image-fedd62-1603359761687)]

redis的數據同步主要分為全量同步和增量同步

2、全量同步

Redis全量複制一般發生在Slave初始化階段,這時Slave需要將Master上的所有數據都複制一份。 master服務器會開啟一個後臺進程用於將redis中的數據生成一個rdb文件,與此同時,服務器會緩存所有接收到的來自客戶端的寫命令(包含增、删、改),當後臺保存進程處理完畢後,會將該rdb文件傳遞給slave服務器,而slave服務器會將rdb文件保存在磁盤並通過讀取該文件將數據加載到內存,在此之後master服務器會將在此期間緩存的命令通過redis傳輸協議發送給slave服務器,然後slave服務器將這些命令依次作用於自己本地的數據集上最終達到數據的一致性。

具體步驟如下: - 從服務器連接主服務器,發送SYNC命令; - 主服務器接收到SYNC命名後,開始執行BGSAVE命令生成RDB文件並使用緩沖區記錄此後執行的所有寫命令; - 主服務器BGSAVE執行完後,向所有從服務器發送快照文件,並在發送期間繼續記錄被執行的寫命令; - 從服務器收到快照文件後丟弃所有舊數據,載入收到的快照; - 主服務器快照發送完畢後開始向從服務器發送緩沖區中的寫命令; - 從服務器完成對快照的載入,開始接收命令請求,並執行來自主服務器緩沖區的寫命令;

3、增量同步

Redis增量複制是指Slave初始化後開始正常工作時主服務器發生的寫操作同步到從服務器的過程。 增量複制的過程主要是主服務器每執行一個寫命令就會向從服務器發送相同的寫命令,從服務器接收並執行收到的寫命令。

4、Redis主從同步策略

主從剛剛連接的時候,進行全量同步;全同步結束後,進行增量同步。當然,如果有需要,slave 在任何時候都可以發起全量同步。redis 策略是,無論如何,首先會嘗試進行增量同步,如不成功,要求從機進行全量同步。

你不知道的-主從複制,因為該命令redis作者曾攤上事?插圖7
image

五、主從複制幾種架構形式

1、一主一從

用於主節點故障轉移從節點,當主節點的“寫”命令並發高且需要持久化,可以只在從節點開啟AOF(主節點不需要),增加主節點性能,主節點异常時可以通過從節點備份進行恢複。

你不知道的-主從複制,因為該命令redis作者曾攤上事?插圖8
image

2、一主多從

針對“讀”較多的場景,“讀”由多個從節點來分擔,但節點越多,主節點同步到多節點的次數也越多,影響帶寬,也加重主節點的穩定

你不知道的-主從複制,因為該命令redis作者曾攤上事?插圖9
image
你不知道的-主從複制,因為該命令redis作者曾攤上事?插圖10
image

3、樹狀主從

一主多從的缺點(主節點推送次數多壓力大)可用些方案解决,主節點只推送一次數據到從節點1,再由從節點2推送到11,减輕主節點推送的壓力

你不知道的-主從複制,因為該命令redis作者曾攤上事?插圖11
image

作者: Dark_King_
原文鏈接:https://blog.csdn.net/b379685397/article/details/109147469

版權聲明
本文為[程序員社區]所創,轉載請帶上原文鏈接,感謝
https://cht.chowdera.com/2022/01/202201271053272662.html

隨機推薦