IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> redis哨兵模式 -> 正文阅读

[大数据]redis哨兵模式

3.哨兵模式

3.1 哨兵简介

3.1.1 哨兵概念

首先我们来看一个业务场景:如果redis的master宕机了,此时应该怎么办?

?

?

那此时我们可能需要从一堆的slave中重新选举出一个新的master,那这个操作过程是什么样的呢?这里面会有什么问题出现呢?

?

要实现这些功能,我们就需要redis的哨兵,那哨兵是什么呢?

哨兵

哨兵(sentinel) 是一个分布式系统,用于对主从结构中的每台服务器进行监控,当出现故障时通过投票机制选择新的master并将所有slave连接到新的master。

?

3.1.2 哨兵作用

哨兵的作用:

  • 监控:监控master和slave

    不断的检查master和slave是否正常运行

    master存活检测、master与slave运行情况检测

  • 通知(提醒):当被监控的服务器出现问题时,向其他(哨兵间,客户端)发送通知

  • 自动故障转移:断开master与slave连接,选取一个slave作为master,将其他slave连接新的master,并告知客户端新的服务器地址

注意:哨兵也是一台redis服务器,只是不提供数据相关服务,通常哨兵的数量配置为单数

3.2 启用哨兵

配置哨兵

  • 配置一拖二的主从结构(利用之前的方式启动即可)

  • 配置三个哨兵(配置相同,端口不同),参看sentinel.conf

首先进入我们的redis目录,前面的主从复制,我们用的是redis.conf配置文件,现在我们就要用哨兵配置文件了,就是sentinel.conf?

我们进来看下这个配置文件,里面有一些注释,我们通过linux命令筛选掉?

1:设置哨兵监听的主服务器信息, sentinel_number表示参与投票的哨兵数量

sentinel monitor master_name  master_host   master_port  sentinel_number

2:设置判定服务器宕机时长,该设置控制是否进行主从切换

sentinel down-after-milliseconds master_name    million_seconds

3:设置故障切换的最大超时时

sentinel failover-timeout master_name   million_seconds

4:设置主从切换后,同时进行数据同步的slave数量,数值越大,要求网络资源越高,数值越小,同步时间越长

sentinel parallel-syncs master_name sync_slave_number
  • 启动哨兵

redis-sentinel filename

接下来我们继续操作:

首先先把主从结构启动起来:

?上面是主机启动好了,至于剩下的两个从机,换一下配置文件名就行,也启动起来

接下来启动哨兵:

?上述是启动了哨兵1,下来哨兵2和3也是同样的方式启动

接下来我们就看看哨兵的功能了:

我们先利用客户端连接上主和从的服务:

?

?接下来我们在主里放数据:

?接着看从里有没有数据,发现是有的

?接着我们连接哨兵的客户端:

?注意:这里的ping命令之后,返回pong,这是因为之前在配置文件里设置了监听的主机,所以这个pong是被监听的master发过来的,再看下能不能提供数据服务,发现是不行的

?

我们可以输入info,查看信息:

王最后这个哨兵信息看,可以看到名称是在配置文件中自定义的,状态OK,地址是这个,然后master有两个slave,它有3个哨兵

?

下来我们就尝试性的做我们哨兵的功能:

即当我们的主掉了以后,我们的从是否能变成新的master

我们首先到master的服务里停掉服务,这里就直接Ctrl C了,至于企业级怎么关掉服务,我们可以去连接到master机器去关闭,或者连接master机器的客户端去关闭,去查下资料就行

?

接下来我们看哨兵:

看一下,这是我们哨兵启动的时候,显示的信息

那么刚才我们把master服务给关闭了,而且我们在哨兵的配置里是5秒以后启动,那么等待5秒后,我们再看一下哨兵的服务界面:

可以分析一下这个信息:

下面的+sdown 说明6401下机了,+new-epoch代表开始选举,+odown再次确认6401还是没有连上,下面的话是选举的内容,switch 6401 6402代表将master由6401变更为6402,后面就是给6402连接上6403的从,6401的从,然后又进行了+sdown将6401挂载为6402的从,但是现在6401还没有连接上,+sdown表示没有连接上

?

?那么我们这时把6401给再次启动一下:

那我们再回哨兵1看一下变化:

看到-sdown说明6401上来了?

?那我们不要嫌麻烦,我们再去slave1和master的客户端,info一下,看下是不是slave1变成了master:

?

?

到这里我们就把哨兵的整个执行过程就看完了,其实非常的简单,咱们要做的事情就是在主从的基础上,把哨兵的配置给配上启动起来然后就没了

3.3 哨兵工作原理

哨兵在进行主从切换过程中经历三个阶段

  • 监控

  • 通知

  • 故障转移

3.3.1 监控

用于同步各个节点的状态信息

?

?

  • 获取各个sentinel的状态(是否在线)

  • 获取master的状态

master属性
    prunid
    prole:master
各个slave的详细信息    
  • 获取所有slave的状态(根据master中的slave信息)

slave属性
    prunid
    prole:slave
    pmaster_host、master_port
    poffset

其内部的工作原理具体如下:

?

3.3.2 通知

sentinel在通知阶段要不断的去获取master/slave的信息,然后在各个sentinel之间进行共享,具体的流程如下:

?

?

3.3.3 故障转移

当master宕机后sentinel是如何知晓并判断出master是真的宕机了呢?我们来看具体的操作流程

?

?

当sentinel认定master下线之后,此时需要决定更换master,那这件事由哪个sentinel来做呢?这时候sentinel之间要进行选举,如下图所示:

?

在选举的时候每一个人手里都有一票,而每一个人的又都想当这个处理事故的人,那怎么办?大家就开始抢,于是每个人都会发出一个指令,在内网里边告诉大家我要当选举人,比如说现在的sentinel1和sentinel4发出这个选举指令了,那么sentinel2既能接到sentinel1的也能接到sentinel4的,接到了他们的申请以后呢,sentinel2他就会把他的一票投给其中一方,投给谁呢?谁先过来我投给谁,假设sentinel1先过来,所以这个票就给到了sentinel1。那么给过去以后呢,现在sentinel1就拿到了一票,按照这样的一种形式,最终会有一个选举结果。对应的选举最终得票多的,那自然就成为了处理事故的人。需要注意在这个过程中有可能会存在失败的现象,就是一轮选举完没有选取,那就会接着进行第二轮第三轮直到完成选举。

接下来就是由选举胜出的sentinel去从slave中选一个新的master出来的工作,这个流程是什么样的呢?

首先它有一个在服务器列表中挑选备选master的原则

  • 不在线的OUT

  • 响应慢的OUT

  • 与原master断开时间久的OUT

  • 优先原则

    优先级 offset runid

选出新的master之后,发送指令( sentinel )给其他的slave:

  • 向新的master发送slaveof no one

  • 向其他slave发送slaveof 新masterIP端口

总结:故障转移阶段

  1. 发现问题,主观下线与客观下线

  2. 竞选负责人

  3. 优选新master

  4. 新master上任,其他slave切换master,原master作为slave故障恢复后连接

?

?

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-11-27 09:57:56  更:2021-11-27 09:58:38 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 7:19:48-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码