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

一.哨兵模式的概述:
  哨兵是一个独立的进程,作为一个进程,他会独立地运行。使用一个或者多个哨兵(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基础寒假作业-简易计算器

    需求: 使用Java编写计算器的控制台程序,完成简单的加减乘除运算.实现以下功能: 1.运算选择 请用户选择一个算法(1.加法 2.减法 3.乘法 4.除法 5.关闭计算器) 2.计算 a)加法:实现 ...

  2. Java得到当前时间并格式化输出

    代码: SimpleDateFormat sdf = new SimpleDateFormat();// 格式化时间 sdf.applyPattern("yyyy-MM-dd HH:mm:s ...

  3. Struts2中通过Ajax传递json数据

    1.导入Struts2所需要的jar包 下载Struts2的jar包时,可以下载struts-2.5.13-min-lib.zip,然后放到项目的/WebContent/WEB-INF/lib路径下s ...

  4. 4 - 基于ELK的ElasticSearch 7.8.x技术整理 - 高级篇( 续 ) - 更新完毕

    0.前言 这里面一些理论和前面的知识点挂钩的,所以:建议看一下另外3篇知识内容 基础篇:https://www.cnblogs.com/xiegongzi/p/15684307.html java操作 ...

  5. strict weak ordering导致公司级故障

    大家好,我是雨乐! 前段时间,某个同事找我倾诉,说是因为strict weak ordering导致程序coredump,给公司造成数百万损失,最终评级故障为P0级,年终奖都有点不保了,听完不禁一阵唏 ...

  6. mysql数据库忘记root密码怎么办?

    mysql数据库忘记root密码怎么破解和修改 1.停止数据库的运行 [root@localhost ~]# /etc/init.d/mysqld stop 或者[root@localhost ~]# ...

  7. Linux驱动实践:中断处理函数如何【发送信号】给应用层?

    作 者:道哥,10+年嵌入式开发老兵,专注于:C/C++.嵌入式.Linux. 关注下方公众号,回复[书籍],获取 Linux.嵌入式领域经典书籍:回复[PDF],获取所有原创文章( PDF 格式). ...

  8. git 那些事儿 —— 基于 Learn Git Branching

    前言 推荐一个 git 图形化教学网站:Learn Git Branching,这个网站有一个沙盒可以直接在上面模拟 git 的各种操作,操作效果使用图形的方式展示,非常直观.本文可以看作是它的文字版 ...

  9. test_4 实现一个统计函数运行时间

    1.datetime显示当前时间 import datetimeimport timedef func(): t = datetime.datetime.now() print t print &qu ...

  10. orleans集群及负载均衡实现

    netcore6项目,微服务框架选orleans ,国内似乎没什么项目在用,坑多无资料.orleans文档可以解决几乎,只能看官方资料. Introduction | Microsoft Orlean ...