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获取某个前缀的key脚本实例

    Redis获取某个前缀的key脚本实例

    这篇文章主要给大家介绍了关于Redis获取某个前缀的key脚本的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Redis具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2018-04-04
  • Linux快速部署Redis

    Linux快速部署Redis

    这篇文章介绍了Linux下快速部署Redis的方法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-01-01
  • 分布式爬虫处理Redis里的数据操作步骤

    分布式爬虫处理Redis里的数据操作步骤

    这篇文章主要介绍了分布式爬虫处理Redis里的数据操作步骤,数据分别存入mongodb和mysql数据库,具体内容详情及实例代码大家参考下本文
    2018-03-03
  • Redis如何实现数据库读写分离详解

    Redis如何实现数据库读写分离详解

    Redis的主从架构,能帮助我们实现读多,写少的情况,下面这篇文章主要给大家介绍了关于Redis如何实现数据库读写分离的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧。
    2018-03-03
  • Redis实现消息的发布订阅原理分析

    Redis实现消息的发布订阅原理分析

    本文主要介绍了Redis实现消息的发布订阅原理分析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • RediSearch加RedisJSON大于Elasticsearch的搜索存储引擎

    RediSearch加RedisJSON大于Elasticsearch的搜索存储引擎

    这篇文章主要为大家介绍了RediSearch加RedisJSON大于Elasticsearch的王炸使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • Redis数据库的使用场景介绍(避免误用Redis)

    Redis数据库的使用场景介绍(避免误用Redis)

    这篇文章主要介绍了Redis数据库的使用场景介绍(避免误用Redis),本文用简要的语言总结了Redis数据库的适应场合,人而避免错误的使用它而产生昂贵的维护代价,需要的朋友可以参考下
    2015-03-03
  • Redis禁用命令、危险命令及规避方法

    Redis禁用命令、危险命令及规避方法

    这篇文章主要介绍了Redis禁用命令、危险命令及规避方法,本文介绍了个非常致命的两个命令以及用配置文件禁用这些命令的方法,需要的朋友可以参考下
    2015-06-06
  • Redisson 框架中的分布式锁实现方法

    Redisson 框架中的分布式锁实现方法

    这篇文章主要介绍了Redisson 框架中的分布式锁,实现分布式锁通常有三种方式:数据库、Redis 和 Zookeeper,我们比较常用的是通过 Redis 和 Zookeeper 实现分布式锁,需要的朋友可以参考下
    2024-03-03
  • Redis BloomFilter实例讲解

    Redis BloomFilter实例讲解

    这篇文章主要介绍了Redis BloomFilter实例。BloomFilter不需要存储key,节省空间,在某些对保密要求非常严格的场合有优势。想要进一步了解BloomFilter运用实例的小伙伴可以了解一下这篇文章
    2021-09-09

最新评论