天天看點

redis學習(四)主從結構與哨兵機制

什麼是主從結構

redis學習(四)主從結構與哨兵機制

如圖,一個主伺服器可以有多個從伺服器,從伺服器下面還可以有從伺服器,這是redis的級聯結構。主伺服器在資料發生變化時,将資料同步給從伺服器,保持資料的弱一緻性。

為什麼redis要搭建主從結構

從作者個人的了解來看

1、降低主伺服器壓力,由于從伺服器與主伺服器資料定期同步,是以我們在進行讀資料操作的時候,就可以通路從伺服器,隻有在寫操作的時候才需要通路主伺服器,大大降低了主伺服器的壓力

2、防止因主伺服器當機而導緻服務崩潰,一旦主伺服器當機,如果沒有從伺服器,所有請求都會打在關系型資料庫上,很有可能造成緩存雪崩,有了從伺服器,通過哨兵機制,就可以重新選舉出一個主伺服器,之前的主伺服器在重新開機後作為從伺服器運作就可以。大大的增強了服務的健壯性

哨兵機制

顧名思義,哨兵即是用來放哨,哨兵通過定期ping各級伺服器來确定伺服器是否運作良好,剛才也說了,哨兵機制能夠在主伺服器當機之後,在從伺服器裡選舉一個新的主伺服器出來,如果是從伺服器出現了問題,隻需要重新開機一下再與主伺服器重建立立關聯即可。

我們通常會使用多個哨兵共同監聽一組伺服器,以防止主伺服器可能因為某些小問題沒能被哨兵ping通而導緻的更換主伺服器。在多哨兵的情況下,當一個哨兵發現問題,就會做一個類似于發起投票的工作,之後其他哨兵也會嘗試ping故障伺服器,然後得出自己的結論,當認為伺服器當機的哨兵達到一定的标準,就會采取行動。

搭建主從+哨兵

原理 我們了解的差不多了,之後就試試搭建一個主從+哨兵的服務

作者在這裡選擇搭建一主兩從

主伺服器的配置檔案使用預設的,就不展示了,注意哨兵模式主從同步不可以綁定127.0.0.1和0.0.0.0,否則主伺服器當機也無法投票得到新的主伺服器

從伺服器的配置如下,建立一個檔案,注意字尾名為.conf

# 使得Redis伺服器可以跨網絡通路
bind 0.0.0.0
# 設定密碼
requirepass "123456"
# 指定主伺服器,注意:有關slaveof的配置隻是配置從伺服器,主伺服器不需要配置
slaveof 192.168.43.38 6379
# 主伺服器密碼,注意:有關slaveof的配置隻是配置從伺服器,主伺服器不需要配置
masterauth 123456

#啟動端口
port 6079
           

接下來我們啟動一下試試看:啟動指令 redis-server.exe + 配置檔案,如下圖,啟動從伺服器指令相同,更換配置檔案即可

redis學習(四)主從結構與哨兵機制

從主伺服器列印出的資訊可以看到6079和6179兩個端口的從伺服器都成功與主伺服器關聯,之後我們測試一下

redis-cli.exe指令進入主伺服器,如果有密碼記得加參數 -a,舉例為:redis-cli.exe -a 123456

設定一個aaa key,值為111

redis學習(四)主從結構與哨兵機制

進入任意一個從伺服器檢視,注意進入從伺服器需要加參數-p為從伺服器端口号

redis學習(四)主從結構與哨兵機制

 發現可以get到這個值,說明我的主從搭建完成

接下來我們設定哨兵,建立檔案,尾綴名為.conf

sentinel myid 859fe0cf486ce0872bc03a3ab74d342e153d87b6
#監聽主伺服器
sentinel monitor mymaster 192.168.43.38 6079 1
sentinel down-after-milliseconds mymaster 500
#逾時設定
sentinel failover-timeout mymaster 1500
sentinel auth-pass mymaster 123456
protected-mode no
# Generated by CONFIG REWRITE
port 26379
#檔案位置
dir "D:\\redis"
sentinel config-epoch mymaster 4051
sentinel leader-epoch mymaster 4051
#監聽的從伺服器
sentinel known-slave mymaster 192.168.43.38 6379
sentinel known-slave mymaster 192.168.43.38 6179
sentinel current-epoch 4051
           

啟動一下哨兵

redis學習(四)主從結構與哨兵機制

然後嘗試關掉主伺服器

redis學習(四)主從結構與哨兵機制

可以看到,在6079端口的伺服器被選為新的主伺服器 

完成

------------------------------------------------------------------------------------------------------------------------------------------------------------------------

希望本篇文章能夠幫助到您,如果您有問題,歡迎評論留言,我們一起探讨