sentinel是Redis的一大特性,即哨兵模式。是指在Redis主从模式中,如果主节点宕机时,整个集群会推选出一位新主节点的一种高可用模式。

下面以三台机器进行部署,如图:

RedisInsight profiler功能 redis-cli sentinel_Redis

部署三台Redis节点
01、在主节点上部署Redis节点

(1)编写当前节点的信息文件:/hand/hap/redis/master.conf

cluster-announce-ip 192.168.100.234
cluster-announce-port 6379
# 对外宣布自己的ip和端口
replica-announce-ip 192.168.100.234
replica-announce-port 6379

(2)启动主节点

docker run --name redis-master -v /hand/hap/redis/master.conf:/conf/master.conf -p 6379:6379 -d redis redis-server /conf/master.conf
在从节点上部署Redis节点

(1)编写当前节点的信息文件:/hand/hap/redis/slave.conf

cluster-announce-ip 192.168.100.232
cluster-announce-port 6379
# 对外宣布自己的ip和端口
replica-announce-ip 192.168.100.232
replica-announce-port 6379

(2)启动从节点

docker run --name redis-slave01 -v /hand/hap/redis/slave.conf:/conf/slave.conf -p 6379:6379 -d redis redis-server /conf/slave.conf

(3)进入从节点,让其归属主节点

# 进入从节点Redis的cli
docker exec -it redis-slave01 redis-cli
# 让其归属于主节点
slaveof 192.168.100.234 6379
02、在从节点上部署Redis节点

(1)编写当前节点的信息文件:/hand/hap/redis/slave.conf

cluster-announce-ip 192.168.100.235
cluster-announce-port 6379
# 对外宣布自己的ip和端口
replica-announce-ip 192.168.100.235
replica-announce-port 6379

(2)启动从节点

docker run --name=redis-slave02 -v /hand/hap/redis/slave.conf:/conf/ -p 6379:6379 -d redis

(3)进入从节点,让其归属主节点

# 进入从节点Redis的cli
docker exec -it redis-slave02 redis-cli
# 让其归属于主节点
slaveof 192.168.100.234 6379
03、验证主从模式成功

(1)在俩个从节点获取demo字符串值

get demo

结果是不存在

(2)在主节点设置demo字符串的值

set demo demoValue

(3)验证从节点是否有demo这个值

部署三台Sentinel节点
01、在主节点上部署sentinel节点

(1)编写哨兵模式的配置文件:/hand/hap/redis/sentinel.conf

# 监控名为mymaster集群;其主节点信息为【192.168.100.234:6379】;当发生意外时,至少有俩个节点同意
sentinel monitor mymaster 192.168.100.234 6379 2
# 监控认为超过60S还没响应,就认为mymaster集群挂了
sentinel down-after-milliseconds mymaster 5000
# 监控会在180S后,启动恢复机制
sentinel failover-timeout mymaster 10000
sentinel parallel-syncs mymaster 1

# 对sentinel集群暴露自己的ip和端口
sentinel announce-ip 192.168.100.234
sentinel announce-port 26379

(2)在主节点上部署sentinel节点

docker run --name redis-sentinel01  -it -v /hand/hap/redis/sentinel.conf:/conf/sentinel.conf -p 26379:26379 redis redis-sentinel /conf/sentinel.conf
02、在从节点上部署sentinel节点

(1)编写哨兵模式的配置文件:/hand/hap/redis/sentinel.conf

# 监控名为mymaster集群;其主节点信息为【192.168.100.234:6379】;当发生意外时,至少有俩个节点同意
sentinel monitor mymaster 192.168.100.234 6379 2
# 监控认为超过60S还没响应,就认为mymaster集群挂了
sentinel down-after-milliseconds mymaster 5000
# 监控会在180S后,启动恢复机制
sentinel failover-timeout mymaster 10000
sentinel parallel-syncs mymaster 1

# 对sentinel集群暴露自己的ip和端口
sentinel announce-ip 192.168.100.232
sentinel announce-port 26379

(2)在从节点部署sentinel节点

docker run --name redis-sentinel02  -it -v /hand/hap/redis/sentinel.conf:/conf/sentinel.conf -p 26379:26379 redis redis-sentinel /conf/sentinel.conf
03、 在从节点上部署sentinel节点

(1)编写哨兵模式的配置文件:/hand/hap/redis/sentinel.conf

# 监控名为mymaster集群;其主节点信息为【192.168.100.234:6379】;当发生意外时,至少有俩个节点同意
sentinel monitor mymaster 192.168.100.234 6379 2
# 监控认为超过60S还没响应,就认为mymaster集群挂了
sentinel down-after-milliseconds mymaster 5000
# 监控会在180S后,启动恢复机制
sentinel failover-timeout mymaster 10000
sentinel parallel-syncs mymaster 1

# 对sentinel集群暴露自己的ip和端口
sentinel announce-ip 192.168.100.235
sentinel announce-port 26379

(2)在从节点部署sentinel节点

docker run --name redis-sentinel02  -it -v /hand/hap/redis/sentinel.conf:/conf/sentinel.conf -p 26379:26379 redis redis-sentinel /conf/sentinel.conf
sentinel节点的日志分析:
# 开始监控名为mymaster的集群,投票数为2
+monitor master mymaster 192.168.100.234 6379 quorum 2
# 发现这个集群下的俩个从节点
+slave slave 192.168.100.232:6379 192.168.100.232 6379 @ mymaster 192.168.100.234 6379
+slave slave 192.168.100.235:6379 192.168.100.235 6379 @ mymaster 192.168.100.234 6379
# 发现其他俩个sentinel节点
+sentinel sentinel 06...40 192.168.100.232 26379 @ mymaster 192.168.100.234 6379
+sentinel sentinel 90...59 192.168.100.234 26379 @ mymaster 192.168.100.234 6379

-- 模拟主节点宕机
# 主观认为主节点挂了
+sdown master mymaster 192.168.100.234 6379
# 客观认为主节点挂了
+odown master mymaster 192.168.100.234 6379 #quorum 2/2
# 开启新的一代
+new-epoch 1
# 尝试故障转移主节点,说白了就是想恢复一个主节点
+try-failover master mymaster 192.168.100.234 6379
# 三个sentinel节点开始投票
+vote-for-leader 06...40 1
6a...a5 voted for 06...40 1
90...59 voted for 06...40 1
# 开始进行故障转移
+elected-leader master mymaster 192.168.100.234 6379
# 推选新的主节点
+failover-state-select-slave master mymaster 192.168.100.234 6379
# 选择235节点作为新主节点
+selected-slave slave 192.168.100.235:6379 192.168.100.235 6379 @ mymaster 192.168.100.234 6379
# 故障转移结束,让235节点不再是任何节点的从节点
+failover-state-send-slaveof-noone slave 192.168.100.235:6379 192.168.100.235 6379 @ mymaster 192.168.100.234 6379
# 等待提升
+failover-state-wait-promotion slave 192.168.100.235:6379 192.168.100.235 6379 @ mymaster 192.168.100.234 6379
...
# 新的主节点诞生
+switch-master mymaster 192.168.100.234 6379 192.168.100.235 6379
# 新主节点开始接受信息
+slave slave 192.168.100.232:6379 192.168.100.232 6379 @ mymaster 192.168.100.235 6379
+slave slave 192.168.100.234:6379 192.168.100.234 6379 @ mymaster 192.168.100.235 6379
+sdown slave 192.168.100.234:6379 192.168.100.234 6379 @ mymaster 192.168.100.235 6379