Redis 哨兵机制及配置实现

 更新时间:2022年03月25日 15:53:46   作者:蹲在角落数蚂蚁  
本文主要介绍了Redis 哨兵机制及配置实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

一、为什么 Redis 集群中要有哨兵机制

Redis 主从复制有一个缺点,当 master 宕机以后,整个集群的写就会挂掉。因为 redis 本身是不会自动从 slave 中选举出新的 master 的。

我们理想的情况是:当 master 挂掉之后,可以有 slave 迅速补上,自动切换为 master,不影响整个服务。

基于此,引入了 Redis Sentinel(Redis 哨兵机制)。

它能够在 master 挂掉之后,自动从 多台 slave 中选举出 新的 master,迅速开始工作,省去了人工切换的麻烦,实现了 redis 的高可用。

二、模拟主机挂掉之后,人工切换

1、环境介绍

这里有四台 redis,分别的 ip 是:

master:172.10.0.2
 
slave1:172.10.0.3
slave2:172.10.0.4
slave3:172.10.0.5

2、将原来的 master 挂掉

通过 netstat -anp|grep 6379 命令找到 master 的 pid,然后 kill 掉。

去几个 slave 中查询 info replication,会发现,master 的状态已经是 down

3、人工将一个 slave 选举成为新的 master

选择 slave2 成为 新的 master:

(1)去 slave2 客户端执行 slave no one命令

该命令会将 slave2 和原来的 master 的主从关系断掉,重新使自己成为 master(当然,这个 master 下没有一个 slave )

(2)到其他两个 slave 执行 slaveof 172.10.0.4 6379 或配置slaveof

注意 requirepass、masterauth、bind 的配置,并重启、重新加载配置文件,否则可能会不生效。

虽然人工方式也可以实现切换,但难免会碰到

‘到底选举哪一个为 master’, 
‘如果再断了又要重新配置’,
‘如果有其他事情耽误了,没来得及配置,会有很长一段时间无法提供服务’等问题,

因此,哨兵机制就变得十分有必要。

三、哨兵机制的原理

Redis Sentinel 是一个分布式架构,其中包含若干个 Sentinel 节点和 Redis 数据节点,每个 Sentinel 节点会对数据节点和其余 Sentinel 节点进行监控,当它发现节点不可达时,会对节点做下线标识。

哨兵集合监控redis主从是否正常运行。

如果挂掉的是从节点,则哨兵集合会将这个从节点做下线标识;

如果挂掉的是主节点,则哨兵集合不仅会对主节点做下线标识,而且还会所有哨兵进行"协商”,选举出新的主节点,来完成自动故障转移工作。原来的主节点恢复正常后,会变成新的主节点的从节点。

整个过程完全是自动的,不需要人工接入。

四、哨兵机制的实现

1、创建三个redis-sentinel,构成一个哨兵集合

docker run -itd --name  redis-sentinel-1 --privileged  --net haveyb-network  -p 6384:6379  --ip 172.10.0.6  docker-test
 
docker run -itd --name  redis-sentinel-2 --privileged  --net haveyb-network  -p 6385:6379  --ip 172.10.0.7  docker-test
 
docker run -itd --name  redis-sentinel-3 --privileged  --net haveyb-network  -p 6386:6379  --ip 172.10.0.8  docker-test

注:--net haveyb-network为指定自定义网络

2、使用 docker ps -a 命令查看当前创建的容器

3、分别进入新建的三个 sentinel 的每一个容器

docker exec -it redis-sentinel-3 bash

4、修改 net.core.somaxconn的值

vi /etc/sysctl.conf 

(1)添加下面一行代码:

net.core.somaxconn = 32768

(2)加载

sysctl -p

5、修改 redis.conf

vi /etc/redis.conf

(1)修改参数 bind 127.0.0.1 为 0.0.0.0

bind 0.0.0.0

(2)设置 redis 密码

requirepass YourPasswordSettings

(3)加载配置文件

redis-server /etc/redis.conf &

6、修改新建的三台 redis-sentinel 的 redis-sentinel.conf

vi /etc/redis-sentinel.conf

(1)修改 # bind 127.0.0.1 192.168.1.1 为 bind 0.0.0.0

bind 0.0.0.0

(2)删除这一行代码

sentinel monitor mymaster 127.0.0.1 6379 2

