1. 程式人生 > 其它 >Redis(四)Redis的高可用方案【主從】

Redis(四)Redis的高可用方案【主從】

一、主從架構

架構圖

構建步驟

1、建立一個新的目錄,模擬用【從根目錄開始演示】
cd zhTools/redis-5.0.3
mkdir zhRedisDemo #建立目錄
cd zhRedisDemo
mkdir slave #建立主從模式的目錄
cd slave
mkdir 6380 #用於存放6380埠的資料【主】
mkdir 6381 #用於存放6381埠的資料【從】

2、把redis的配置檔案複製2份分別放到對應的目錄下【從根目錄開始演示】
cd zhTools/redis-5.0.3
cp redis.conf zhRedisDemo/slave/6380
cp redis.conf zhRedisDemo/slave/6381
3、進入6380目錄,並修改redis.conf【主】 port 6380 #埠 pidfile /var/run/redis_6380.pid #把pid程序號寫入pidfile配置的檔案 logfile "6380.log" #日誌檔案存放在當前目錄 bind 0.0.0.0 #開放訪問 dir /root/zhTools/redis-5.0.3/zhRedisDemo/slave/6380/data # 指定資料存放目錄 4、進入6381目錄,並修改redis.conf【從】 port 6381 #埠 pidfile /var/run/redis_6381.pid #把pid程序號寫入pidfile配置的檔案 logfile
"6381.log" #日誌檔案存放在當前目錄 bind 0.0.0.0 #開放訪問 dir /root/zhTools/redis-5.0.3/zhRedisDemo/slave/6381/data # 指定資料存放目錄 replicaof 120.24.58.161 6380 # 從本機6380的redis例項複製資料,Redis 5.0之前使用slaveof replica‐read‐only yes #配置從節點只讀 masterauth xxxxxxxxx #配置主節點密碼【若主節點設定了密碼則需要這個配置項】 5、分別使用剛才6380、6381的配置檔案啟動主節點、從節點 6、連結客戶端開始測試

二、Redis主從工作原理

  主從同步流程:

  • 1、當我們為master配置了一個slave,管這個slave是否是第一次連線上Master,它都會發送一個PSYNC命令給master請求複製資料
  • 2、master收到PSYNC命令後,會在後臺進行資料持久化通過bgsave生成最新的rdb快照檔案
  • 3、持久化期間,master會繼續接收客戶端的請求,它會把這些可能修改資料集的請求快取在記憶體中
  • 4、當持久化進行完畢以後,master會把這份rdb檔案資料集傳送給slave,slave會把接收到的資料進行持久化生成rdb,然後再載入到記憶體中
  • 5、master再將之前快取在記憶體中的命令傳送給slave

  PS:當master與slave之間的連線由於某些原因而斷開時,slave能夠自動重連Master,如果master收到了多個slave併發連線請求,它只會進行一次持久化,而不是一個連線一次,然後再把這一份持久化的資料傳送給多個併發連線的slave

  PS:SYNC使用的是全量複製PSYNC使用的是增量複製

  PS:主從結構一般會設定成:主節點負責寫入從節點負責備份和讀取

全量同步

  PS:主從同步與開不開啟持久化無關,是redis服務端做的事情。至於為什麼用rdb檔案來同步也是因為rdb是二進位制形式的資料,同步起來比aof更快。

增量同步、斷點續傳

三、Redis主從複製風暴的解決方案

  剛聽到這個名詞覺得相當高大上,這裡解釋一下:

  主從複製風暴:多個從節點同時複製主節點導致主節點壓力過大

  解決方案:讓部分從節點向另一些從節點同步資料PS:這裡被同步的從節點要持續與主節點進行同步。