Redis Sentinel哨兵集群架构模式原理(上)

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: Redis Sentinel哨兵集群架构模式原理

1 Redis Sentinel的意义

Redis主从集群架构的升级版。

  • master宕机了咋整?等运维手工从主切换,再通知所有程序把地址统统改一遍重新上线?那么服务就会停滞很久,显然对于大型系统这是灾难性的!

所以必须有高可用方案,当故障发生时可自动从主切换,程序也不用重启,不必手动运维。Redis 官方就提供了这样一种方案 —— Redis Sentinel(哨兵)。


sentinal,哨兵,redis集群架构中非常重要的一个组件,主要功能如下


  • 集群监控
    监控Redis master和slave进程的正常工作
  • 消息通知
    如果某个Redis实例有故障,那么哨兵负责发送报警消息给管理员
  • 故障转移
    若master node宕机,会自动转移到slave node上
  • 配置中心
    若发生故障转移,通知client客户端新的master地址


哨兵本身也是分布式,作为一个集群运行:


  • 故障转移时,判断一个master node是否宕机,需要大部分哨兵都同意,涉及分布式选举
  • 即使部分哨兵节点宕机,哨兵集群还是能正常工作


目前采用的是sentinal 2版本,sentinal 2相对于sentinal 1来说,重写了很多代码,主要是让故障转移的机制和算法变得更加健壮和简单


哨兵 + Redis主从的部署架构不保证数据零丢失,只保证redis集群的高可用性。

为何2个节点无法正常工作

必须部署2个以上的节点。若仅部署2个实例,quorum=1

+----+         +----+
| M1 |---------| R1 |
| S1 |         | S2 |
+----+         +----+

Configuration: quorum = 1

master宕机,s1和s2中只要有1个哨兵认为master宕机就可以进行切换,同时会在s1和s2中选举出一个执行故障转移.

但此时,需要majority,也就是大多数哨兵都是运行的,2个哨兵的majority就是2


2个哨兵的majority=2

3个哨兵的majority=2

4个哨兵的majority=2

5个哨兵的majority=3


2个哨兵都运行着,就可以允许执行故障转移

若整个M1和S1运行的机器宕机了,那么哨兵仅剩1个,此时就无majority来允许执行故障转移,虽然另外一台机器还有一个R1,但故障转移不会执行

3节点哨兵集群

       +----+
       | M1 |
       | S1 |
       +----+
          |
+----+    |    +----+
| R2 |----+----| R3 |
| S2 |         | S3 |
+----+         +----+

Configuration: quorum = 2,majority

若M1节点宕机了,还剩下2个哨兵,S2和S3可以一致认为master宕机了,然后选举出一个来执行故障转移

同时3个哨兵的majority是2,所以余存的2个哨兵运行着,就可执行故障转移

2 Redis Sentinel 架构

Redis Sentinel故障转移

  1. 多个sentinel发现并确认master有问题。
  2. 选举出一个sentinel作为领导。
  3. 选出一个slave作为master.
  4. 通知其余slave成为新的master的slave.
  5. 通知客户端主从变化
  6. 等待老的master复活成为新master的slave

1.png

  • 可监控多套

1.png

3 安装与配置

  1. 配置开启主从节点
  2. 配置开启sentinel监控主节点。(sentinel是特殊的redis)
  3. 实际应该多机器
  4. 详细配置节点

image.png

image.png

Redis 主节点

[启动]
redis-server redis- 7000.conf
[配置]
port 7000
daemonize yes
pidfile /var/run/redis-7000.pid
logfile "7000.log"
dir "/opt/soft/redis/data/"

Redis 从节点

[启动]
redis-server redis-7001.conf
redis-server redis-7002.conf
slave-1[配置]
port 7001
daemonize yes
pidfile /var/run/redis-7001.pid
logfile "7001.log"
dir "/opt/soft/redis/data/"
slaveof 127.0.0.1 7000
slave-2[配置]
port 7002
daemonize yes
pidfile /var/run/redis-7002.pid
logfile "7002.log"
dir "/opt/soft/redis/data/"
slaveof 127.0.0.1 7000

Sentinel 主要配置

port $(port)
dir "/opt/soft/redis/data/"
logfile " $(port).log"
sentinel monitor mymaster 127.0.0.1 7000 2
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000

演示

image.png

image.png

  • 主节点配置

image.png

  • 重定向

image.png

1.png

  • 打印检查配置文件
  • 启动

1.jpg

4 客户端

  • 客户端实现基本原理-1

image.png

  • 客户端实现基本原理-2

image.png

  • 客户端实现基本原理-3 验证

image.png

  • 客户端实现基本原理-4 通知(发布订阅))

image.png

1.png

客户端接入流程

  1. Sentinel地址集合
  2. masterName
  3. 不是代理模式
