Redis Sentinel

Redis哨兵为Redis提供高可用。这就意味着你用哨兵可以创建一个Redis部署,在没有人为干预的情况下抵抗某些失败。(PS:自动故障转移)

Redis哨兵还提供其他的附件任务,比如监控,通知,以及作为客户端的配置提供者。

  • Monitoring(监视) : 哨兵会不断地检查master和slave实例是否按照预期的那样工作
  • Notification(通知) : 哨兵可以通过API的方式来通知管理员(另一台计算机程序),告诉它其中一个被监视的Redis实例出了问题
  • Automatic failover(自动故障转移) : 如果一个master没有如期望的那样工作,哨兵可以开始一个故障转移处理,处理的结果时一个slave被提升为master,其余的slave将用这个新master重新配置,使用这个Redis服务器的应用程序会被通知在连接时使用新的地址。
  • Configuration provider(配置提供者) : 哨兵充当客户端服务发现的权威来源:为了对给定的服务请求作出响应,客户端连接到哨兵以获得当前master的地址。如果发生故障转移,前哨将报告新地址。

哨兵的分布式特性

Redis哨兵是一个分布式系统:

哨兵自身被设计为在一个配置中运行,其中有多个Sentinel进程协同工作。

多个哨兵进程协同工作的优势在于:

  1. 当多个哨兵都同意且一致认为给定的master不可用时才会执行失败检测。这降低了误报的概率
  2. 即使不是所有哨兵进程都正常工作(PS:个别哨兵不能正常工作)的情况下,仍然会使得系统对故障有较强的抵抗力。

获得哨兵

当前版本的哨兵被叫做“Sentinel 2”。它是用更强大和更简单的预测算法重写最初的Sentinel实现。

运行哨兵

redis-sentinel /path/to/sentinel.conf

或者

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

这两种方式是一样的

当运行哨兵时,必须使用一个配置文件,因为系统将会使用这个文件来保存当前状态,以便在重启的时候开业重新加载。如果没有提供配置文件,或者配置文件路径不可写,哨兵将拒绝启动。

默认情况下,哨兵会监听TCP端口26379,因此,为了让哨兵正常工作,服务器的26379端口必须是开放的,以便可以接收到来自其它哨兵实例的IP的连接。否则,哨兵就不能说话,也不能同意,故障转移也永远不会执行。(PS:意思是,哨兵之间用26379端口进行通信,如果不开放这个端口,其它哨兵就无法与它通信,它也不同同意其它哨兵)

部署哨兵之前要了解的基本知识:

1、对于一个健壮的部署,你需要至少3个哨兵实例

2、这三个哨兵应该被放置到相对独立的计算机或者虚拟机上(PS:独立失败,意思是一个失败了对其它的没用影响)

3、Sentinel + Redis分布式系统不能保证在故障期间已经确认的写操作被保留,因为Redis使用异步复制。

4、你的Redis客户端需要支持哨兵

5、如果你在开发环境(甚至是生产环境)没用经过一次又一次严格的测试,那么没用任何HA是安全的。可能你有一个错误的配置,但是一时半会儿看不出什么问题来,有可能过来很久以后这个错误配置导致的问题才会变得明显起来。(PS:意思是,上线前要严格测试,因为你的生产环境上并不是只有redis,有可能其它的隐患因素,比如防火墙什么的。。。)

6、哨兵、Docker,或者其它NAT或端口映射,这些混在一起要特别小心

配置哨兵

配置文件 sentinel.conf

一个典型的,最小最简洁的配置如下:

sentinel monitor mymaster 127.0.0.1
sentinel down-after-milliseconds mymaster
sentinel failover-timeout mymaster
sentinel parallel-syncs mymaster sentinel monitor resque 192.168.1.3
sentinel down-after-milliseconds resque
sentinel failover-timeout resque
sentinel parallel-syncs resque

你只需要指定要监视的masters,并且给它们(PS:指的是被监视的master)每一个(也许它们有许多slaves)指定一个唯一的名称。不需要指定slaves,哨兵会自动发现它们。哨兵将自动更新配置,向配置文件中添加一些关于slaves的信息(为了在重启的时候保留这些信息)。每次故障转移期间一个slave被提升为master,以及每次发现一个新的哨兵时,都会重写配置文件。

上面的配置示例中,监视两组Redis实例,每一组的都由一个master和未知数量的slaves。一个实例叫mymaster,另一个叫resque。

sentinel monitor 语句的格式如下:

sentinel monitor <master-group-name> <ip> <port> <quorum>

第一行是用来告诉Redis监视一个叫“mymaster”的master,它的地址是127.0.0.1,端口是6379,法定人数是2。

关于 quorum 参数:

1、quorum 是一个数字,代表需要有多少个哨兵同意给定的master不可达这个事实,为了真正标记这个slave失败,并且如果可能的话最终启动一个故障转移

2、quorum 只用于检测失败。为了真的执行一个故障转移,其中一个哨兵需要被选举成为leader,然后由这个leader来执行故障转移。而且,只有在哨兵中的大多数参与投票选举才算是有效

如果你有5个哨兵,对于给定master的法定人数是2,那么将会发生:

1、如果两个哨兵都同意并且一致认为master不可访问,那么其中一个将尝试启动一个故障转移

2、如果至少有3个哨兵正常工作且相互可以正常通信,那么故障转移将会被授权,并真正开始执行

也就是说,如果哨兵中的大多数相互之间都无法通信,那么故障转移便从来都不会发生。

