redis & (一主二从)哨兵模式

371 阅读3分钟

这是我参与「掘金日新计划 · 8 月更文挑战」的第24天,点击查看活动详情

哨兵模式

创建一主二从的集群模式,至于配置主从服务本文这里就不细说了上一篇我们已经搭建完成,redis的哨兵模式就是反客为主的自动版 当主服务挂掉之后 通过投票选举新的 master进行工作,要在做到这样肯定是需要对主服务的状态进行监听。下面 我们就配置一下哨兵模式

创建 sentinel.conf文件

注意这里的文件名称绝对不能错 在文件的内容中添加 这里的 bugvipMaster为监控对象起的服务器名称,后面为 IP 端口 1 代表 至少有一个哨兵同意迁移的数量,当然如果起了多个监听主节点服务的程序这里的为了防止票数相同,这里最好配置同意迁移数量配置为 奇数

sentinel monitor bugvipMaster 192.168.1.7 6379 1

下面我们来演示一下 image.png 启动哨兵容器 使用我们刚创建的sentinel的配置文件并挂载日志目录

docker run -d --name sentinel26379 
-v /mydata/redis/conf/sentinel.conf:/conf/sentinel.conf 
-v /mydata/redis/conf/sentinel/log:/var/log/sentinel 
--network host redis redis-sentinel /conf/sentinel.conf

使用 docker logs sentinel26379 查看日志信息

image.png 可以看到成功启动并且可以看到两个从服务器的信息,下面我们来模拟 主服务挂掉场景 将6370服务停下来

docker stop redis

继续查看日志发现 6370 下线后主机 选举出了新的 主节点信息 6380服务当然这个选举也可以使用 slave-priority 100 ,来影响 值越小优先级越高 image.png 在6381服务上可以看到 他还是从服务器 主服务器是6380

image.png 即使我们6379 服务重新上线他也只能是从服务器

image.png

复制延迟

由于所有的写操作都是在Master上操作,然后同步更新到Slave上,所以Master同步到Slave机器上有一定的延迟,当系统繁忙时这个现象会更明显,从节点数据增加也会是这个问题更加严重。

springboot中使用也很简单

在配置文件中加上

spring:
  redis:
    sentinel:
      master: bugvipMaster
      nodes: 192.168.1.7:26379

这里 贴一个报错信息这里报错是因为基于docker 配置的这里返回的是docker内部地址

org.springframework.data.redis.RedisConnectionFailureException: 
Unable to connect to Redis; nested exception is io.lettuce.core.RedisConnectionException: Unable to connect to 172.17.0.1:6380

这个错误有两种解决方式

  • 配置文件中 slave-announce-ip 设置IP地址
  • 或者容器启动时 加上 --net=host 设置号IP地址

我们再次将主服务器停掉 程序访问也没有问题 3680称为主服务 即使 6379 再起来也只能时从服务

image.png 程序测试 访问一切正常 image.png 实践是检验真理的唯一准则,感兴趣的可以去试试呀!明天见咯 😃😃😃😃