第十章:Redis Sentinel 哨兵机制

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: Redis Sentinel为Redis提供高可用性。实际上,这意味着使用Sentinel可以创建一个Redis部署,在没有人为干预的情况下抵抗某些类型的故障。

Redis Sentinel为Redis提供高可用性。实际上,这意味着使用Sentinel可以创建一个Redis部署,在没有人为干预的情况下抵抗某些类型的故障。

1. 故障转移步骤

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

2. 为什么要用哨兵

Redis Sentinel是一个分布式系统:

Sentinel本身被设计成运行在多个Sentinel进程合作的配置中。具有多个Sentinel进程协作的优势如下:

  1. 当多个Sentinels同意给定的主控器不再可用时,执行故障检测。这降低了误报的可能性。
    即使不是所有的Sentinel进程都在工作,Sentinel也能正常工作,从而使系统对故障有效。毕竟,拥有一个本身就是单点故障的故障切换系统是没有意义的。
  2. Sentinel,Redis实例(主服务器和从服务器)以及连接到Sentinel和Redis的客户端的总和也是具有特定属性的更大的分布式系统。在这篇文档中,概念将从为了理解Sentinel的基本属性所需的基本信息,到更复杂的信息(这些是可选的),逐步引入,以便理解Sentinel的工作原理。

3. 快速开始

3.1 配置哨兵

分别配置sentinel.confsentinel-26380.conf

port 26379
protected-mode no
sentinel monitor mymaster 47.xx.xxx.xxx 6379 2    # 127.0.0.1 一定要改成服务器 ip
sentinel auth-pass mymaster root++...   #如果mamaster节点有密码,则需要设置这项
sentinel down-after-milliseconds mymaster 60000
sentinel failover-timeout mymaster 180000
sentinel parallel-syncs mymaster 1


port 26380
sentinel monitor myslave 47.xx.xxx.xxx 6380 4  
sentinel auth-pass myslave root++...   #如果mamaster节点有密码,则需要设置这项
sentinel down-after-milliseconds myslave 10000
sentinel failover-timeout myslave 180000
sentinel parallel-syncs myslave 5

3.2 运行哨兵

两种方法:

  1. redis-sentinel /path/to/sentinel.conf
  2. redis-server /path/to/sentinel.conf --sentinel

3.3 测试

