目錄
一、什么是主從復制
二、為什么要用主從復制
三、redis主從復制實作
1、啟動命令
2、組態檔新增
3、Tips:
四、主從復制原理
1、主要流程
2、全量同步
3、增量同步
4、Redis主從同步策略
五、主從復制幾種架構形式
1、一主一從
2、一主多從
3、樹狀主從
一、什么是主從復制
主從復制就是我們建立資料存檔的時候,將一份資料進行復制保存多分存盤在不同的機器上,
二、為什么要用主從復制
在redis持久化機制一文中,我們已經提到為了防止資料丟失,redis提供了RDB和AOF兩種方式持久化資料,將記憶體的資料持久化到磁盤上,但是當出現服務器出現故障,比如服務磁盤壞掉導致資料不可恢復時,那又該怎么辦呢?
那么為了避免單點故障,我們需要將資料復制多份部署在多臺不同的服務器上,即使有一臺服務器出現故障其他服務器依然可以繼續提供服務,這就要求當一臺服務器上的資料更新后,自動將更新的資料同步到其他服務器上,這就是主從復制,

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

,總結來講使用主從復制有以下原因
- 資料備份,容災恢復
- 業務資料讀寫分離
三、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 都在表態,

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配置

5.0以上

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

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

3、Tips:
- 配置主從為了安全性可以修改組態檔的masterauth屬性來增加同步密碼
- 從節點建議用只讀模式slave-read-only=yes, 若從節點修改資料,主從資料不一致.
- 傳輸延遲:主從一般部署在不同機器上,復制時存在網路延時問題,redis 提供repl-disable-tcp-nodelay 引數決定是否關閉TCP_NODELAY,默認為關閉.引數關閉時:無論大小都會及時發布到從節點,占帶寬,適用于主從網路好的場景.引數啟用時:主節點合并所有資料成TCP 包節省帶寬,默認為40 毫秒發一次,取決于內核,主從的同步延遲40 毫秒,適用于網路環境復雜或帶寬緊張,如跨機房
四、主從復制原理
1、主要流程
redis主從主要流程如下:

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 策略是,無論如何,首先會嘗試進行增量同步,如不成功,要求從機進行全量同步,

五、主從復制幾種架構形式
1、一主一從
用于主節點故障轉移從節點,當主節點的“寫”命令并發高且需要持久化,可以只在從節點開啟AOF(主節點不需要),增加主節點性能,主節點例外時可以通過從節點備份進行恢復,

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

3、樹狀主從
一主多從的缺點(主節點推送次數多壓力大)可用些方案解決,主節點只推送一次資料到從節點1,再由從節點2推送到11,減輕主節點推送的壓力

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/184677.html
標籤:其他
下一篇:建立網站的步驟