JedisSentinelPool sentinelPool = new JedisSentinelPool(masterName, sentinelSet, poolConfig, timeout);
Jedis jedis = null;
try {
  jedis = redisSentinelPool.getResource();
  //jedis command
} catch (Exception e) {
  logger.error(e.getMessage(), e);
} finally {
  if (jedis != null)
    jedis.close();
}




目录
相关文章
|
3月前
|
存储 监控 算法
园区导航系统技术架构实现与原理解构
本文聚焦园区导航场景中室内外定位精度不足、车辆调度路径规划低效、数据孤岛难以支撑决策等技术痛点,从架构设计到技术原理,对该系统从定位到数据中台进行技术拆解。
107 0
园区导航系统技术架构实现与原理解构
|
4月前
|
存储 消息中间件 canal
zk基础—2.架构原理和使用场景
ZooKeeper(ZK)是一个分布式协调服务,广泛应用于分布式系统中。它提供了分布式锁、元数据管理、Master选举及分布式协调等功能,适用于如Kafka、HDFS、Canal等开源分布式系统。ZK集群采用主从架构,具有顺序一致性、高性能、高可用和高并发等特点。其核心机制包括ZAB协议(保证数据一致性)、Watcher监听回调机制(实现通知功能)、以及基于临时顺序节点的分布式锁实现。ZK适合小规模集群部署,主要用于读多写少的场景。
|
5月前
|
存储 人工智能 自然语言处理
为什么混合专家模型(MoE)如此高效:从架构原理到技术实现全解析
本文深入探讨了混合专家(MoE)架构在大型语言模型中的应用与技术原理。MoE通过稀疏激活机制,在保持模型高效性的同时实现参数规模的大幅扩展,已成为LLM发展的关键趋势。文章分析了MoE的核心组件,包括专家网络与路由机制,并对比了密集与稀疏MoE的特点。同时,详细介绍了Mixtral、Grok、DBRX和DeepSeek等代表性模型的技术特点及创新。MoE不仅解决了传统模型扩展成本高昂的问题,还展现出专业化与适应性强的优势,未来有望推动AI工具更广泛的应用。
1779 4
为什么混合专家模型(MoE)如此高效:从架构原理到技术实现全解析
|
5月前
|
机器学习/深度学习 算法 测试技术
图神经网络在信息检索重排序中的应用:原理、架构与Python代码解析
本文探讨了基于图的重排序方法在信息检索领域的应用与前景。传统两阶段检索架构中,初始检索速度快但结果可能含噪声,重排序阶段通过强大语言模型提升精度,但仍面临复杂需求挑战
137 0
图神经网络在信息检索重排序中的应用:原理、架构与Python代码解析
|
Java UED Sentinel
微服务守护神:Spring Cloud Sentinel,让你的系统在流量洪峰中稳如磐石!
【8月更文挑战第29天】Spring Cloud Sentinel结合了阿里巴巴Sentinel的流控、降级、熔断和热点规则等特性,为微服务架构下的应用提供了一套完整的流量控制解决方案。它能够有效应对突发流量,保护服务稳定性,避免雪崩效应,确保系统在高并发下健康运行。通过简单的配置和注解即可实现高效流量控制,适用于高并发场景、依赖服务不稳定及资源保护等多种情况,显著提升系统健壮性和用户体验。
249 1
|
监控 Java Sentinel
使用Sentinel进行服务调用的熔断和限流管理(SpringCloud2023实战)
Sentinel是面向分布式、多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性。
524 3
|
12月前
|
负载均衡 算法 Java
蚂蚁面试:Nacos、Sentinel了解吗?Springcloud 核心底层原理,你知道多少?
40岁老架构师尼恩分享了关于SpringCloud核心组件的底层原理,特别是针对蚂蚁集团面试中常见的面试题进行了详细解析。内容涵盖了Nacos注册中心的AP/CP模式、Distro和Raft分布式协议、Sentinel的高可用组件、负载均衡组件的实现原理等。尼恩强调了系统化学习的重要性,推荐了《尼恩Java面试宝典PDF》等资料,帮助读者更好地准备面试,提高技术实力,最终实现“offer自由”。更多技术资料和指导,可关注公众号【技术自由圈】获取。
蚂蚁面试:Nacos、Sentinel了解吗?Springcloud 核心底层原理,你知道多少?
|
监控 Java Nacos
SpringCloud基础5——微服务保护、Sentinel
sentinel、雪崩问题、流量控制、隔离和降级、授权规则、规则持久化
SpringCloud基础5——微服务保护、Sentinel
|
监控 Java 应用服务中间件
SpringCloud面试之流量控制组件Sentinel详解
SpringCloud面试之流量控制组件Sentinel详解
753 0

热门文章

最新文章