Redis(四)Redis的高可用方案【主從】
阿新 • • 發佈:2021-08-03
一、主從架構
架構圖
構建步驟
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:這裡被同步的從節點要持續與主節點進行同步。