哨兵機制
有了主從帘靡,那我們需要對其進行監(jiān)控知给,Sentinel會不斷地檢查你的主服務器和從服務器是否運作正常。某個節(jié)點故障后,Sentinel 會開始一次自動故障遷移操作涩赢, 它會將失效主服務器的其中一個從服務器升級為新的主服務器戈次, 并讓失效主服務器的其他從服務器改為復制新的主服務器; 當客戶端試圖連接失效的主服務器時筒扒, 集群也會向客戶端返回新主服務器的地址怯邪, 使得集群可以使用新主服務器代替失效服務器。Redis Sentinel 是一個分布式系統(tǒng)花墩, 你可以在一個架構(gòu)中運行多個 Sentinel 進程(Progress)悬秉, 這些進程使用流言協(xié)議(Gossip Protocols)來接收關于主服務器是否下線的信息, 并使用投票協(xié)議(Agreement Protocols)來決定是否執(zhí)行自動故障遷移冰蘑, 以及選擇哪個從服務器作為新的主服務器和泌。雖然 Redis Sentinel 釋出為一個單獨的可執(zhí)行文件 redis-sentinel , 但實際上它只是一個運行在特殊模式下的 Redis 服務器祠肥。
本文件的配置文件及腳本在gitee上可查看 https://gitee.com/akonvm/redis-demo/tree/master/masterslave
sentinel是在主從模式上建立的武氓,所有sentinel服務都監(jiān)聽master,它會自動檢測到slave以及其它sentinel仇箱。所以主從搭建過程使用前一篇(Mac下搭建Redis5-主從模式)搭建好的服務即可县恕,下面介紹在該主從架構(gòu)上設置sentinel
1. 高可用架構(gòu)圖
圖中實線標識需要在配置文件中指定的關系,虛線是自動檢測到的關系
2. sentinel配置文件
redis解壓目錄下提供了sentinel的配置文件模塊sentinel.conf
剂桥,將他拷貝過來修改即可
$ cd /Users/ankang/develop/redis-demo/masterslave/conf
$ cp /Users/ankang/develop/redis-5.0.7/sentinel.conf redis-sentinel-26379.conf
redis-sentinel-26379.conf
配置如下
# 關閉保護模式
protected-mode no
# 設定端口
port 26379
# 修改為守護模式弱睦,使之可以后臺運行
daemonize yes
# 設置進程文件
pidfile "/var/run/redis-sentinel-26379.pid"
# 設置進日志文件
logfile "/Users/ankang/develop/redis-demo/masterslave/logs/redis-sentinel-26379.log"
# 哨兵sentinel監(jiān)控的redis主節(jié)點的
## ip:主機ip地址
## port:哨兵端口號
## master-name:可以自己命名的主節(jié)點名字(只能由字母A-z、數(shù)字0-9 渊额、這三個字符".-_"組成。)
## quorum:當這些quorum個數(shù)sentinel哨兵認為master主節(jié)點失聯(lián) 那么這時 客觀上認為主節(jié)點失聯(lián)了
# sentinel monitor <master-name> <ip> <redis-port> <quorum>
sentinel monitor mymaster 127.0.0.1 6379 2
# 當在Redis實例中開啟了requirepass <foobared>垒拢,所有連接Redis實例的客戶端都要提供密碼旬迹。
# sentinel auth-pass <master-name> <password>
sentinel auth-pass mymaster admin123
# master或slave多長時間(默認30秒)不能使用后標記為s_down狀態(tài)。
sentinel down-after-milliseconds mymaster 5000
# 若sentinel在該配置值內(nèi)未能完成failover操作(即故障時master/slave自動切換)求类,則認為本次failover失敗奔垦。
sentinel failover-timeout mymaster 10000
# myid在sentinel啟動時會自動生成.多哨兵拷貝配置文件時不要拷貝該字段,需要刪掉尸疆,否則故障切換不生效
# sentinel myid xxxxxxxxxxxxxx
redis-sentinel-26380.conf
椿猎、redis-sentinel-26381.conf
和redis-sentinel-26379.conf
基本一樣,只需要修改文件中的port
寿弱、pidfile
犯眠、logfile
對應的端口
3. 添加啟動腳本
在/Users/ankang/develop/redis-demo/masterslave/
目錄下創(chuàng)建腳本redis-sentinel-26379.sh
、redis-sentinel-26380.sh
症革、redis-sentinel-26381.sh
筐咧。redis-sentinel-26379.sh
內(nèi)容如下
#!/bin/sh
set -e
REDISPORT=26379
INSTALL_DIR="/Users/ankang/develop/redis-5.0.7"
DEMO_DIR="/Users/ankang/develop/redis-demo/masterslave"
EXEC="${INSTALL_DIR}/src/redis-sentinel"
CONF="${DEMO_DIR}/conf/redis-sentinel-${REDISPORT}.conf"
case "$1" in
start)
echo "Starting Redis sentinel..."
$EXEC $CONF
;;
stop)
pid=`ps aux | grep redis-sentinel | grep ${REDISPORT} | head -n 1 | awk '{print $2}'`
if [ -n "$pid" ]
then
echo "Stopping Redis sentinel[${pid}]..."
kill ${pid}
else
echo "Redis sentinel stopped"
fi
;;
*)
echo "Please use start or stop as first argument"
;;
esac
redis-sentinel-26380.sh
和redis-sentinel-26381.sh
可以拷貝redis-sentinel-26379.sh
,對應修改文件中的REDISPORT
變量的端口號即可
4. 啟動與關閉
按下面命令執(zhí)行
$ sh redis-sentinel-26379.sh start
$ sh redis-sentinel-26380.sh start
$ sh redis-sentinel-26381.sh start
注意:sentinel啟動后,對應的配置文件會被自動修改
5. 故障遷移
這時關閉master服務量蕊,過一會其他的slave服務會自動切換為master铺罢,通過info
可查看。