首頁 > 軟體

redis搭建哨兵叢集的實現步驟

2022-05-17 19:01:55

redis安裝部署

環境說明:

redis使用的是6.2.6版本

主機IP系統
master192.168.129.136redhat8
slave192.168.182.135redhat8
slave2192.168.182.134redhat8

準備工作

// 三臺主機都要做
[root@master opt] wget https://download.redis.io/releases/redis-6.2.6.tar.gz

//三臺主機都做
[root@master opt]# tar -zxf redis-6.2.6.tar.gz 

//編譯安裝
[root@master redis-6.2.6]# pwd  //進入redis目錄
/opt/redis-6.2.6

[root@master redis-6.2.6]# yum -y install gcc gcc-c++  //安裝c語言編譯器
[root@master redis-6.2.6]# yum -y install make  //安裝make編譯器

[root@master redis-6.2.6]# make MALLOC=libc  

設定環境變數

// redis的二進位制檔案放在src目錄下
[root@master redis-6.2.6]# cat /etc/profile.d/redis.sh   //為了能直接使用redis命令
export PATH=/opt/redis-6.2.6/src:$PATH

[root@master redis-6.2.6]# source /etc/profile.d/redis.sh  //使其生效

//啟動redis
啟動方式有以下兩種:
[root@master redis-6.2.6]# vim redis.conf
257 daemonize yes //把no改為yes

啟動一:
[root@master src]# ./redis-server  //不建議用這種方式啟動
[root@master redis-6.2.6]# redis-server /opt/redis-6.2.6/redis.conf  //推薦使用這種方式

啟動二:
[root@master opt]# cat /usr/lib/systemd/system/redis.service 
[Unit]
Description=redis server daemon
After=network.target

[Service]
Type=forking
ExecStart=/opt/redis-6.2.6/src/redis-server /opt/redis-6.2.6/redis.conf
ExecStop=/bin/kill -s QUIT $MAINPID
ExecReload=/bin/kill -HUP $MAINPID

[Install]
WantedBy=multi-user.target

[root@master opt]# systemctl daemon-reload
[root@master opt]# systemctl enable --now redis.service

[root@master opt]# ss -anlt | awk -F "  *|:" 'NR==2{print $5}'   //看到6379埠號說明成功
6379

進入使用者端的命令
redis-cli -p 6379 
127.0.0.1:6379>

[root@master redis-6.2.6]# redis-cli -p 6379 shutdown  //關閉redis服務

以上操作三臺主機都需要做

redis叢集架構

現在所部署的哨兵叢集是基於redis主從的基礎上的,整體架構如下:
一個主節點(master)可擁有多個從節點(slave),從節點實現對主節點的複製,保證資料同步。而哨兵(sentinel)則對各節點進行監控,主要包括主節點存活檢測、主從執行情況檢測等,一旦主節點宕機,哨兵可自動進行故障轉移 (failover)、主從切換。

設定redis主從

修改redis組態檔
建議在修改組態檔之前寫備份

//在master要做的事
[root@master redis-6.2.6]# mkdir logs
75 bind 192.168.129.136  //本機IP地址
94 protected-mode no  
302 logfile "/opt/redis-6.2.6/logs/redis.log"

注意replicaof指定master的IP地址和埠號,在老版本上要做的事 slaveof

//在slave2上要做的事
[root@slave2 redis-6.2.6]# vim redis.conf
75 bind 192.168.129.135  //本機IP
477   replicaof 192.168.129.136 6379  master的IP和埠號

//在slave2上要做的事
[root@slave2 redis-6.2.6]# vim redis.conf
75 bind 192.168.129.135  //本機IP
477   replicaof 192.168.129.136 6379  master的IP和埠號

注意修改完組態檔之後需要重啟redis服務才能生效

測試主從

[root@master redis-6.2.6]# redis-cli -h 192.168.129.136 -p 6379
192.168.129.136:6379> set name tom  // 設定一個value值
OK

[root@slave ~]# redis-cli -h 192.168.129.135  //這裡也可以不指定埠號,因為redis預設使用的事6379埠號
192.168.129.135:6379> get name
"tom"

[root@slave2 redis-6.2.6]# redis-cli -h 192.168.129.134
192.168.129.134:6379> get name
"tom"

###主從同步成功

搭建redis哨兵叢集

哨兵叢集詳解:

