php中文网最新课程

每日17点准时技术干货分享

本篇文章给大家带来的内容是介绍Redis的哨兵机制,让大家了解哨兵机制的原理和如何实现。有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

概述

Redis的复制有一个缺点,当主机 Master 宕机以后,我们需要人工解决切换,比如使用slaveof no one 。实际上主从复制并没有实现,高可用, 高可用侧重备份机器, 利用集群中系统的冗余,当系统中某台机器发生损坏的时候,其他后备的机器可以迅速的接替它来启动服务。

主从复制的问题

一旦主节点宕机,写服务无法使用,就需要手动去切换,重新选取主节点,手动设置主从关系。

那么如何解决呢?如果我们有一个监控程序能够监控各个机器的状态及时作出调整,将手动的操作变成自动的。Sentinel的出现就是为了解决这个问题。

哨兵机制的原理及实现

Redis Sentinel

Redis Sentinel 是一个分布式架构,其中包含若干个 Sentinel 节点和 Redis 数据节点,每个 Sentinel 节点会对数据节点和其余 Sentinel 节点进行监控,当它发现节点不可达时,会对节点做下线标识。

如果被标识的是主节点,它还会和其他 Sentinel 节点进行“协商”,当大多数 Sentinel 节点都认为主节点不可达时,它们会选举出一个 Sentinel 节点来完成自动故障转移的工作,同时会将这个变化实时通知给 Redis 应用方。

整个过程完全是自动的,不需要人工来介入,所以这套方案很有效地解决了 Redis 的高可用问题。

如图所示:

基本的故障转移流程

1)主节点出现故障,此时两个从节点与主节点失去连接,主从复制失败。

2)每个 Sentinel 节点通过定期监控发现主节点出现了故障

3)多个 Sentinel 节点对主节点的故障达成一致会选举出其中一个节点作为领导者负责故障转移。

4)Sentinel 领导者节点执行了故障转移,整个过程基本是跟我们手动调整一致的,只不过是自动化完成的。

5)故障转移后整个 Redis Sentinel 的结构,重新选举了新的主节点。

实例

使用docker创建如下redis容器

redis-sentinel1    172.10.0.9    22530 -> 22530    sentinel

redis-sentinel2    172.10.0.10    22531 -> 6379    sentinel

redis-sentinel3    172.10.0.11    22532 -> 6379    sentinel

redis-master2    172.10.0.5    6383  -> 6379    Master

redis-slave2    172.10.0.6    6384  -> 6379    Slave

redis-slave3    172.10.0.7    6385  -> 6379    Slave

配置

Sentinel 的核心配置

sentinel monitor mymaster 127.0.0.1 7000 2

监控的主节点的名字、IP 和端口,最后一个2的意思是有几台 Sentinel 发现有问题,就会发生故障转移,例如 配置为2,代表至少有2个 Sentinel 节点认为主节点不可达,那么这个不可达的判定才是客观的。对于设置的越小,那么达到下线的条件越宽松,反之越严格。一般建议将其设置为 Sentinel 节点的一半加1。

sentinel down-after-millseconds mymaster 30000

这个是超时的时间(单位为毫秒)。打个比方,当你去 ping 一个机器的时候,多长时间后仍 ping 不通,那么就认为它是有问题。

sentinel parallel-syncs mymaster 1

当 Sentinel 节点集合对主节点故障判定达成一致时,Sentinel 领导者节点会做故障转移操作,选出新的主节点,原来的从节点会向新的主节点发起复制操作,parallel-syncs 就是用来限制在一次故障转移之后,每次向新的主节点发起复制操作的从节点个数,指出 Sentinel 属于并发还是串行。1代表每次只能复制一个,可以减轻 Master 的压力。

sentinel auth-pass

如果 Sentinel 监控的主节点配置了密码,sentinel auth-pass 配置通过添加主节点的密码,防止 Sentinel 节点对主节点无法监控。

sentinel failover-timeout mymaster 180000

表示故障转移的时间。

技巧

1)Sentinel 节点不应该部署在一台物理“机器”上。

这里特意强调物理机是因为一台物理机做成了若干虚拟机或者现今比较流行的容器,它们虽然有不同的 IP 地址,但实际上它们都是同一台物理机,同一台物理机意味着如果这台机器有什么硬件故障,所有的虚拟机都会受到影响;

为了实现 Sentinel 节点集合真正的高可用,请勿将 Sentinel 节点部署在同一台物理机器上。

2)部署至少三个且奇数个的 Sentinel 节点。

3个以上是通过增加 Sentinel 节点的个数提高对于故障判定的准确性,因为领导者选举需要至少一半加1个节点,奇数个节点可以在满足该条件的基础上节省一个节点。

