主从切换技术的方法是:当主服务器宕机了,需要手动将一台从服务器切换为主服务器,这就需要人工干预,这可能会造成一段时间的服务不可用。

一.哨兵模式的概述:
  哨兵是一个独立的进程,作为一个进程,他会独立地运行。使用一个或者多个哨兵(sentinel)实例构成的系统可以对Redis节点进行监控,在主节点出现故障的情况下,能将从节点中的一个升级为主节点,进行故障转移,保证数据的一致性。

      

首先来配置一个主从分离:

一、配置Master

1、修改端口

port 6379

  redis 的默认端口是6379

2、修改pidfile

pidfile /var/run/redis_6379.pid

  pidfile 是我们启动redis 的时候,linux 为我们分配的一个pid 进程号,如果这里不作修改,会影响后面redis服务的启动

3、启动 redis

启动redis,我们可以看到,redis已经占领了6379端口

进入客户端

有密码的话需要>auth password 输入密码

我们可以看到,redis现在的角色是一个master启动的服务。并且默认没有连接从库。

二、配置Slave

  和上面配置 master一样,我们需要修改端口号和pid 文件,在修改完之后,我们有两种方法配置从服务

1、在配置文件中配置从服务

# slaveof<masterip> <masterport>

slaveof 10.129.28.149 6379

  我们可以在配置文件中直接修改 slaveof 属性,我们直接配置主服务器的ip 地址,和端口号,如果这里主服务器有配置密码

  可以通过配置masterauth 来设置链接密码

# masterauth<master-password>

Master auth redis007 

启动redis 服务

我们可以看到,现在有两个现在在运行,我们进入7000的客户端,看一下他的状态info,

我们可以看到,现在的redis 是一个从服务的角色,连接着6379的服务。

2、在服务启动后配置

启动7001服务

进入客户端,查看当前服务器的状态并修改:

10.192.28.149:7001> slaveof127.0.0.16379

3、总结

我们先看一下目前master 的状态:

我们可以可以看到,两个从服务已经在连着主服务器,上面两种配置的区别在于,当salve 断线重连之后,

   如果我们是修改类配置文件,重连之后会自己链接上去master,并且同步master 上面的数据,

   如果我们是手动连接上去的主服务器,重连之后,从服务器会读取自己本地的 rdb 回复数据,而不会去自动链接主服

我们如果需要设置读写分离,只需要在主服务器中设置:

slave-read-only yes

三、Sentinel 哨兵

1、配置端口

    在sentinel.conf 配置文件中, 我们可以找到port 属性,这里是用来设置sentinel 的端口,一般情况下,至少会需要三个哨兵对redis 进行监控,我们可以通过修改端口启动多个sentinel 服务。

port 26379

2、配置主服务器的ip 和端口

   我们把监听的端口修改成6379,并且加上权值为2,这里的权值,是用来计算我们需要将哪一台服务器升级升主服务器,如果redis实例有密码的话需要加上auth-pass项,否则连接会报失败。

sentinel monitor mymaster 10.129.28.149 6379 2
sentinel auth-pass mymaster redis007

3、启动Sentinel

当我们把其中一个从服务器slave-7001关闭之后,我们可以看到日志显示+sdownslave;

我们再把slave-7001接回去,日志显示+rebootslave 和 –sdown slave。

4、关闭Master

    我们手动关闭Master 之后,sentinel在监听master 确实是断线了之后,将会开始计算权值,然后重新分配主服务器

我们可以看到,6379主服务器断了之后,sentinel 帮我们选了7001作为新的主服务器

我们进到7001的客户端,查看他的状态:

我们再进入sentinel的客户端看下:

此时7001已经由slave荣升为master了。

5、重连Master

  大家可能会好奇,如果master 重连之后,他会恢复master的身份吗,答案是并不会,而是会成为新的master的slave。因此当master 回来之后,他也只能当个小弟 

我们看下重新连接以后的6379状态:

再看下sentinel中日志:


四、哨兵们是怎么感知整个系统中的所有节点(主节点/从节点/哨兵节点)的
1.首先主节点的信息是配置在哨兵(Sentinel)的配置文件sentinel.conf中,配置 sentinel monitor <master-name> <ip> <redis-port> <quorum>,详见Redis sentinel.conf配置文件详解
2.哨兵节点会和配置的主节点建立起两条连接命令连接和订阅连接
3.哨兵会通过命令连接每10s发送一次INFO命令,通过INFO命令,主节点会返回自己的run_id和自己的从节点信息
4.哨兵会对这些从节点也建立两条连接命令连接和订阅连接
5.哨兵通过命令连接向从节点发送INFO命令,获取到他的一些信息
a. run_id
b. role
c. 从服务器的复制偏移量 offset 五、哨兵模式下的故障迁移:
1.每个Sentinel以每秒钟一次的频率向它所知的Master,Slave以及其他Sentinel实例发送一个PING命令
2.如果一个实例(instance)距离最后一次有效回复 PING 命令的时间超过 down-after-milliseconds 选项所指定的值,则这个实例会被 Sentinel 标记为主观下线。
3.如果一个Master被标记为主观下线,则正在监视这个Master的所有 Sentinel 要以每秒一次的频率确认Master的确进入了主观下线状态。
4.当有足够数量的 Sentinel(大于等于配置文件指定的值)在指定的时间范围内确认Master的确进入了主观下线状态, 则Master会被标记为客观下线
5.在一般情况下, 每个 Sentinel 会以每10 秒一次的频率向它已知的所有Master,Slave发送 INFO 命令,当Master被 Sentinel 标记为客观下线时,Sentinel 向下线的 Master 的所有 Slave 发送 INFO 命令的频率会从 10 秒一次改为每秒一次
6.若没有足够数量的 Sentinel 同意Master 已经下线, Master 的客观下线状态就会被移除。 若 Master 重新向 Sentinel 的 PING 命令返回有效回复, Master 的主观下线状态就会被移除。

原文链接:https://blog.csdn.net/yaooch/article/details/80167571
原文链接:https://www.jianshu.com/p/d6d2325a5ec7

Redis 哨兵模式的更多相关文章

  1. Redis哨兵模式主从同步不可以绑定127.0.0.1或者0.0.0.0,不然无法进行主从同步

    Redis哨兵模式主从同步不可以绑定127.0.0.1或者0.0.0.0,不然无法进行主从同步,一定要绑定内网IP,而对于跨机房的问题,可以使用iptables进行nat转发来解决.

  2. Redis哨兵模式大key优化

    目前,Redis哨兵模式,内存资源有限,有很多key大于500M,性能待优化.需要迁移至Redis-cluster集群中.        涉及到的key如下: 0,hash,duser_record, ...

  3. Springboot2.x集成Redis哨兵模式

    Springboot2.x集成Redis哨兵模式 说明 Redis哨兵模式是Redis高可用方案的一种实现方式,通过哨兵来自动实现故障转移,从而保证高可用. 准备条件 pom.xml中引入相关jar ...

  4. Spring Boot 入门(十):集成Redis哨兵模式,实现Mybatis二级缓存

    本片文章续<Spring Boot 入门(九):集成Quartz定时任务>.本文主要基于redis实现了mybatis二级缓存.较redis缓存,mybaits自带缓存存在缺点(自行谷歌) ...

  5. [Redis] Redis哨兵模式部署 - zz胖的博客

    1. 部署Redis集群 redis的安装及配置参考[redis部署] 本文以创建一主二从的集群为例. 1.1 部署与配置 先创建sentinel目录,在该目录下创建8000,8001,8002三个以 ...

  6. Redis 哨兵模式(Sentinel)

    上一篇我们介绍了 redis 主从节点之间的数据同步复制技术,通过一次全量复制和不间断的命令传播,可以达到主从节点数据同步备份的效果,一旦主节点宕机,我们可以选择一个工作正常的 slave 成为新的主 ...

  7. 搭建redis哨兵模式

    搭建redis哨兵模式,一主两从三哨兵   1.从官网下载redis安装包:此处是redis-5.0.7.tar.gz 2.上传到目录 /utxt/soft 3.解压 4.cd /utxt/soft/ ...

  8. Redis哨兵模式的配置

    绪论 现有三台设备,192.168.137.11.192.168.137.12和192.168.137.13,要求在三台设备上实现redis哨兵模式,其中192.168.137.11为master,其 ...

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

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

  10. Redis哨兵模式

    Redis-Sentinel redis的哨兵模式 Redis Sentinel 模式简介 Redis-Sentinel是官方推荐的高可用解决方案,当redis在做master-slave的高可用方案 ...

随机推荐

  1. 编写Java程序,使用抽象类和抽象方法构建不同动物的扑食行为,抽象类设计

    返回本章节 返回作业目录 需求说明: 不同的动物都有进食的行为,但是在进食前需要捕获到食物后才可以进食. 要求定义一个抽象的动物类,该类中有一个抽象的捕食方法,和一个非抽象的进食方法.在进食方法中调用 ...

  2. C# .net 使用rabbitmq消息队列——EasyNetQ插件介绍

    EasyNetQ 是一个简洁而适用的RabbitMQ .NET类库,本质上是一个在RabbitMQ.Client之上提供服务的组件集合.

  3. Linux-saltstack-2 saltstack的基本使用

    @ 目录 一.salt命令的基本使用 1.基本语法 例子: 2.salt的常用参数 (1)-S(大写):通过IP或者是网段匹配被管理主机 (2)-E:通过正则匹配主机 (3)-L: 匹配多个主机 (4 ...

  4. Python常用功能函数系列总结(二)

     本节目录 常用函数一:sel文件转换 常用函数二:refwork文件转换 常用函数三:xml文档解析 常用函数四:文本分词 常用函数一:sel文件转换 sel是种特殊的文件格式,具体应用场景的话可以 ...

  5. POJ3090Visible Lattice Points

    http://poj.org/problem?id=3090 对于此题,观测点的数目,从小规模开始观察,可以得到每一个点,由一根无限长的绳子,绕着原点旋转,得到的第一个点.换另外一个思路,每一个观察到 ...

  6. markdown mermaid状态图

    状态图 状态图是一种用于计算机科学和相关领域描述系统行为的图.状态图要求描述的系统由有限数量的状态组成. 语法: stateDiagram-v2 [*] --> Still Still --&g ...

  7. Android函数抽取壳的实现

    0x0 前言 函数抽取壳这个词不知道从哪起源的,但我理解的函数抽取壳是那种将dex文件中的函数代码给nop,然后在运行时再把字节码给填回dex的这么一种壳. 函数抽取前: 函数抽取后: 很早之前就想写 ...

  8. Android官方文档翻译 十六 4.Managing the Activity Lifecycle

    Managing the Activity Lifecycle 管理activity的生命周期 Dependencies and prerequisites 依赖关系和先决条件 How to crea ...

  9. C 库函数 - pow()

    1.C 标准库 - <math.h> 2.C 库函数 double pow(double x, double y) 返回 x 的 y 次幂,即 xy. 3.pow() 函数的声明. dou ...

  10. 解决nRF Connect for PC无法连接网络的问题(非FQ)

    各位小伙伴是不是也遇到过国内不能正常使用nRF Connect的问题,现在教大家一个十分有效的办法. 1.找到nrf connect的脚本配置文件"apps.json",默认在&q ...