| |
|
开发:
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 哨兵作用 哨兵的作用:
注意:哨兵也是一台redis服务器,只是不提供数据相关服务,通常哨兵的数量配置为单数 3.2 启用哨兵配置哨兵
首先进入我们的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 监控 用于同步各个节点的状态信息 ? ?
master属性 prunid prole: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的原则
选出新的master之后,发送指令( sentinel )给其他的slave:
总结:故障转移阶段
? ? |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |