天天看點

Redis 進階 -- 搭建主從複制及哨兵模式叢集

Redis 進階 -- 搭建主從複制及哨兵模式叢集

一、什麼是主從複制?

主從複制,是指将一台Redis伺服器的資料 ,複制到其他的Redis伺服器I前者稱為主節點(master/leader),

後者稱為從節點(slave/follower)資料的複制是單向的,隻能由主節點到從節點,Master以寫為主, Slave

以讀為主。

❇️主從複制的作用

  • 讀寫分離:主節點寫,從節點讀,提高伺服器的讀寫負載能力
  • 資料備援:主從複制實作了資料的熱備份,是持久化之外的一種資料備援方式。
  • 故障恢複:當主節點出現問題時,可以由從節點提供服務,實作快速的故障恢複;實際上是一種服務的

備援。

  • 負載均衡:在主從複制的基礎上,配合讀寫分離,可以由主節點提供寫服務,由從節點提供讀服務(即寫

Redis資料時應用連接配接主節點,讀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      
Redis 進階 -- 搭建主從複制及哨兵模式叢集
修改配置檔案資訊
  1. 修改 端口号
  2. 修改 pid
  3. 修改log檔案
  4. 修改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  # 檢視資訊,為主機或從機      
Redis 進階 -- 搭建主從複制及哨兵模式叢集
預設都是主機,我們修改 其它兩個機為​

​從機​

修改端口為6380為從機,并連接配接主機6379

Redis 進階 -- 搭建主從複制及哨兵模式叢集

修改端口為6381為從機,并連接配接主機6379

Redis 進階 -- 搭建主從複制及哨兵模式叢集

回到主機6379檢視資訊

Redis 進階 -- 搭建主從複制及哨兵模式叢集

♻️測試叢集

測試主從複制叢集

在6379主機存入一個key-value,其它從機都可以讀到響應的key

Redis 進階 -- 搭建主從複制及哨兵模式叢集

從機讀取key

Redis 進階 -- 搭建主從複制及哨兵模式叢集

如果從機要設定key,那麼是不可以設定的,​

​從機隻能讀取主機的key​

​​

Redis 進階 -- 搭建主從複制及哨兵模式叢集

假設主機6379當機了,那麼其它從機依然連接配接着主機6379,直至等到主機恢複這樣可不行,如果一直不恢複,會影響系統的可用性!,​

​為解決此問題,我們可以手動設定一個從機為主機,也可以通過哨兵模式自動選舉主機​

首先需要将6381從機連接配接上6380主機,這樣形成連結清單得方式,以防一個主機挂掉,還可以快速恢複另一個從機為主機,進而保證資料得完整性手動設定主機

SLAVEOF no one      
Redis 進階 -- 搭建主從複制及哨兵模式叢集

這樣6380端口就成了新的主機,可以進行添加資料和擷取資料

四、什麼是哨兵模式?

Sentinel(哨兵模式)是Redis的高可用性解決方案:由一個或多個Sentinel執行個體組成的Sentinel系統可以監視任意多個主伺服器,以及這些主伺服器屬下的所有從伺服器,并在被監視的主伺服器進入下線狀态時,自動将下線主伺服器屬下的某個從伺服器更新為新的主伺服器,然後由新的主伺服器代替已下線的主伺服器繼續處理指令請求。
Redis 進階 -- 搭建主從複制及哨兵模式叢集

五、哨兵模式的優缺點

優點

  • 哨兵叢集,基于主從複制模式,所有的主從配置優點,它都有
  • 主從可以切換,故障可以轉移,高可用性的系統
  • 哨兵模式就是主從模式的更新,手動到自動,更加健壯

缺點

  • 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      
Redis 進階 -- 搭建主從複制及哨兵模式叢集

✳️測試叢集

成功啟動哨兵叢集後,将主機服務停止,模拟當機,觀測哨兵模式的配置設定主機

shutdown # 停止6379主機      

等一小會哨兵檢測到主機下線,則會配置設定新的主機上位

Redis 進階 -- 搭建主從複制及哨兵模式叢集

去檢視端口為6381的詳細資訊,可以發現,6380自動連接配接上了6381主機

Redis 進階 -- 搭建主從複制及哨兵模式叢集

再次将6379主機恢複,檢視該服務變化,哨兵模式會将6379直接變為從機,并連接配接6381主機

⛵小結