Redis哨兵模式和使用docker来配置

什么是哨兵模式?(Sentinel)

       在普通的主从复制模式中,当主服务器宕机了故障了,需要手动将从服务器转换为主机。哨兵模式就是创建一个哨兵进程用来监控各个服务器的状态,通过向服务器发送命令,等待服务器响应,来判断这个服务器是否正常,当master主服务器不正常的时候,会自动选择一个slave从服务器变成主服务器,然后通过订阅模式通知其他服务器,来更换主机
在这里插入图片描述
       但是当只有一个哨兵的情况下,如果这个哨兵出问题了,就无法再继续进行监控,就无法自动切换主服务器了。所以这种情况下需要多个哨兵,让他们来对对方相互监督,形成一个多哨兵模式。

故障切换(failover)的过程。假设主服务器宕机,哨兵1先检测到这个结果,系统并不会马上进行failover过程,仅仅是哨兵1主观的认为主服务器不可用,这个现象成为主观下线。当后面的哨兵也检测到主服务器不可用,并且数量达到一定值时,那么哨兵之间就会进行一次投票,投票的结果由一个哨兵发起,进行failover操作。切换成功后,就会通过发布订阅模式,让各个哨兵把自己监控的从服务器实现切换主机,这个过程称为客观下线。这样对于客户端而言,一切都是透明的。
在这里插入图片描述

如何用docker搭建哨兵环境?

先在docker上搭建一个主从集群,已经搭建好了,1个主服务器,2个从服务器
在这里插入图片描述
配置sentinel的配置文件

#哨兵的端口
port 26379
#日志文件名
logfile "sentinel1.log"
#哨兵监控的主服务器ip和端口,最后的2是需要多少个哨兵节点认为主服务器故障才会客观下线,一般是总哨兵节点数的一半+1
sentinel monitor mymaster 172.17.0.2 6379 2
#指定了在发生failover主备切换时最多可以有多少个slave同时对新的master进行同步,数字越小完成failover的时间越长
sentinel parallel-syncs mymaster 1

使用docker来启动3个哨兵容器,-d是后台运行,–name指定容器名称,-v挂载本地目录到容器中

docker run -d -p 26379:26379 --name sentinel1 -v 
/usr/local/docker/sentinel1.conf:/etc/redis/sentinel1.conf -v 
/usr/local/docker/sentinel:/data redis redis-sentinel /etc/redis/sentinel1.conf

另外两个是一样的方法启动。启动完成后如下
在这里插入图片描述

进行测试

直接将主服务器shutdown,这时候从服务器中显示已经下线
在这里插入图片描述
过一会后发现,slave2服务器成为了主机
在这里插入图片描述
然后将曾经的主服务器上线,发现变成了从服务器,现在我的slave2服务器才是主服务器了,哨兵模式至此搭建完毕
在这里插入图片描述

哨兵的配置文件详细说明

# 哨兵sentinel实例运行的端口 默认26379 
port 26379
# 哨兵sentinel的工作目录 
dir /data
# 哨兵sentinel监控的redis主节点的 ip port 
# master-name 可以自己命名的主节点名字 只能由字母A-z、数字0-9 、这三个字符".-_"组成。 
# quorum 配置多少个sentinel哨兵统一认为master主节点失联 那么这时客观上认为主节点失联了 
# sentinel monitor <master-name> <ip> <redis-port> <quorum>
sentinel monitor mymaster 127.0.0.1 6379 2
# 当在Redis实例中开启了requirepass foobared 授权密码 这样所有连接Redis实例的客户端都要提供 密码
# 设置哨兵sentinel 连接主从的密码 注意必须为主从设置一样的验证密码 
# sentinel auth-pass <master-name> <password> 
sentinel auth-pass mymaster ********
# 指定多少毫秒之后 主节点没有应答哨兵sentinel 此时 哨兵主观上认为主节点下线 默认30秒 
# sentinel down-after-milliseconds <master-name> <milliseconds> 
sentinel down-after-milliseconds mymaster 30000
# 这个配置项指定了在发生failover主备切换时最多可以有多少个slave同时对新的master进行 同步, 
#这个数字越小,完成failover所需的时间就越长, 
#但是如果这个数字越大,就意味着越 多的slave因为replication而不可用。 
#可以通过将这个值设为 1 来保证每次只有一个slave 处于不能处理命令请求的状态。 
# sentinel parallel-syncs <master-name> <numslaves> 
sentinel parallel-syncs mymaster 1
# 故障转移的超时时间 failover-timeout 可以用在以下这些方面: 
#1. 同一个sentinel对同一个master两次failover之间的间隔时间。 
#2. 当一个slave从一个错误的master那里同步数据开始计算时间。直到slave被纠正为向正确的master那 里同步数据时。 
#3.当想要取消一个正在进行的failover所需要的时间。 
#4.当进行failover时,配置所有slaves指向新的master所需的最大时间。不过,即使过了这个超时, slaves依然会被正确配置为指向master,但是就不按parallel-syncs所配置的规则来了 
# 默认三分钟 
# sentinel failover-timeout <master-name> <milliseconds>
sentinel failover-timeout my

哨兵模式的优点

  1. 哨兵模式基于主从复制模式,具有主从复制所有优点
  2. 实现了主从服务器切换,故障后能够转移,具有高可用性
  3. 自动切换,很强大

猜你喜欢

转载自blog.csdn.net/qq_41120971/article/details/106977626
今日推荐