1. 程式人生 > >Redis叢集--Redis叢集之哨兵模式

Redis叢集--Redis叢集之哨兵模式

echo編輯整理,歡迎轉載,轉載請宣告文章來源。歡迎新增echo微信(微訊號:t2421499075)交流學習。 百戰不敗,依不自稱常勝,百敗不頹,依能奮力前行。——這才是真正的堪稱強大!!!


搭建Redis叢集之前請準備好3臺已經安裝好Redis的伺服器,CentOS7下安裝Redis請閱讀:https://blog.csdn.net/xlecho/article/details/102975520

為什麼需要Redis叢集

  • Redis 本身的 QPS 已經很高了,但是如果在一些併發量非常高的情況下,效能還是會受到影響。這個時候我們希望有更多的 Redis 服務來完成工作。
  • 第二個是出於儲存的考慮。因為Redis所有的資料都放在記憶體中,如果資料量大,很容易受到硬體的限制。升級硬體收效和成本比太低,所以我們需要有一種橫向擴充套件的方法。
  • 第三個是可用性和安全的問題。如果只有一個Redis服務,一旦服務宕機,那麼所有的客戶端都無法訪問,會對業務造成很大的影響。另一個,如果硬體發生故障,而單機的資料無法恢復的話,帶來的影響也是災難性的。可用性、資料安全、效能都可以通過搭建多個 Reids 服務實現。其中有一個是主節點(master),可以有多個從節點(slave)。主從之間通過資料同步,儲存完全相同的資料。如果主節點發生故障,則把某個從節點改成主節點,訪問新的主節點。

Redis叢集的安裝環境準備

伺服器地址 系統 Redis版本
192.168.222.133 CentOS7 5.0.1
192.168.222.134 CentOS7 5.0.1
192.168.222.135 CentOS7 5.0.1

我們以135作為master,其他兩個節點全部作為slave節點

在slave中的redis.con配置如下程式碼

slaveof 192.168.222.135 6379
# 注意,如果你的節點設定了密碼訪問,你需要配置下面這個配置
masterauth master密碼

這裡沒有將slave設定成為‘只讀’,如果實際生產環境如果不設定這個叢集就會出現重大問題。

配置完成之後重啟Redis

service redis start

檢視主節點的叢集狀態

# 啟動redis
redis-server redis.conf
# 連線redis
redis-cli -h 192.168.222.135 -p 6379
# 檢視狀態
info replication

配置如果成功我們可以看到如下資訊:

退出叢集

退出叢集比較簡單,可以直接刪除掉上面的配置,也可以執行以下命令

 slaveof no one

看到這個資訊我們就已經完成了我們的主從配置。但是什麼是哨兵模式?哨兵模式是基於我們叢集的,我們有了叢集之後,我們就要來配置我們的哨兵模式了

什麼是哨兵模式

哨兵模式英文名Sentinel,它是為了解決Redis叢集的高可用應運而生的。Redis叢集,一般來說只會有一個master服務,當master掛掉之後,之能手動切換master就會造成一段時間內的服務不可用。sentinel就是專門針對這種情況而產生的一個監聽服務。它主要負責監聽我們一個組內所有Redis,當我們的master掛掉之後,它就會根據Raft演算法進行選舉一臺新的leader出來,然後將選舉出來的leader當成我們的master。

搭建哨兵模式

哨兵模式的主要作用就是監控弄Redis叢集,所以我們搭建哨兵模式之前要確認我們的Redis叢集已經成功搭建了。哨兵模式的搭建其實也相對比較簡單,只需要配置主節點監控即可。

# 找到redis根目錄下面的sentinel.conf的配置檔案,修改如下配置
daemonize yes
port 26379
protected-mode no
dir /usr/local/redis/redis-5.0.1/sentinel-tmp
sentinel monitor mymaster 192.168.222.135 6379 2
sentinel auth-pass mymaster 48835a9c-7a5a-4ec8-af6a-80af3e87b194
# 如果哨兵3s內沒有收到主節點的心跳,哨兵就認為主節點宕機了,預設是30秒
sentinel down-after-milliseconds mymaster 3000
# 如果10秒後,master仍沒活過來,則啟動failover,預設180s
sentinel failover-timeout mymaster 10000
  • 先啟動Redis服務,然後在啟動sentinel服務
# 啟動redis服務 
redis-server redis.conf
# 啟動sentinel
redis-sentinel sentinel.conf

模擬master宕機,檢測sentinel服務是否成功

模擬之前確保我們的redis、sentinel服務都啟動了,登入master,直接在master上面進行shutdown。操作完成之後等待一會,然後使用登入我們的從伺服器,連線上從服務的redis之後,我們使用命令info replication 檢視當前節點是否成為了master

  • 我這裡本來135是master,使用info replication可以看到如下結果

  • 135使用shutdown之後,分別檢視134/133兩臺伺服器

注意:採坑


這是由於我們的下面兩行配置的位置放反了引起的。正確順序按照下面的順序即可

sentinel monitor mymaster 192.168.222.135 6379 2
sentinel auth-pass mymaster 48835a9c-7a5a-4ec8-af6a-80af3e87b194

做一個有底線的部落格