哨兵模式是redis高可用的一种解决方案。
哨兵必须用三个实例取保证自己的高可用,但是哨兵+主从模式是不能保证消息不丢失的。
为什么用三个来保证呢?
假设现在有两个服务器,第一台有redis主节点M1,和哨兵S1,第二台有redis从节点S2,哨兵S2。
如果M1宕机,S1和S2中只要有1个哨兵认为master宕机就可以还行切换,此时哨兵大多数(我理解的大多数的过半)还在运行,那么S1,S2能通过选举,拿出来一个哨兵进行故障转移。
如果第一个服务器整个宕机,M1,S1都已经死掉了,此时S2发现M1宕机,但是哨兵只有一个了,不满足大多数的机器存活,无法选举,就没有办法来执行故障转移。虽然另外一台机器还有一个R1,但是故障转移不会执行。
经典的是三节点的哨兵集群
如果M1所在机器宕机了,那么三个哨兵还剩下2个,S2和S3可以一致认为master宕机,然后选举出一个来执行故障转移。
同时3个哨兵的大多数是2,所以还剩下的2个哨兵运行着,就可以允许执行故障转移。
接下来谈一谈怎么做哨兵
首先我们需要搭建个一主两从的redis,单个节点的redis安装链接如下
redis安装包下载地址Redis
我们可以将单个redis安装三次(6381为主机,6380,6379为从机),然后修改配置文件
1.配置redis.conf文件中的端口号分别为6379,6380,6381,
2.daemonize均为yes
3.6380和6379 均添加slaveof 127.0.0.1 6379 (我是在一台服务器上安装的,若不是一台服务器,ip换为redis主机ip)
分别使用./src/redis-server ./myredis/redis.conf 命令启动redis。
启动后使用./src/redis-cli -p 6379 -h 127.0.0.1 连接redis的客户端 (ip和端口换成自己的)
再执行info Replication,即可看到主从状态
三台状态如下
主从就搭建好了。
接下来配置哨兵
将刚刚的文件redis-6379 复制三份,分别重命名为sentinel-26379,sentinel-26380,sentinel-26381
然后分别修改三个文件的配置文件sentinel.conf
#端口号 (换成相应sentinel的端口号) port 26379 #守护进程,后台启动 daemonize yes #监测redis集群的主机 sentinel monitor mymaster 127.0.0.1 6381 1
修改完毕之后使用./src/sentinel-server ./sentinel.conf启动,成功后,
使用./src/resic-cli -p 26379 命令连接sentinel(其他两个也可以使用这个连接),成功后,使用info命令,可以看到监听的redis集群状态