-END-

声明:本文选自「 php中文网 」,搜索「 phpcnnew 」即可关注!

redis 哨兵_Redis哨兵机制的原理介绍相关推荐

  1. redis 哨兵_Redis哨兵的配置和原理

    哨兵 在一个典型的一主多从的Redis系统中,当主数据库遇到异常中断服务后,需要手动选择一个从数据库升级为主数据库,整个过程需要人工介入,难以自动化. Redis2.8提供了哨兵2.0(2.6提供了1 ...

  2. python redis 哨兵_Redis哨兵机制

    概述 上篇文章主要说了Redis 复制的内容,但 Redis 复制有一个缺点,当主机 Master 宕机以后,我们需要人工解决切换,比如使用slaveof no one .实际上主从复制并没有实现,高 ...

  3. redis 一般启动几个 哨兵_redis哨兵机制讲解

    原文链接:https://blog.csdn.net/yswKnight/article/details/78158540 一.什么是哨兵机制? 答:Redis的哨兵(sentinel) 系统用于管理 ...

  4. redis 哨兵_Redis哨兵配置

    更多精彩推荐,请关注我们 # Example sentinel.conf # 哨兵sentinel实例运行的端口 默认26379port 26379 # 哨兵sentinel的工作目录dir /tmp ...

  5. 为什么至少三个哨兵_Redis哨兵的详解

    1 哨兵的作用 哨兵是redis集群架构中非常重要的一个组件,主要功能如下: 集群监控:负责监控redis master和slave进程是否正常工作 消息通知:如果某个redis实例有故障,那么哨兵负 ...

  6. Redis实现分布式锁机制的原理

    Redis中实现分布式锁机制 加锁 使用setnx(商品ID,1): 返回0,代表redis里面有数据,即数据已经加锁: 返回1,代表redis里面没有数据,即可以获得锁. 解锁 使用redis的de ...

  7. 淘宝自然搜索机制排名原理介绍,如何做好店铺商品自然搜索排名?

    淘宝平台对于店铺商品的整体的自然搜索的排名机制是什么,影响搜索排名的因素有哪些?因为淘宝排序原则处理简单的销量排序,现在还增加视频排序,接下来就跟大家分享一下,店铺商品应该有个什么样的状态下排名才会比 ...

  8. Redis的内存回收机制和数据过期淘汰策略

    本文来说下Redis的内存回收机制和数据过期淘汰策略 文章目录 概述 为什么需要内存回收 过期删除策略 定时删除 惰性删除 定期删除 删除策略比对 过期删除策略原理 redisDb结构体定义 expi ...

  9. redis哨兵模式原理_Redis哨兵原理,我忍你很久了

    [51CTO.com原创稿件]Redis 主从复制的作用中有这么一句话"主从复制是高可用的基石",那什么是高可用呢?高可用就是减少系统不能提供的时间,也就是常听到的以 6 个 9 ...

最新文章

  1. 配置zendframework开始工作(加入环境变量)
  2. java的datatype_java数据类型
  3. CentOS下安装JDK的三种方法
  4. 就是你把所有代码全写在一个类里的?
  5. ZOJ - 3961 Let's Chat
  6. mysql查询结果单位换算后小数位数的保留方式
  7. 如何跑通第一个 DataStream 作业?
  8. html文本框自动赋值,js给文本框赋值 value与innerHTML
  9. java gc日志乱码_gc原理以及gc日志剖析
  10. 1.UITextField使用详解
  11. Kuma是什么? Kuma1.0 GA 发布了包含70+新特性和改进
  12. WebIM Vue Demo 使用文档
  13. python计算bmi_Python BMI 计算
  14. 【Python发展】pandas和koalas
  15. 微信小程序云函数操作云数据库Mysql
  16. 虾皮shopee跨境电商靠谱吗
  17. Android 11 内置原生壁纸!速度来取
  18. 干货 | “深耕内容”背景下,携程如何做景酒优质内容的挖掘
  19. java-net-php-python-java国内热映电影影评网站计算机毕业设计程序
  20. javascript设计模式-命令模式(command pattern)

热门文章

  1. 使用 Canvas 生成公众号头图
  2. css动画-模拟正余弦曲线
  3. Azure IoT Hub和Event Hub相关的技术系列-索引篇
  4. vs.net2003无法打开.NET的Web应用服务
  5. 洛谷 2719 搞笑世界杯
  6. java.lang.IllegalStateException: Connection pool shut down
  7. python的字符串内建函数
  8. (八)cmockery中的calculator和run_tests函数的注释代码
  9. h5启动原生APP总结
  10. 随机生成六位不重复数值