一、什麼是主從複制?
主從複制,是指将一台Redis伺服器的資料 ,複制到其他的Redis伺服器I前者稱為主節點(master/leader),
後者稱為從節點(slave/follower)資料的複制是單向的,隻能由主節點到從節點,Master以寫為主, Slave
以讀為主。
❇️主從複制的作用
- 讀寫分離:主節點寫,從節點讀,提高伺服器的讀寫負載能力
- 資料備援:主從複制實作了資料的熱備份,是持久化之外的一種資料備援方式。
- 故障恢複:當主節點出現問題時,可以由從節點提供服務,實作快速的故障恢複;實際上是一種服務的
備援。
- 負載均衡:在主從複制的基礎上,配合讀寫分離,可以由主節點提供寫服務,由從節點提供讀服務(即寫
Redis資料時應用連接配接主節點,讀Redis資料時應用連接配接從節點) , 分擔伺服器負載;尤其是在寫少讀多
的場景下,通過多個從節點分擔讀負載,可以大大提高Redis伺服器的并發量。
- 高可用基石:除了上述作用以外,主從複制還是哨兵和叢集能夠實施的基礎,是以說主從複制是Redis
高可用的基礎。主從複制可以提高程式的性能,增加系統的可用性!
✅主從複制流程圖
注意:
主節點可寫可讀,從節點隻能讀取資料!
主節點挂掉後,從節點可以通過指令行的方式
謀權篡位
直接稱王,進而當上主節點!
二、為什麼要搭建叢集?
在真實項目開發中,僅僅使用一台單機Redis是萬萬不行的,資料量會很大,是以說以搭建叢集的方式來緩解伺服器的壓力,進而實作系統的高可用性,提高并發能力!
從結構上,單個Redis伺服器會發生單點故障,并且一台伺服器需要處理所有的請求負載,壓力較大;
從容量上,單個Redis伺服器記憶體容量有限,就算一台Redis伺服器記憶體容量為256G ,也不能将所有記憶體用作Redis存儲記憶體, 一般來說 ,單台Redis最大使用記憶體不應該超過20G。電商網站上的商品,一般都是一次上傳,無數次浏覽的,說專業點也就是"多讀少寫"
均勻配置設定伺服器的讀寫壓力,進而提高系統的并發能力,提高可用性!
三、搭建主從複制叢集
⏰環境準備
進入redis 配置檔案目錄
cd /usr/local/redis/redis-5.0.7/bin/conf
複制3份配置檔案,并修改檔案内容
cp redis.conf redis79.conf
cp redis.conf redis80.conf
cp redis.conf redis81.conf
檢視配置檔案
ll
修改配置檔案資訊
- 修改 端口号
- 修改 pid
- 修改log檔案
- 修改dump檔案
連接配接叢集
新開3個連結啟動叢集,回到bin目錄
cd ..
./redis-server /config/redis79.conf
./redis-cli -p 6379 # 啟動用戶端并監聽6379端口
# 新開連接配接
cd /usr/local/redis/redis-5.0.7/bin
./redis-server /config/redis80.conf
./redis-cli -p 6380 # 啟動用戶端并監聽6379端口
# 新開連接配接
cd /usr/local/redis/redis-5.0.7/bin
./redis-server /config/redis81.conf
./redis-cli -p 6381 # 啟動用戶端并監聽6379端口
在監聽端口的用戶端輸入指令檢視資訊
info replication # 檢視資訊,為主機或從機
預設都是主機,我們修改 其它兩個機為 從機
修改端口為6380為從機,并連接配接主機6379
修改端口為6381為從機,并連接配接主機6379
回到主機6379檢視資訊
♻️測試叢集
測試主從複制叢集
在6379主機存入一個key-value,其它從機都可以讀到響應的key
從機讀取key
如果從機要設定key,那麼是不可以設定的,
從機隻能讀取主機的key
假設主機6379當機了,那麼其它從機依然連接配接着主機6379,直至等到主機恢複這樣可不行,如果一直不恢複,會影響系統的可用性!,
為解決此問題,我們可以手動設定一個從機為主機,也可以通過哨兵模式自動選舉主機
首先需要将6381從機連接配接上6380主機,這樣形成連結清單得方式,以防一個主機挂掉,還可以快速恢複另一個從機為主機,進而保證資料得完整性手動設定主機
SLAVEOF no one
這樣6380端口就成了新的主機,可以進行添加資料和擷取資料
四、什麼是哨兵模式?
Sentinel(哨兵模式)是Redis的高可用性解決方案:由一個或多個Sentinel執行個體組成的Sentinel系統可以監視任意多個主伺服器,以及這些主伺服器屬下的所有從伺服器,并在被監視的主伺服器進入下線狀态時,自動将下線主伺服器屬下的某個從伺服器更新為新的主伺服器,然後由新的主伺服器代替已下線的主伺服器繼續處理指令請求。
五、哨兵模式的優缺點
優點
- 哨兵叢集,基于主從複制模式,所有的主從配置優點,它都有
- 主從可以切換,故障可以轉移,高可用性的系統
- 哨兵模式就是主從模式的更新,手動到自動,更加健壯
缺點
- Redis 不好線上擴容,叢集容量一旦到達上限,線上擴容就十分麻煩
- 實作哨兵模式的配置很麻煩,配置複雜
哨兵模式是主從複制模式的更新,根據
心跳機制可自動檢測服務是否線上,進而切換主機,來保證服務的可用性與健壯性
!
六、搭建哨兵模式叢集
⛽搭建叢集
在這裡啟動上面的一主二從,啟動3個redis端口,一個主機,二個從機
建立 哨兵配置檔案 sentinel.conf 寫入配置
# 進入配置檔案目錄
cd /usr/local/redis/redis-5.0.7/bin/config
# 建立哨兵配置檔案
vim sentinel.conf
寫入如下配置
# 監控本地端口為6379 作為主機,投票+1
sentinel monitor myredis 127.0.0.1 6379 1
啟動哨兵監控
# 退回 bin 目錄
cd ..
#啟動哨兵模式
./redis-sentinel config/sentinel.conf
✳️測試叢集
成功啟動哨兵叢集後,将主機服務停止,模拟當機,觀測哨兵模式的配置設定主機
shutdown # 停止6379主機
等一小會哨兵檢測到主機下線,則會配置設定新的主機上位
去檢視端口為6381的詳細資訊,可以發現,6380自動連接配接上了6381主機
再次将6379主機恢複,檢視該服務變化,哨兵模式會将6379直接變為從機,并連接配接6381主機