这一行代码是redis默认给的(没有注释掉的),我们后面自己配置,所以直接删除掉,也会避免之后由于顺序造成的问题。

(3)添加下面代码

sentinel monitor mymaster 172.10.0.2 6379 2
 
sentinel auth-pass mymaster yourPasswordSettings
 
sentinel down-after-milliseconds mymaster 3000

解释:

第一行代码:

监控的主节点的名字(可以任意起,这里就起为 master)、IP 和端口,最后一个 2 的意思是有几台 Sentinel 发现有问题,就执行故障转移。一般这个数字设置为 Sentinel 节点数的一半加1。

不过这里建议把名字就起为 mymaster(默认的就是这个),因为如果起成别的名字,还需要对应改好几处地方。

第二行代码:

是填写连接的master的名字和密码,这里名字就用的默认的mymaster,密码要填写master的密码,我这里都设置成一样的了。

第三行代码

是设置每隔多长时间进行心跳检测,这里设置成3秒

7、分别在三台新建的redis-sentinel加载哨兵配置文件

redis-sentinel /etc/redis-sentinel.conf &

8、验证是否配置成功

如果出现下图类似内容,则说明配置哨兵成功

注:移除某个哨兵对master的监控,在哨兵中执行命令

sentinel remove mastername

到此这篇关于Redis 哨兵机制及配置实现的文章就介绍到这了,更多相关Redis 哨兵机制内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解Redis中Lua脚本的应用和实践

    详解Redis中Lua脚本的应用和实践

    这篇文章主要介绍了详解Redis中Lua脚本的应用和实践,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-01-01
  • 详解Redis SCAN命令实现有限保证的原理

    详解Redis SCAN命令实现有限保证的原理

    这篇文章主要介绍了Redis SCAN命令实现有限保证的原理,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值 ,需要的朋友可以参考下
    2019-07-07
  • Redis实现接口防抖的示例代码

    Redis实现接口防抖的示例代码

    本文介绍了一种通过AOP、自定义注解和Redis实现的接口防抖技术,这种方法能有效避免因网络波动等原因短时间内发送多个请求导致的数据重复添加问题,感兴趣的可以了解一下
    2024-10-10
  • Redis Template实现分布式锁的实例代码

    Redis Template实现分布式锁的实例代码

    使用Redis的SETNX命令获取分布式锁的步骤,接下来通过本文给大家介绍Redis Template实现分布式锁的实例代码,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2018-09-09
  • Redis和Lua实现分布式限流器的方法详解

    Redis和Lua实现分布式限流器的方法详解

    这篇文章主要给大家介绍了关于Redis和Lua实现分布式限流器的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Redis和Lua具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-06-06
  • 使用JMeter插件Redis Data Set如何实现高性能数据驱动测试

    使用JMeter插件Redis Data Set如何实现高性能数据驱动测试

    RedisDataSet插件是JMeter的一个插件,可以实现从Redis中动态加载数据,并将其用作测试参数,本文详细介绍如何在JMeter中使用RedisDataSet插件,帮助你实现高效的数据驱动测试
    2025-01-01
  • 详解Redis中key的命名规范和值的命名规范

    详解Redis中key的命名规范和值的命名规范

    这篇文章主要介绍了详解Redis中key的命名规范和值的命名规范,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • 详解如何使用Redis作为高效缓存

    详解如何使用Redis作为高效缓存

    Redis是一个高性能的 内存存储系统,通常被用作 缓存 来加速数据访问,提高应用的吞吐量和响应速度,本文详细讲解如何使用 Redis 作为高效缓存,包括基本原理、常见模式、最佳实践以及优化技巧,需要的朋友可以参考下
    2025-01-01
  • Redis热点Key问题分析与解决方案

    Redis热点Key问题分析与解决方案

    文章主要介绍了Redis热点Key的概念、危害、产生原因以及如何检测和解决热点Key问题,热点Key会导致Redis节点负载过高、集群负载不均、性能下降、数据不一致和缓存击穿等问题,解决热点Key问题的方法包括数据分片、读写分离、缓存预热、限流和熔断降级
    2025-01-01
  • 浅谈Redis高并发缓存架构性能优化实战

    浅谈Redis高并发缓存架构性能优化实战

    本文主要介绍了浅谈Redis高并发缓存架构性能优化实战,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-05-05

最新评论