1 为什么要使用哨兵模式

主从模式下,主机会自动将数据同步到从机,为了分载Master的读操作压力,Slave服务器可以为客户端提供只读操作的服务,写服务依然必须由Master来完成,实现读写分离。当主服务器宕机后,需要手动把一台从服务器切换为主服务器,这就需要人工干预,费事费力,还会造成一段时间内服务不可用

2 哨兵模式的工作原理

在主从模式下,redis同时提供了哨兵命令redis-sentinel,哨兵是一个独立的进程,作为进程,它会独立运行。其原理是哨兵进程向所有的redis机器发送命令,等待Redis服务器响应,从而监控运行的多个Redis实例。

哨兵可以有多个,一般为了便于决策选举,使用奇数个哨兵。哨兵可以和redis机器部署在一起,也可以部署在其他的机器上。多个哨兵构成一个哨兵集群,哨兵直接也会相互通信,检查哨兵是否正常运行,同时发现master宕机哨兵之间会进行决策选举新的master。

3 一主二从三哨兵搭建步骤

  • 将redis文件复制三份到redis-sentinel目录下
mkdir redis-sentinel
cd redis-sentinel/
cp -r /opt/redis-6.2.6/ .
mv redis-6.2.6/ redis-6.2.6-5000/

因为我把redis-6.2.6/redis.conf被我复制到了/usr/local/bin/目录下,并进行了修改,并未使用redis-6.2.6/redis.conf,所以需要替换redis.conf文件

cd redis-6.2.6-5000/
rm -f redis.conf
cp -r /usr/local/bin/redis.conf .
cp -r . ../redis-6.2.6-5001/
cp -r . ../redis-6.2.6-5002/
  • 对于主节点(5000)

编辑redis.conf

vi /opt/redis-sentinel/redis-6.2.6-5000/redis.conf
#只需要修改port
port 5000

在这里插入图片描述

编辑sentinel.conf

vi /opt/redis-sentinel/redis-6.2.6-5000/sentinel.conf
#修改port
port 26380
#开启守护线程
daemonize yes 
#sentinel monitor <master-group-name> <ip> <port> <quorum>
#master-group-name是集群名称 quorum是需要同意主节点不可用的Sentinel的数量
sentinel monitor mymaster ip 5000 2
#主节点密码
#sentinel auth-pass <master-name> <password>
sentinel auth-pass mymaster 主节点密码

在这里插入图片描述
在这里插入图片描述

  • 对于两个从节点(5001,5002)

编辑redis.conf

#修改port(一个为5001,另一个为5002)
port 5001
#主从复制 replicaof <masterip> <masterport>
replicaof 主节点ip 主节点端口号
#主节点密码 masterauth <master-password>
masterauth 主节点密码

在这里插入图片描述

在这里插入图片描述

编辑sentinel.conf

#修改port(一个为26381,另一个为26382)
port 26381
#开启守护线程
daemonize yes 
#sentinel monitor <master-group-name> <ip> <port> <quorum>
sentinel monitor mymaster ip 5000 2
#主节点密码
sentinel auth-pass mymaster 主节点密码

两个从节点的redis.conf只有端口号不相同,三个sentinel.conf也只有端口号不相同,主节点的redis.conf不需要设置replicaof和masterauth,否则复制自身会报错

4 测试该哨兵集群是否可用

  • 将master,slave,sentinel全都启动起来
 cd /usr/local/bin

master和slave启动方式

./redis-server /opt/redis-sentinel/redis-6.2.6-5000/redis.conf
./redis-server /opt/redis-sentinel/redis-6.2.6-5001/redis.conf
./redis-server /opt/redis-sentinel/redis-6.2.6-5002/redis.conf

sentinel启动方式

./redis-sentinel /opt/redis-sentinel/redis-6.2.6-5000/sentinel.conf 
./redis-sentinel /opt/redis-sentinel/redis-6.2.6-5001/sentinel.conf 
./redis-sentinel /opt/redis-sentinel/redis-6.2.6-5002/sentinel.conf 
  • 主从复制,slave只读,master宕机哨兵决策选举新的master均测试成功,由于测试过程不好呈现,故不在文中列出

Redis关闭指定端口

redis-cli -a 该端口节点密码 -p 端口号 shutdown

5 Spring Boot连接Redis哨兵集群

spring:
  redis:
    password:                    # 主节点密码
    sentinel:
      master: mymaster           #集群名称
      nodes:                     #只需要配置哨兵 ip:port 列表
       - localhost:port1
       - localhost:port2
       - localhost:port3

在这里插入图片描述

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