mymaster启动
[root@FantJ redis-4.0.9]# redis-sentinel sentinel.conf &
[1] 17859
[root@FantJ redis-4.0.9]# 17859:X 07 Sep 16:44:10.344 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
17859:X 07 Sep 16:44:10.344 # Redis version=4.0.9, bits=64, commit=00000000, modified=0, pid=17859, just started
17859:X 07 Sep 16:44:10.344 # Configuration loaded
                _._                                                  
           _.-``__ ''-._                                             
      _.-``    `.  `_.  ''-._           Redis 4.0.9 (00000000/0) 64 bit
  .-`` .-```.  ```\/    _.,_ ''-._                                   
 (    '      ,       .-`  | `,    )     Running in sentinel mode
 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 26379
 |    `-._   `._    /     _.-'    |     PID: 17859
  `-._    `-._  `-./  _.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |           http://redis.io        
  `-._    `-._`-.__.-'_.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |                                  
  `-._    `-._`-.__.-'_.-'    _.-'                                   
      `-._    `-.__.-'    _.-'                                       
          `-._        _.-'                                           
              `-.__.-'                                               

17859:X 07 Sep 16:44:10.346 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
17859:X 07 Sep 16:44:10.346 # Sentinel ID is e61d1d9c3a7441d2376cb98399fa9dd479076eef
17859:X 07 Sep 16:44:10.346 # +monitor master mymaster xxx.xx.xx.xx  6379 quorum 2
myslave启动
[root@FantJ sentinel]# redis-sentinel sentinel-26380.conf &
[2] 17873
[root@FantJ sentinel]# 17873:X 07 Sep 16:46:11.401 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
17873:X 07 Sep 16:46:11.401 # Redis version=4.0.9, bits=64, commit=00000000, modified=0, pid=17873, just started
17873:X 07 Sep 16:46:11.401 # Configuration loaded
                _._                                                  
           _.-``__ ''-._                                             
      _.-``    `.  `_.  ''-._           Redis 4.0.9 (00000000/0) 64 bit
  .-`` .-```.  ```\/    _.,_ ''-._                                   
 (    '      ,       .-`  | `,    )     Running in sentinel mode
 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 26380
 |    `-._   `._    /     _.-'    |     PID: 17873
  `-._    `-._  `-./  _.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |           http://redis.io        
  `-._    `-._`-.__.-'_.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |                                  
  `-._    `-._`-.__.-'_.-'    _.-'                                   
      `-._    `-.__.-'    _.-'                                       
          `-._        _.-'                                           
              `-.__.-'                                               

17873:X 07 Sep 16:46:11.403 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
17873:X 07 Sep 16:46:11.403 # Sentinel ID is 0f375fb9f45af9c6a5402e88cb9296b24da6f067
17873:X 07 Sep 16:46:11.403 # +monitor master myslave xxxxx 6380 quorum 4
查看26379的sentinel信息:
[root@FantJ sentinel]# redis-cli -p 26379
127.0.0.1:26379> 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=mymaster,status=sdown,address=47.xx.xx.xxx:6379,slaves=0,sentinels=1
相关实践学习
基于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
相关文章
|
26天前
|
存储 缓存 NoSQL
大数据-45 Redis 持久化概念 RDB AOF机制 持久化原因和对比
大数据-45 Redis 持久化概念 RDB AOF机制 持久化原因和对比
35 2
大数据-45 Redis 持久化概念 RDB AOF机制 持久化原因和对比
|
22天前
|
监控 NoSQL 算法
Redis Sentinel(哨兵)详解
Redis Sentinel(哨兵)详解
|
2月前
|
监控 NoSQL Redis
Redis Sentinel:秒杀系统背后的可靠性保障神器!
本文详细介绍了如何在个人项目中利用 Redis 哨兵模式保障系统的可靠性与高可用性。哨兵模式通过监控主从服务器状态、自动故障转移和通知客户端等功能,确保在主服务器宕机时系统仍能正常运行。适用于读请求多于写请求的场景,如秒杀系统,能有效缓解数据库压力。同时也探讨了哨兵模式在高并发场景下的优化方法及潜在缺陷,帮助开发者更好地应用该模式。
60 7
Redis Sentinel:秒杀系统背后的可靠性保障神器!
|
26天前
|
设计模式 NoSQL 网络协议
大数据-48 Redis 通信协议原理RESP 事件处理机制原理 文件事件 时间事件 Reactor多路复用
大数据-48 Redis 通信协议原理RESP 事件处理机制原理 文件事件 时间事件 Reactor多路复用
34 2
|
2月前
|
存储 NoSQL Redis
SpringCloud基础7——Redis分布式缓存,RDB,AOF持久化+主从+哨兵+分片集群
Redis持久化、RDB和AOF方案、Redis主从集群、哨兵、分片集群、散列插槽、自动手动故障转移
SpringCloud基础7——Redis分布式缓存,RDB,AOF持久化+主从+哨兵+分片集群
|
2月前
|
存储 NoSQL Redis
Redis的RDB快照:保障数据持久性的关键机制
Redis的RDB快照:保障数据持久性的关键机制
45 0
|
2月前
|
存储 缓存 NoSQL
深入探究Redis的AOF持久化:保障数据安全与恢复性能的关键机制
深入探究Redis的AOF持久化:保障数据安全与恢复性能的关键机制
79 0
|
3月前
|
运维 监控 NoSQL
【Redis】哨兵(Sentinel)原理与实战全解~炒鸡简单啊
Redis 的哨兵模式(Sentinel)是一种用于实现高可用性的机制。它通过监控主节点和从节点,并在主节点故障时自动进行切换,确保集群持续提供服务。哨兵模式包括主节点、从节点和哨兵实例,具备监控、通知、自动故障转移等功能,能显著提高系统的稳定性和可靠性。本文详细介绍了哨兵模式的组成、功能、工作机制以及其优势和局限性,并提供了单实例的安装和配置步骤,包括系统优化、安装、配置、启停管理和性能监控等。此外,还介绍了如何配置主从复制和哨兵,确保在故障时能够自动切换并恢复服务。
|
3月前
|
Java UED Sentinel
微服务守护神:Spring Cloud Sentinel,让你的系统在流量洪峰中稳如磐石!
【8月更文挑战第29天】Spring Cloud Sentinel结合了阿里巴巴Sentinel的流控、降级、熔断和热点规则等特性,为微服务架构下的应用提供了一套完整的流量控制解决方案。它能够有效应对突发流量,保护服务稳定性,避免雪崩效应,确保系统在高并发下健康运行。通过简单的配置和注解即可实现高效流量控制,适用于高并发场景、依赖服务不稳定及资源保护等多种情况,显著提升系统健壮性和用户体验。
78 1
|
5月前
|
监控 Java Sentinel
使用Sentinel进行服务调用的熔断和限流管理(SpringCloud2023实战)
Sentinel是面向分布式、多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性。
149 3