【2023】Redis哨兵模式集群

简介: 【2023】Redis哨兵模式集群

🎶 哨兵模式

一般来说,哨兵机制会和主从复制模式整合使用,在基于哨兵的模式里会在一台或多台服务器上引入哨兵进程,这些节点也叫哨兵节点。

哨兵节点一般不存储数据,它的作用是监控主从模式里的主服务器节点。当哨兵节点监控的主服务器发生故障时,哨兵节点会主导“故障自动恢复”的流程,具体来讲就是会在该主服务器下属的从服务器里选出一个新的主服务器,并完成相应的数据和配置更改等动作。

也就是说,如果采用这种模式,可以让故障自动修复,从而提升系统的可用性。

优点:

  • 故障自动恢复,提升系统可用性

架构图:

3283f39424024f8189a17c2592d11848.png

🎶 搭建哨兵模式集群

🎶 搭建一主二从复制集群

  • 创建一个master节点
docker run -itd --name redis-master -p 6379:6379 redis:6.0
  • 创建slave1从节点
docker run -itd --name redis-slave1 -p 6380:6380 redis:6.0
  • 查看master节点IP
[root@localhost ~]# docker inspect redis-master | grep IPAddress
            "SecondaryIPAddresses": null,
            "IPAddress": "172.17.0.2",
                    "IPAddress": "172.17.0.2",
  • 进入到slave1容器,配置该容器为从节点
[root@localhost ~]# docker exec -it redis-slave1 /bin/bash
root@2621cce29bc3:/data# redis-cli
127.0.0.1:6379> slaveof 172.17.0.2 6379
OK
  • 创建slave2从节点
docker run -itd --name redis-slave2 -p 6381:6381 redis:6.0 
  • 进入到slave2容器,配置该容器为从节点
[root@localhost ~]# docker exec -it redis-slave2 /bin/bash
root@4f5f4d986465:/data# redis-cli
127.0.0.1:6379> slaveof 172.17.0.2 6379
OK
  • 进入到master节点容器,查看当前集群状态
[root@localhost ~]# docker exec -it redis-master /bin/bash
root@2213b1077230:/data# redis-cli
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=172.17.0.3,port=6379,state=online,offset=420,lag=0
slave1:ip=172.17.0.4,port=6379,state=online,offset=420,lag=0
  • 当前状态为健康

🎶 创建哨兵节点

  • /data/redis/redisConf
    目录里创建sentinel1.conf配置文件
port 16379
sentinel monitor master 172.17.0.2 6379 3
dir /
logfile "sentinel1.log"

以上配置含义:

  • 第一行指定了哨兵工作端口为16379
  • 第二行指定了监控对象,172.17.0.2和6379分别是master节点的IP和端口,3表示需要有3台哨兵节点认可才能认定失败
  • 日志位置
  • 日志名
    ——————
  • 创建第一个哨兵节点
docker run -itd --name redis-sentinel1 -v /data/redis/redisConf/:/redisConfig:rw -p 16379:16379 redis:6.0 redis-sentinel /redisConfig/sentinel1.conf
  • 进入到该容器查看状态
[root@localhost ~]# docker exec -it redis-sentinel1 /bin/bash
root@4387bd97f99c:/data# redis-cli -h 127.0.0.1 -p 16379
127.0.0.1:16379> info sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=master,status=ok,address=172.17.0.2:6379,slaves=2,sentinels=1

可以看出状态为ok,slaves节点为2,表示正常

  • /data/redis/redisConf
    目录里创建sentinel2.conf配置文件
port 16380
sentinel monitor master 172.17.0.2 6379 3
dir /
logfile "sentinel2.log"
  • 创建第二个哨兵节点
 docker run -itd --name redis-sentinel2 -v /data/redis/redisConf/:/redisConfig:rw -p 16380:16380 redis:6.0 redis-sentinel /redisConfig/sentinel2.conf
  • 使用上面的方式创建第三个哨兵节点
port 16381
sentinel monitor master 172.17.0.2 6379 3
dir /
logfile "sentinel3.log"
docker run -itd --name redis-sentinel3 -v /data/redis/redisConf/:/redisConfig:rw -p 16381:16381 redis:6.0 redis-sentinel /redisConfig/sentinel3.conf
  • 进入到哨兵3节点,查看状态
[root@localhost redisConf]# docker exec -it redis-sentinel3 /bin/bash
root@d0e57ea6ddfc:/data# redis-cli -h 127.0.0.1 -p 16381
127.0.0.1:16381> info sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=master,status=ok,address=172.17.0.2:6379,slaves=2,sentinels=3

从上面信息可以看出,状态为ok,从节点为2,哨兵节点为3,集群状态正常,至此完成了哨兵集群模式的搭建

docker启动容器数:

[root@localhost redisConf]# docker ps
CONTAINER ID   IMAGE       COMMAND                   CREATED             STATUS             PORTS                                                     NAMES
d0e57ea6ddfc   redis:6.0   "docker-entrypoint.s…"   3 minutes ago       Up 3 minutes       6379/tcp, 0.0.0.0:16381->16381/tcp, :::16381->16381/tcp   redis-sentinel3
754320f11984   redis:6.0   "docker-entrypoint.s…"   6 minutes ago       Up 6 minutes       6379/tcp, 0.0.0.0:16380->16380/tcp, :::16380->16380/tcp   redis-sentinel2
4387bd97f99c   redis:6.0   "docker-entrypoint.s…"   53 minutes ago      Up 46 minutes      6379/tcp, 0.0.0.0:16379->16379/tcp, :::16379->16379/tcp   redis-sentinel1
4f5f4d986465   redis:6.0   "docker-entrypoint.s…"   About an hour ago   Up About an hour   6379/tcp, 0.0.0.0:6381->6381/tcp, :::6381->6381/tcp       redis-slave2
2621cce29bc3   redis:6.0   "docker-entrypoint.s…"   About an hour ago   Up About an hour   6379/tcp, 0.0.0.0:6380->6380/tcp, :::6380->6380/tcp       redis-slave1
2213b1077230   redis:6.0   "docker-entrypoint.s…"   About an hour ago   Up About an hour   0.0.0.0:6379->6379/tcp, :::6379->6379/tcp                 redis-master