Redis Sentinel是Redis 的高可用性解決方案由一個或多個Sentinel(哨兵)範例組成。它可以監視任意多個主伺服器,以及這些主伺服器屬下的所有從伺服器,並在被監視的主伺服器進入下線狀態時,自動將下線主伺服器屬下的某個從伺服器升級為新的主伺服器,它的主要功能如下:

  • 監控: Sentinel會不斷地檢查你的主伺服器和從伺服器是否運作正常。
  • 通知:當被監控的某個 Redis 伺服器出現問題時, Sentinel可以通過API向管理員或者其他應用程式傳送通知。
  • 故障遷移:當主伺服器不能正常工作時,Sentinel會自動進行故障遷移,也就是主從切換。
  • 統一的設定管理:連線者詢問sentinel取得主從的地址。

哨兵叢集原理

Sentinel 使用的演演算法核心是 Raft 演演算法,主要用途就是用於分散式系統,系統容錯,以及Leader選舉,每個Sentinel都需要定期的執行以下任務:

  • 每個 Sentinel 會自動發現其他 Sentinel 和從伺服器,它以每秒鐘一次的頻率向它所知的主伺服器、從伺服器以及其他 Sentinel 範例傳送一個 PING 命令。
  • 如果一個範例(instance)距離最後一次有效回覆 PING 命令的時間超過 down-after-milliseconds 選項所指定的值, 那麼這個範例會被 Sentinel 標記為主觀下線。 有效回覆可以是: +PONG 、 -LOADING 或者 -MASTERDOWN 。
  • 如果一個主伺服器被標記為主觀下線, 那麼正在監視這個主伺服器的所有Sentinel要以每秒一次的頻率確認主伺服器的確進入了主觀下線狀態。
  • 如果一個主伺服器被標記為主觀下線, 並且有足夠數量的Sentinel(至少要達到組態檔指定的數量)在指定的時間範圍內同意這一判斷, 那麼這個主伺服器被標記為客觀下線。
  • 在一般情況下, 每個Sentinel會以每 10 秒一次的頻率向它已知的所有主伺服器和從伺服器傳送 INFO 命令。 當一個主伺服器被Sentinel標記為客觀下線時,Sentinel向下線主伺服器的所有從伺服器傳送 INFO 命令的頻率會從 10 秒一次改為每秒一次。
  • 當沒有足夠數量的Sentinel同意主伺服器已經下線, 主伺服器的客觀下線狀態就會被移除。 當主伺服器重新向Sentinel的 PING 命令返回有效回覆時, 主伺服器的主管下線狀態就會被移除。

哨兵叢集

// 三臺主機做同樣的操作
[root@master redis-6.2.6]# vim sentinel.conf
26 daemonize yes
36 logfile "/opt/redis-6.2.6/logs/sentinel.conf"
84 sentinel monitor mymaster 192.168.129.136 6379 2

[root@master ~]# redis-sentinel /opt/redis-6.2.6/sentinel.conf //啟動哨兵

// 檢視哨兵資訊
[root@master ~]# redis-cli -h 192.168.129.136 -p 26379
192.168.129.136:26379> info sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=192.168.129.136:6379,slaves=2,sentinels=3

[root@slave ~]# redis-cli -h 192.168.129.135 -p 26379
192.168.129.135:26379> info sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=192.168.129.136:6379,slaves=2,sentinels=3


[root@slave2 ~]# redis-cli -h 192.168.129.134 -p 26379
192.168.129.134:26379> info sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=192.168.129.136:6379,slaves=2,sentinels=3

模擬主機故障,進行容災切換

[root@master ~]# systemctl stop redis.service  //關閉redis服務
[root@master redis-6.2.6]# ps -ef | grep redis  //使用此命令找到sentinel程序,然後再kill掉sentinel的程序

//因為主機切換到了144主機,因此原來主機的組態檔也會隨之更改,所以在137啟動前需要更改組態檔,將其設定成144的從機:
[root@master redis-6.2.6]# vim redis.conf
477   replicaof 192.168.129.134 6379

[root@master redis-6.2.6]# redis-server /opt/redis-6.2.6/redis.conf //啟動redis服務
[root@master redis-6.2.6]# systemctl restart redis.service  //也可以使用此命令啟動redis服務

[root@master redis-6.2.6]# redis-sentinel /opt/redis-6.2.6/sentinel.conf  //啟動sentinel服務

##至此哨兵叢集搭建完畢

到此這篇關於redis搭建哨兵叢集的實現步驟的文章就介紹到這了,更多相關redis 哨兵叢集內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com