【2023】Redis哨兵模式集群

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
日志服务 SLS,月写入数据量 50GB 1个月
简介: 【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入门与实战



相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
5月前
|
存储 缓存 NoSQL
Redis常见面试题(二):redis分布式锁、redisson、主从一致性、Redlock红锁;Redis集群、主从复制,哨兵模式,分片集群;Redis为什么这么快,I/O多路复用模型
redis分布式锁、redisson、可重入、主从一致性、WatchDog、Redlock红锁、zookeeper;Redis集群、主从复制,全量同步、增量同步;哨兵,分片集群,Redis为什么这么快,I/O多路复用模型——用户空间和内核空间、阻塞IO、非阻塞IO、IO多路复用,Redis网络模型
Redis常见面试题(二):redis分布式锁、redisson、主从一致性、Redlock红锁;Redis集群、主从复制,哨兵模式,分片集群;Redis为什么这么快,I/O多路复用模型
|
5月前
|
监控 NoSQL Redis
Redis 哨兵模式高可用
Redis 哨兵模式高可用
91 4
|
21天前
|
存储 NoSQL Redis
redis主从集群与分片集群的区别
主从集群通过主节点处理写操作并向从节点广播读操作,从节点处理读操作并复制主节点数据,优点在于提高读取性能、数据冗余及故障转移。分片集群则将数据分散存储于多节点,根据规则路由请求,优势在于横向扩展能力强,提升读写性能与存储容量,增强系统可用性和容错性。主从适用于简单场景,分片适合大规模高性能需求。
34 5
|
4月前
|
监控 NoSQL Redis
看完这篇就能弄懂Redis的集群的原理了
看完这篇就能弄懂Redis的集群的原理了
164 0
|
2月前
|
存储 NoSQL 大数据
大数据-51 Redis 高可用方案CAP-AP 主从复制 一主一从 全量和增量同步 哨兵模式 docker-compose测试
大数据-51 Redis 高可用方案CAP-AP 主从复制 一主一从 全量和增量同步 哨兵模式 docker-compose测试
45 3
|
3月前
|
NoSQL 网络协议 Redis
Redis的主从复制和哨兵模式
本文详细介绍了Redis的主从复制配置、原理(包括全量复制和增量复制)以及如何搭建一主二从的Redis集群,同时还探讨了Redis哨兵模式的概念、配置文件、以及如何配置一主二从三哨兵的Redis哨兵模式,以实现高可用性。
|
4月前
|
监控 NoSQL 算法
深入理解Redis哨兵模式原理
该文章讨论了Redis Sentinel模式的原理及其在Redis高可用性中的角色。
深入理解Redis哨兵模式原理
|
5月前
|
存储 NoSQL 算法
Redis 集群模式搭建
Redis 集群模式搭建
104 5
|
4月前
|
NoSQL Redis
Redis——单机迁移cluster集群如何快速迁移
Redis——单机迁移cluster集群如何快速迁移
154 0