🎶 哨兵节点的其他配置

  • 判断下线时间的阙值
sentinel down-after-milliseconds master 60000

表示60秒内哨兵节点没有收到master服务器的正确响应则认为该服务器已下线

  • 故障恢复时效
sentinel failover-timeout master 180000

进行故障恢复时,如果180秒内还没有完成主从服务器的切换动作,就会认定本次恢复动作失败

🎶 哨兵模式下故障自动恢复效果

  • 模拟redis-master节点故障,关闭该节点
docker stop redis-master
  • 进入到哨兵1节点容器,查看当前集群状态
[root@localhost redisConf]# docker exec -it redis-sentinel1 /bin/bash
root@4387bd97f99c:/data# redis-cli -h 127.0.0.1 -p 16379
127.0.0.1:16379> info sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=master,status=ok,address=172.17.0.4:6379,slaves=2,sentinels=3

此时集群状态正常,但是master ip已经变成172.17.0.4

  • 进入到172.17.0.4代表的redis-slave2容器内查看状态
[root@localhost redisConf]# docker exec -it redis-slave2 /bin/bash
root@4f5f4d986465:/data# redis-cli                     
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:1
slave0:ip=172.17.0.3,port=6379,state=online,offset=454283,lag=1

此时redis-slave2节点已经变更为master节点

🎶 通过日志查看故障恢复过程

进入到哨兵节点内部查看日志cat /sentinel1.log

注意: 当redis-master节点重新启动后,会自动加入集群,但是会以slave身份运行。

此部分内容到此为止,内从总结自基于docker的redis入门与实战



目录
相关文章
|
存储 负载均衡 NoSQL
【赵渝强老师】Redis Cluster分布式集群
Redis Cluster是Redis的分布式存储解决方案,通过哈希槽(slot)实现数据分片,支持水平扩展,具备高可用性和负载均衡能力,适用于大规模数据场景。
836 2
|
存储 NoSQL 数据库
Redis 逻辑数据库与集群模式详解
Redis 是高性能内存键值数据库,广泛用于缓存与实时数据处理。本文深入解析 Redis 逻辑数据库与集群模式:逻辑数据库提供16个独立存储空间,适合小规模隔离;集群模式通过分布式架构支持高并发和大数据量,但仅支持 database 0。文章对比两者特性,讲解配置与实践注意事项,并探讨持久化及性能优化策略,助你根据需求选择最佳方案。
1277 5
|
11月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
1019 6
|
12月前
|
存储 监控 NoSQL
Redis高可用架构全解析:从主从复制到集群方案
Redis高可用确保服务持续稳定,避免单点故障导致数据丢失或业务中断。通过主从复制实现数据冗余,哨兵模式支持自动故障转移,Cluster集群则提供分布式数据分片与水平扩展,三者层层递进,保障读写分离、容灾切换与大规模数据存储,构建高性能、高可靠的Redis架构体系。
|
负载均衡 NoSQL Redis
【赵渝强老师】Redis的主从复制集群
Redis主从复制是指将一台Redis服务器的数据复制到其他Redis服务器,实现数据热备份、故障恢复、负载均衡及高可用架构的基础。主节点负责写操作,从节点同步数据并可提供读服务,提升并发处理能力。
452 5
|
存储 NoSQL 算法
Redis的集群架构与使用经验
本文介绍了Redis的集群架构与使用经验,包括主从复制、哨兵集群及Cluster分片集群的应用场景与实现原理。内容涵盖Redis主从同步机制、数据分片存储方式、事务支持及与Memcached的区别,并讨论了Redis内存用尽时的处理策略。适用于了解Redis高可用与性能优化方案。
|
存储 NoSQL Redis
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 + 无锁架构 + EDA架构 + 异步日志 + 集群架构
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 + 无锁架构 + EDA架构 + 异步日志 + 集群架构
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 +  无锁架构 +  EDA架构  + 异步日志 + 集群架构
|
存储 NoSQL 算法
Redis分片集群中数据是怎么存储和读取的 ?
Redis集群采用的算法是哈希槽分区算法。Redis集群中有16384个哈希槽(槽的范围是 0 -16383,哈希槽),将不同的哈希槽分布在不同的Redis节点上面进行管理,也就是说每个Redis节点只负责一部分的哈希槽。在对数据进行操作的时候,集群会对使用CRC16算法对key进行计算并对16384取模(slot = CRC16(key)%16383),得到的结果就是 Key-Value 所放入的槽,通过这个值,去找到对应的槽所对应的Redis节点,然后直接到这个对应的节点上进行存取操作
|
缓存 NoSQL Redis
Redis原理—3.复制、哨兵和集群
详细介绍了Redis的复制原理、哨兵原理和集群原理。
|
存储 NoSQL Redis
redis主从集群与分片集群的区别
主从集群通过主节点处理写操作并向从节点广播读操作,从节点处理读操作并复制主节点数据,优点在于提高读取性能、数据冗余及故障转移。分片集群则将数据分散存储于多节点,根据规则路由请求,优势在于横向扩展能力强,提升读写性能与存储容量,增强系统可用性和容错性。主从适用于简单场景,分片适合大规模高性能需求。
977 5