【Redis】哨兵機制


一、概述

什么是哨兵機制

  • Redis的哨兵(sentinel) 系統用於管理多個 Redis 服務器,該系統執行以下三個任務:
    • 監控(Monitoring): 哨兵(sentinel) 會不斷地檢查你的Master和Slave是否運作正常。
    • 提醒(Notification):當被監控的某個 Redis出現問題時, 哨兵(sentinel) 可以通過 API 向管理員或者其他應用程序發送通知。
    • 自動故障遷移(Automatic failover):當一個Master不能正常工作時,哨兵(sentinel) 會開始一次自動故障遷移操作,它會將失效Master的其中一個Slave升級為新的Master, 並讓失效Master的其他Slave改為復制新的Master; 當客戶端試圖連接失效的Master時,集群也會向客戶端返回新Master的地址,使得集群可以使用Master代替失效Master。
  • 哨兵(sentinel) 是一個分布式系統,你可以在一個架構中運行多個哨兵(sentinel) 進程,這些進程使用流言協議(gossipprotocols)來接收關於Master是否下線的信息,並使用投票協議(agreement protocols)來決定是否執行自動故障遷移,以及選擇哪個Slave作為新的Master.
  • 每個哨兵(sentinel) 會向其它哨兵(sentinel)、master、slave定時發送消息,以確認對方是否”活”着,如果發現對方在指定時間(可配置)內未回應,則暫時認為對方已掛(所謂的”主觀認為宕機Subjective Down,簡稱sdown).
  • 若“哨兵群”中的多數sentinel,都報告某一master沒響應,系統才認為該master"徹底死亡"(即:客觀上的真正down機,Objective Down,簡稱odown),通過一定的vote算法,從剩下的slave節點中,選一台提升為master,然后自動修改相關配置.
  • 雖然哨兵(sentinel) 釋出為一個單獨的可執行文件 redis-sentinel ,但實際上它只是一個運行在特殊模式下的 Redis 服務器,你可以在啟動一個普通 Redis 服務器時通過給定 --sentinel 選項來啟動哨兵(sentinel).
  • 哨兵(sentinel) 的一些設計思路和zookeeper非常類似

15560916690088
155609

二、環境配置

2.1 虛擬機

  • 哨兵機制的作用:管理集群redis、監控選舉策略、心跳檢測,(獨立的一個應用程序)
  • 環境配置 實現三台不同服務器的redis實現集群(克隆)
  • 直接先安裝一台,后面兩台全部克隆
192.168.212.145 主redis服務器
192.168.212.147 從redis
192.168.212.148 從redis

2.2 安裝Redis

##下載Redis安裝包
wget http://download.redis.io/releases/redis-3.2.9.tar.gz
##解壓Redis安裝包
tar -zxvf redis-3.2.9.tar.gz
##安裝
cd redis-3.2.9
make
cd src
make install PREFIX=/usr/local/redis
##移動配置文件到安裝目錄下
cd ../
mkdir /usr/local/redis/etc
mv redis.conf /usr/local/redis/etc

## 修改配置文件
vi /usr/local/redis/etc/redis.conf
## 1. 修改為后台啟動
daemonize yes
## 2. 修改密碼
requirepass 123456
## 3. 開啟外網訪問 ,注釋掉下面的
## bind 127.0.0.1 


## 開始測試
## 1. 開啟redis 
/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf 

## 2. 連接Redis客戶端 
./redis-cli -h 127.0.0.1 -p 6379 -a "123456" 
PING #結果表示成功

## 3. 測試完成 ,停止Redis服務
./redis-cli -h 127.0.0.1 -p 6379 -a "123456"  shutdown

## ☆☆☆☆注意事項☆☆☆
## 在做主動復制時要關閉Linux防火牆
##1. 臨時關閉
systemctl stop firewalld
##2. 禁止開機啟動防火牆
systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.

2.3 配置主從復制

配置主從復制:將從服務器的slaveof 指向主服務器,並設置訪問密碼
連接客戶端之后可以,輸入info命令可以查看當前redis的信息,可以看出145為主服務器,148服務器為從服務器:

  • 注意的地方:關閉所有防火牆
  • 如果在集群的時候,之前的主redis同步密碼一定要指向。集群的所有服務器都要開啟密碼

2.4 配置哨兵

我們在從服務器上配置哨兵:

##實現步驟:
##1.將redis根目錄下的sentinel.conf 拷貝到etc目錄
cp sentinel.conf  /usr/local/redis/etc
##2.修改sentinel.conf配置文件,如下配置要修改:
##2.1 sentinel monitor <master-name> <ip> <port> <quorum>
##                     主節點名稱      IP    端口號 選舉次數
## 關於<quorum> 如果設置為1 ,
## 代表至少要有 1 個哨兵認為主節點故障了,
## 才算這個主節點是 客觀下線 (odown) 了
sentinel monitor mymaster  192.168.110.133 6379 1  
##2.2 sentinel auth-pass <master-name> <password>
##  如果主節點設置了密碼,則需要這個配置,否則哨兵無法對主節點進行監控。
sentinel auth-pass mymaster 123456  

##2.3 sentinel down-after-milliseconds <master-name> <times>
## 每個哨兵節點會定期發送ping命令來判斷Redis節點和其余的哨兵節點是否是可達的
## 如果超過了配置的<times>時間沒有收到pong回復 
## 就主觀判斷節點是不可達的,<times>的單位為毫秒
sentinel down-after-milliseconds mymaster 30
##2.4 sentinel parallel-syncs <master-name> <nums> 
## 當哨兵節點都認為主節點故障時,哨兵投票選出的leader會進行故障轉移,
## 選出新的主節點,原來的從節點們會向新的主節點發起復制,
## 這個配置就是控制在故障轉移之后,每次可以向新的主節點發起復制的節點的個數,
## 最多為<nums>個,
sentinel parallel-syncs mymaster 2 # 做多少合格節點
##2.5 sentinel failover-timeout <master-name>  <times>
##  這個代表哨兵進行故障轉移時如果超過了配置的<times>時間就表示故障轉移超時失敗。
sentinel failover-timeout mymaster  5000

2.5 測試

  1. 啟動哨兵
  2. 啟動redis,先啟動主redis,后啟動從redis(不然哨兵就意味主redis掛掉了)
##1. 進入到bin目錄中,啟動哨兵模式
./redis-server /usr/local/redis/etc/sentinel.conf --sentinel &
  • 這個時候啟動了三個redis服務器,如果145主服務器掛掉了,主服務器會轉移到從服務器上,如果之前的主服務器恢復了,它會變為從服務器。(如果在集群的時候,之前的主redis同步密碼一定要指向。集群的所有服務器都要開啟密碼)

2.6 疑惑(待解決)

  現在我並不知道,配置哨兵的時候是隨便配置在那一台服務器上都可以,還是配置在從服務器上,而且如果有哨兵配置的服務器掛掉了,那又會發生什么呢?


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM