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

一.哨兵模式的概述:
  哨兵是一个独立的进程,作为一个进程,他会独立地运行。使用一个或者多个哨兵(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. 基于GO语言的PBFT共识算法

    最近采用GO语言实现了一个PBFT共识算法的demo,主要用于展示算法的核心逻辑 github地址:https://github.com/w3liu/consensus/tree/master/pbf ...

  2. PHP 的扩展类型及安装方式

    扩展类型 底层扩展(基于C语言): PECL 上层扩展(基于PHP 语言): PEAR Composer PECL # 查找扩展 $ pecl search extname # 安装扩展 $ pecl ...

  3. @RestController和@Controller的关系

    @RestController注解,相当于@Controller+@ResponseBody两个注解的结合

  4. 第10组 Beta冲刺 (3/5)(组长)

    1.1基本情况 ·队名:今晚不睡觉 ·组长博客:https://www.cnblogs.com/cpandbb/p/14018630.html ·作业博客:https://edu.cnblogs.co ...

  5. springboot打包第三方jar包是失败

    在项目开发时有时我们需要引入一些在maven仓库中不存在的包 一.配置maven环境变量 在path环境变量中添加 %maven_home%\bin (window10环境下) cmd界面输入 mvn ...

  6. 求n以内最大的k个素数以及它们的和

    本题要求计算并输出不超过n的最大的k个素数以及它们的和. 输入格式: 输入在一行中给出n(10≤n≤10000)和k(1≤k≤10)的值. 输出格式: 在一行中按下列格式输出: 素数1+素数2+-+素 ...

  7. 《剑指offer》面试题26. 树的子结构

    问题描述 输入两棵二叉树A和B,判断B是不是A的子结构.(约定空树不是任意一个树的子结构) B是A的子结构, 即 A中有出现和B相同的结构和节点值. 例如: 给定的树 A:      3     / ...

  8. 创建app子应用,配置数据库,编写模型,进行数据迁移

    文章目录 web开发django模型 1.创建app子应用 2.配置子应用 3.使用 4.配置子应用管理自已的路由 django数据库开发思维与ORM 1.创建数据库 2.配置数据库 3.安装pymy ...

  9. X-Y问题(X-Y problem)

    X-Y Problem 什么是X-Y problem呢? 某人想要解决问题X 他认为Y可能是解决X问题的方法 但是他不知道Y怎么做 于是他去问别人Y应该怎么做 这就产生了一个X-Y problem 也 ...

  10. Windows系统安装和office版本兼容

    MSDN, I tell you 下载windows10系统各种纯净镜像.但是还是推荐使用官网修改参数显示出下载链接,下载windows10最新版. 在最近几次重做系统中,PE工具似乎无法识别从MSD ...