(画外音:上面这段话的意思是,只有当至少有法定人数个哨兵认为某个master不可到达的时候,才会尝试启动故障转移,但是最后是否真的执行要看本次投票是否有效,只有当大多数哨兵正常工作时投票才算有效。

也就是说要执行故障转移有两个条件:第一、大多数的哨兵工作正常;第二、至少法定人数个哨兵一致认为master不可访问)

其它哨兵选项

其它的选项大多数都是这样的格式:

sentinel <option_name> <master_name> <option_value>

1、down-after-milliseconds 参数是一个毫秒时间,表示多少毫秒没有回复则认为下线(要么是没有收到ping回复,要么是回复错误)

2、parallel-syncs 参数表示在一个故障转移后新的master需要配置的slave数量。这个数值越小,故障转移完成的所需的时间越长。如果将从服务器配置为服务旧数据,您可能不希望所有从服务器同时与主服务器重新同步。对于slave来说,复制过程基本上不是阻塞的,但有时它会停止从master装载大量数据。通过将此选项设置为1,可以确保一次只能访问一个slave。

哨兵部署示例

参考

https://redis.io/topics/sentinel

其它相关

Redis集群

Redis哨兵的更多相关文章

  1. Redis 哨兵模式实现主从故障互切换

    200 ? "200px" : this.width)!important;} --> 介绍 Redis Sentinel 是一个分布式系统, 你可以在一个架构中运行多个 S ...

  2. redis哨兵配置

    redis哨兵配置主从   redis哨兵的启动和redis实例的启动没有关系.所以可以在任何机器上启动redis哨兵.至少要保证有两个哨兵在运行,要不然宕机后哨兵会找不到主节点. 配置步骤: 1.在 ...

  3. redis哨兵配置主从

    redis哨兵的启动和redis实例的启动没有关系.所以可以在任何机器上启动redis哨兵.至少要保证有两个哨兵在运行,要不然宕机后哨兵会找不到主节点. 配置步骤: 1.在redis的配置文件中添加鉴 ...

  4. redis单点、redis主从、redis哨兵sentinel,redis集群cluster配置搭建与使用

    目录 redis单点.redis主从.redis哨兵 sentinel,redis集群cluster配置搭建与使用 1 .redis 安装及配置 1.1 redis 单点 1.1.2 在命令窗口操作r ...

  5. redis哨兵架构的基础知识及部署和管理

    一.前言 1.哨兵的介绍 sentinal,中文名是哨兵 哨兵是redis集群架构中非常重要的一个组件,主要功能如下 ()集群监控,负责监控redis master和slave进程是否正常工作 ()消 ...

  6. Redis 哨兵

    作用 Redis Sentinel,即Redis哨兵,在Redis 2.8版本开始引入. 主要提供了配置提供者,通知,哨兵的监控和自动故障转移功能.哨兵的核心功能是主节点的自动故障转移. 下面是Red ...

  7. SpringBoot整合redis哨兵主从服务

    前提环境: 主从配置 http://www.cnblogs.com/zwcry/p/9046207.html 哨兵配置 https://www.cnblogs.com/zwcry/p/9134721. ...

  8. redis 哨兵模式 Connection refused

    spring整合redis哨兵,修改了bind ,protected 任然连接拒绝,是因为哨兵的mastername 和spring里面的名称不一致..导致拒绝了...... 哨兵模式配置文件 属性  ...

  9. redis 哨兵(sentinel)

    redis哨兵 哨兵自动故障转移 自动通知应用最新master信息 无需担心,master挂了,程序不需要修改IP啥的,由哨兵自动完成 修改sentinel.conf protected-mode n ...

随机推荐

  1. SparkStreaming

    Spark Streaming用于流式数据的处理.Spark Streaming支持的数据输入源很多,例如:Kafka.Flume.Twitter.ZeroMQ和简单的TCP套接字等等.数据输入后可以 ...

  2. navigator的一些冷知识

    { 监听屏幕旋转变化接口: orientationchange orientation.angle : 0 竖屏 , 90 向左横屏 , -90/270 向右横屏 , 180 倒屏 } screenO ...

  3. MyBatis3系列__06查询的几点补充

    关于查询的一点补充: 当查询部门信息时,希望查询该部门下的所有员工,下面会采取两种方式实现: 1.联合查询 public Department getDeptWithEmpById(Integer i ...

  4. VMware Workstation安装Red hat7.0联网问题总结

    1.在red hat7当中iconfig命令是被取消了的,开发者用ip addr命令取代了ifconfig命令. 当然也是可以用ifconfig命令的 (前提是你安装的linux是可以联网的): 1) ...

  5. SpringBoot加Poi仿照EasyPoi实现Excel导出

    POI提供API给Java程序对Microsoft Office格式档案读和写的功能,详细功能可以直接查阅API,因为使用EasyPoi过程中总是缺少依赖,没有搞明白到底是什么坑,索性自己写一个简单工 ...

  6. go 可变参数

    go 在参数列表中使用 ... 表示可变参数,例如: import "fmt" func Minimum(first int, others ...int) int { min : ...

  7. tyflow车撞墙测试

  8. SpringMvc 中的实用工具类介绍(包括 ResponseEntity、 RestTemplate、WebUtils 等)

    此部分内容将包含 ResponseEntity. RestTemplate.WebUtils 等 1. ResponseEntity ① Sprring Mvc 中作为方法的返回值使用法 @Reque ...

  9. js中的cookie

    cookie就是一个存放数据的东西,存储量很小4kb,存放在客户端上和应用设备上. 应用场景 用户注册,用户登录,购物车. Chrome浏览器在计算机中存放cookie的位置 C:\Users\Adm ...

  10. 使用poi读取Excel文件数据

    package com.haiyisoft.iecp.util; import java.io.File;import java.io.FileInputStream;import java.io.F ...