一、为什么 Redis 集群中要有哨兵机制 Redis 主从复制有一个缺点,当 master 宕机以后,整个集群的写就会挂掉。因为 redis 本身是不会自动从 slave 中选举出新的 master 的。 我们理想的情况
一、为什么 Redis 集群中要有哨兵机制Redis 主从复制有一个缺点,当 master 宕机以后,整个集群的写就会挂掉。因为 redis 本身是不会自动从 slave 中选举出新的 master 的。 我们理想的情况是:当 master 挂掉之后,可以有 slave 迅速补上,自动切换为 master,不影响整个服务。 基于此,引入了 Redis Sentinel(Redis 哨兵机制)。 它能够在 master 挂掉之后,自动从 多台 slave 中选举出 新的 master,迅速开始工作,省去了人工切换的麻烦,实现了 redis 的高可用。 二、模拟主机挂掉之后,人工切换1、环境介绍 这里有四台 redis,分别的 ip 是:
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 的配置,并重启、重新加载配置文件,否则可能会不生效。 虽然人工方式也可以实现切换,但难免会碰到
因此,哨兵机制就变得十分有必要。 三、哨兵机制的原理Redis Sentinel 是一个分布式架构,其中包含若干个 Sentinel 节点和 Redis 数据节点,每个 Sentinel 节点会对数据节点和其余 Sentinel 节点进行监控,当它发现节点不可达时,会对节点做下线标识。 哨兵集合监控redis主从是否正常运行。 如果挂掉的是从节点,则哨兵集合会将这个从节点做下线标识; 如果挂掉的是主节点,则哨兵集合不仅会对主节点做下线标识,而且还会所有哨兵进行"协商”,选举出新的主节点,来完成自动故障转移工作。原来的主节点恢复正常后,会变成新的主节点的从节点。 整个过程完全是自动的,不需要人工接入。 四、哨兵机制的实现1、创建三个redis-sentinel,构成一个哨兵集合
注:--net haveyb-network为指定自定义网络 2、使用 docker ps -a 命令查看当前创建的容器 3、分别进入新建的三个 sentinel 的每一个容器
4、修改 net.core.somaxconn的值
(1)添加下面一行代码:
(2)加载
5、修改 redis.conf
(1)修改参数 bind 127.0.0.1 为 0.0.0.0
(2)设置 redis 密码
(3)加载配置文件
6、修改新建的三台 redis-sentinel 的 redis-sentinel.conf
(1)修改 # bind 127.0.0.1 192.168.1.1 为 bind 0.0.0.0
(2)删除这一行代码
这一行代码是redis默认给的(没有注释掉的),我们后面自己配置,所以直接删除掉,也会避免之后由于顺序造成的问题。 (3)添加下面代码
解释: 第一行代码: 监控的主节点的名字(可以任意起,这里就起为 master)、IP 和端口,最后一个 2 的意思是有几台 Sentinel 发现有问题,就执行故障转移。一般这个数字设置为 Sentinel 节点数的一半加1。 不过这里建议把名字就起为 mymaster(默认的就是这个),因为如果起成别的名字,还需要对应改好几处地方。 第二行代码: 是填写连接的master的名字和密码,这里名字就用的默认的mymaster,密码要填写master的密码,我这里都设置成一样的了。 第三行代码 是设置每隔多长时间进行心跳检测,这里设置成3秒 7、分别在三台新建的redis-sentinel加载哨兵配置文件
8、验证是否配置成功 如果出现下图类似内容,则说明配置哨兵成功 注:移除某个哨兵对master的监控,在哨兵中执行命令
|
2021-04-08
2021-10-03
2021-07-26
2019-10-11
2022-08-27