Redis(六)主从模式与哨兵机制

news2024/11/26 23:46:39

文章目录

    • 一、主从模式
      • 配置一主二从集群
    • 二、哨兵机制
      • 哨兵模式演示:
      • 哨兵如何监控节点
        • 「主观下线」与[客观下线]
        • 哨兵如何选新主节点
        • 由哪个哨兵进行转移
        • 如何通知客户端新主节点的信息?


一、主从模式

配置一主二从集群

开启三个linux,并安装redis
在这里插入图片描述
info replication查询当前库的信息
在这里插入图片描述
replicaof 192.168.31.238 6379

在这里插入图片描述重启redis服务,重新查看信息
主机:
在这里插入图片描述从机信息
在这里插入图片描述

测试主机写,从机读
主机可读可写,但是多用于写

在这里插入图片描述从机可读不可写
在这里插入图片描述

当主机断电宕机后,默认情况下从机的角色不会发生变化 ,
集群中只是失去了写操作,
当主机恢复以后,又会连接上从机恢复原状。

主机失联
在这里插入图片描述
从机依然可以获取数据
在这里插入图片描述
两个从机的角色并没有发生改变
在这里插入图片描述
默认情况下,主机故障后,不会出现新的主机,有两种方式可以产生新的主机:

  • 我们可以使用slaveof no one让自己变成主机!(暂时的)
    在这里插入图片描述
    另一个从机还是属于之前的主机
    在这里插入图片描述
    如果主机断开了连接,我们可以使用SLAVEOF no one让自己变成主机!其他的节点就可以手动连接到最新的主节点(手动)!如果这个时候老大修复了,那么久重新连接!
  • 哨兵机制

二、哨兵机制

哨兵是Redis的一种工作模式,以监控节点状态及执行故障转移为主要工作,
哨兵总是以固定的频率去发现节点、故障检测,然后在检测到主节点故障时以安全的方式执行故障转移,确保集群的高可用性。
哨兵是一个独立的进程,作为进程,它会独立运行。
其原理是哨兵通过发送命令,等待Redis服务器响应,从而监控运行的多个Redis实例。

在这里插入图片描述
哨兵的作用:

  • 通过发送命令,让Redis服务器返回监控其运行状态,包括主服务器和从服务器。
  • 当哨兵监测到master宕机,会自动将slave切换成master,然后通过发布订阅模式通知其他的从服务器,修改配置文件,让它们切换主机。
    总结下来:哨兵的职责就是:监控、选主、通知

哨兵模式演示:

配置3个哨兵和1主2从的Redis服务器来演示这个过程。

服务类型是否为主服务器IP地址端口
Redis192.168.31.2386379
Redis192.168.31.1306379
Redis192.168.31.1286379
Sentinel192.168.31.23826379
Sentinel192.168.31.13026379
Sentinel192.168.31.12826379

Redis安装目录下有一个sentinel.conf文件,copy一份进行修改
在这里插入图片描述
cp一份
在这里插入图片描述查看是否cp成功find | grep sentinel.conf
在这里插入图片描述
修改redis.conf

#bind 127.0.0.1 -::1  注释掉 # 使得Redis服务器可以跨网络访问
protected-mode no  关闭保护模式
指定主服务器,注意:有关replicaof的配置只是配置从服务器,主服务器不需要配置
replicaof 192.168.31.238 6379

修改sentinel.conf

protected-mode no  禁止保护模式
daemonize yes   开启后台模式
# 配置监听的主服务器,这里sentinel monitor代表监控,
# mymaster代表服务器的名称,
# 192.168.31.238代表监控的主服务器,
# 主服务器的端口6379,
# 2代表只有两个或两个以上的哨兵认为主服务器不可用的时候,才会进failover操作。
sentinel monitor mymaster 192.168.31.238 6379 2
port 26379   端口号
# sentinel auth-pass <master-name> <password> # 如果主机设置密码

启动

[root@heng bin]# redis-server /etc/redis.conf
[root@heng bin]# redis-sentinel /etc/sentinel.conf

查看两个服务是否启动成功
在这里插入图片描述
注意启动的顺序。首先是主机(192.168.11.128)的Redis服务进程,然后启动从机的服务进程,最后启动3个哨兵的服务进程。 查看主服务器信息
在这里插入图片描述查看从服务器信息
在这里插入图片描述
模拟主服务器宕机redis-cli shutdown
在这里插入图片描述
可以看到从机192.168.31.128变成了主机

在这里插入图片描述
在这里插入图片描述
重启192.168.31.238(原主机)发现其变成了从机
在这里插入图片描述

哨兵如何监控节点

哨兵会周期性地给所有主从节点发送PING命令,当主从节点收到PING命令后,会发送一个响应命令给哨兵,这样就可以判断它们是否正常运作。
在这里插入图片描述

「主观下线」与[客观下线]

如果主节点或者从节点没有在规定的时间内响应哨兵的 PING 命令,哨兵就会将它们标记为「主观下线」。这个「规定的时间」是配置项 down-after-milliseconds 参数设定的,单位是毫秒。
因为有可能「主节点」其实并没有故障,可能只是因为主节点的系统压力比较大或者网络发送了拥塞,导致主节点没有在规定时间内响应哨兵的 PING 命令。
为了减少误判的情况,哨兵在部署的时候不会只部署一个节点,而是用多个节点部署成哨兵集群(最少需要三台机器来部署哨兵集群),通过多个哨兵节点一起判断,就可以就可以避免单个哨兵因为自身网络状况不好,而误判主节点下线的情况。同时,多个哨兵的网络同时不稳定的概率较小,由它们一起做决策,误判率也能降低。
在这里插入图片描述

 down-after-milliseconds
 指定哨兵在监控Redis服务时,当Redis服务在一个默认毫秒数内都无法回答时,单个哨兵认为的主观下线时间,默认为30000(30秒)

在这里插入图片描述
当一个哨兵判断主节点为「主观下线」后,就会向其他哨兵发起命令

SENTINEL is-master-down-by-addr <ip> <port> <current-epoch> <runid>

,其他哨兵收到这个命令后,就会根据自身和主节点的网络状况,做出赞成投票或者拒绝投票的响应。

当这个哨兵的赞同票数达到哨兵配置文件中的 quorum 配置项设定的值后,这时主节点就会被该哨兵标记为「客观下线」。
在这里插入图片描述quorum 配置的是 2,那么一个哨兵需要 2 张赞成票,就可以标记主节点为“客观下线”了。这 2 张赞成票包括哨兵自己的一张赞成票和另外两个哨兵的赞成票。

哨兵判断完主节点客观下线后,哨兵就要开始在多个「从节点」中,选出一个从节点来做新主节点。

之所以针对「主节点」设计「主观下线」和「客观下线」两个状态,是因为有可能「主节点」其实并没有故障,可能只是因为主节点的系统压力比较大或者网络发送了拥塞,导致主节点没有在规定时间内响应哨兵的 PING 命令。

哨兵如何选新主节点

  1. 把网络状态不好的从节点给过滤掉。首先把已经下线的从节点过滤掉,然后把以往网络连接状态不好的从节点也给过滤掉。

  2. 根据从节点的优先级来进行排序,优先级越小排名越靠前
    可以通过redis.conf设置节点的优先级 在这里插入图片描述

  3. 如果优先级相等,选择复制进度靠前的从节点
    在这里插入图片描述

  4. 如果两个从节点优先级和复制进度都一样,比较两个从节点的 ID 号,ID 号小的从节点胜出。
    在选举出从节点后,哨兵向被选中的从节点发送SLAVEOF no one 命令,让这个从节点编程新主节点。
    在发送 SLAVEOF no one 命令之后,哨兵 Leader 会以每秒一次的频率向被升级的从节点发送 INFO 命令(没进行故障转移之前,INFO 命令的频率是每 10 秒一次),并观察命令回复中的角色信息。当被升级节点的角色信息从原来的 slave 变为 master 时,哨兵 Leader 就知道被选中的从节点已经顺利升级为主节点了。

由哪个哨兵进行转移

需要在哨兵集群中选出一个 leeder,让 Leader 来执行主从切换。
选举 Leader 的过程其实是一个投票的过程,在投票开始前,肯定得有个「候选者」.
哪个哨兵节点判断主节点为「客观下线」,这个哨兵节点就是候选者,所谓的候选者就是想当 Leader 的哨兵。
候选者会向其他哨兵发送命令,表明希望成为 Leader 来执行主从切换,并让所有其他哨兵对它进行投票。
每个哨兵只有一次投票机会,如果用完后就不能参与投票了,可以投给自己或投给别人,但是只有候选者才能把票投给自己。
那么在投票过程中,任何一个「候选者」,要满足两个条件:

  • 第一,拿到半数以上的赞成票;
  • 第二,拿到的票数同时还需要大于等于哨兵配置文件中的 quorum 值。
    每位候选者都会先给自己投一票,然后向其他哨兵发起投票请求。如果投票者先收到「候选者 A」的投票请求,就会先投票给它,如果投票者用完投票机会后,收到「候选者 B」的投票请求后,就会拒绝投票。这时,候选者 A 先满足了上面的那两个条件,所以「候选者 A」就会被选举为 Leader。

如果哨兵集群中只有 2 个哨兵节点,此时如果一个哨兵想要成功成为 Leader,必须获得 2 票,而不是 1 票。
所以,如果哨兵集群中有个哨兵挂掉了,那么就只剩一个哨兵了,如果这个哨兵想要成为 Leader,这时票数就没办法达到 2 票,就无法成功成为 Leader,这时是无法进行主从节点切换的。

注意:quorum 的值建议设置为哨兵个数的二分之一加1,例如 3 个哨兵就设置 2,5 个哨兵设置为 3,而且哨兵节点的数量应该是奇数。

如何通知客户端新主节点的信息?

通过 Redis 的发布者/订阅者机制来实现
当哨兵把新主节点选择出来后,客户端就会看到下面的 switch-master 事件,这个事件表示主节点已经切换了,新主节点的 IP 地址和端口信息已经有了。这个时候,客户端就可以用这里面的新主节点地址和端口进行通信了。

switch-master <master-name> <master-old-ip> <master-old-port> <master-new-ip> <master-new-port>

查看日志:可以看到主库的地址发生了改变
在这里插入图片描述

 哨兵集群是如何组成的?
 在主从集群中,主节点上有一个名为__sentinel__:hello的频道,不同哨兵就是通过它来相互发现,实现互相通信的。

主节点:
在这里插入图片描述
从节点:
在这里插入图片描述
哨兵 A 把自己的 IP 地址和端口的信息发布到__sentinel__:hello 频道上,哨兵 B 和 C 订阅了该频道。那么此时,哨兵 B 和 C 就可以从这个频道直接获取哨兵 A 的 IP 地址和端口号。

哨兵集群会对「从节点」的运行状态进行监控,那哨兵集群如何知道「从节点」的信息?
主节点知道所有「从节点」的信息,所以哨兵会向主节点发送 INFO 命令来获取所有「从节点」的信息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/585576.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【k8s】【Prometheus】【待写】

环境 k8s v1.18.0 192.168.79.31 master 192.168.79.32 node-1 192.168.79.33 node-2一、Prometheus 对 kubernetes 的监控 1.1 node-exporter 组件安装和配置 node-exporter 可以采集机器&#xff08;物理机、虚拟机、云主机等&#xff09;的监控指标数据&#xff0c;能够采…

C++11:可变参数模板、lambda表达式和包装器

目录 一. 可变参数模板 1.1 什么是可变模板参数 1.2 参数包具体值的获取 1.3 emplace/emplace_back接口函数 二. lambda表达式 2.1 lambda表达式的概念和定义方法 2.2 捕捉列表说明 2.3 lambda表达式的底层实现原理 三. 包装器 3.1 function包装 3.2 bind绑定 3.2.…

重估老板电器:加速增长飞轮,迸发品类红利

#王一博同款洗碗机&#xff0c;5月28日&#xff0c;这个话题登上微博热搜&#xff0c;并获得不小关注。数据显示&#xff0c;截至5月29日9:00&#xff0c;该话题一天内引发了166.1万人讨论&#xff0c;阅读量破2.7亿。同时&#xff0c;抖音上&#xff0c;官宣王一博为代言人的话…

Java on Azure 开发工具路线图新发布!

大家好&#xff0c;欢迎来到Java on Azure工具产品的4月更新。让我们首先来谈谈我们对未来几个月的Java on Azure开发工具的投资。在这次更新中&#xff0c;我们还将介绍Azure Service Bus支持和Azure Spring Apps入门模板增强功能。要使用这些新功能&#xff0c;请下载并安装用…

ASEMI单向可控硅BT151参数,BT151封装,BT151体积

编辑-Z 单向可控硅BT151参数&#xff1a; 型号&#xff1a;BT151 存储接点温度范围Tstg&#xff1a;-40~150℃ 工作接点温度范围Tj&#xff1a;-40~125℃ 断态重复峰值电压VDRM&#xff1a;650V 重复峰值反向电压VRRM&#xff1a;650V RMS导通电流IT(RMS)&#xff1a;12…

【P42】JMeter 运行时间控制器(Runtime Controller)

文章目录 一、运行时间控制器&#xff08;Runtime Controller&#xff09;参数说明二、测试计划设计 一、运行时间控制器&#xff08;Runtime Controller&#xff09;参数说明 可以通过时间来确定其后代元素运行多长时间&#xff0c;在时间范围内&#xff0c;后代元素会一直运…

uniapp中根据不同状态跳转不同页面

大纲&#xff1a; 今天我们讲 在uniapp中&#xff0c;如何根据不同的状态跳转到不同的页面。 以下代码&#xff0c;是Tabs标签的展示 &#x1f33f; :list"list" 是参数配置&#xff0c;该参数要求为数组&#xff0c;元素为对象&#xff0c;且对象要有name属性&…

mciSendString函数简介(播放音乐以及录音相关操作)

函数功能&#xff1a;播放多媒体音乐&#xff0c;视频等 mciSendString是用来播放多媒体文件的API指令&#xff0c;可以播放MPEG,AVI,WAV,MP3,等等。这个函数有自己的mci指令&#xff0c;可以通过不同的指令实现不同的功能。这里我会详细讲解mciSendString这个函数的常见用法&…

【Web】HTTP代理和反向代理

直接访问 就是从客户端直接访问服务端&#xff0c;相当于我直接去厂家买可乐&#xff0c;没有中间商赚差价 HTTP代理 HTTP代理指在客户端先访问代理服务器&#xff0c;然后由代理服务器去访问服务端&#xff0c;代理服务器收到响应后再转发个客户端&#xff0c;就像我去商店…

【C++】类与对象——六个默认成员函数、构造函数的概念和特征,析构函数的概念和特征

文章目录 1.类的六个默认成员函数2.构造函数2.1构造函数的概念2.2构造函数的特性 3.析构函数3.1析构函数的概念3.2析构函数的特征 1.类的六个默认成员函数 如果一个类中什么成员都没有&#xff0c;简称为空类。   空类中真的什么都没有吗&#xff1f; 并不是&#xff0c;任何…

跨域图像识别

跨域图像识别 跨域图像识别&#xff08;Cross-domain Image Recognition&#xff09;是指在不同的数据集之间进行图像分类或识别的任务。由于不同数据集之间的分布差异&#xff0c;跨域图像识别面临着很大的挑战。 以下是几种代表性的跨域图像识别算法&#xff1a; DDC&#…

利用代码实现自动刷网课阅读时长功能 JAVA

目录 前言&#xff1a;理论依据&#xff1a;现实依据&#xff1a;朴素版只能循环阅读不能翻页&#xff1a;升级版 翻页 阅读&#xff1a;如何使用&#xff1a; 前言&#xff1a; 最近不也快结课了&#xff0c;网课该刷的都要刷掉&#xff0c;最近不就把一门思政课刷完了&#…

粉丝经济:互帮互助,众筹,人人帮我我帮人人

目录 用户精准定位&#xff1a; 用户裂变 用户在线“买卖需要注册&#xff1a;为后期思域流量变现 用户容器“APP&#xff0c;小程序”&#xff1a;用户资产化 LBS(一人千面&#xff0c;个性化定制&#xff0c;根据地理位置进行提醒&#xff1a;优惠券”) 粉丝渠道化&…

信息安全实践1.1(网络嗅探)

前言 这个网络嗅探其实就是用wireshark抓包。那时候赶着做&#xff0c;就随便写了点。参考价值比较少。 第一次实践是因为寒假在家摆烂&#xff0c;然后开学前两天做的&#xff0c;所以质量不是很好。不过也算是一次实践&#xff0c;看看就好。 要求 使用网络嗅探工具抓获网络…

TiDB x Bolt丨超强可扩展性与弹性助力超 1 亿用户畅享出行服务

作者&#xff1a;PingCAP 封小明 通过 TiDB 连接全球极限场景和创新场景&#xff0c;是 PingCAP 长期坚持的国际化战略。目前&#xff0c;在全球已有超过 3000 家企业选择 TiDB。无论在游戏、金融、物流、互联网还是智能制造等行业&#xff0c;基于规模化 OLTP 扩容、实时 HTA…

为什么说企业需要搭建产品手册?

企业需要搭建产品手册的原因有很多&#xff0c;其中包括提高产品使用体验、降低售后服务成本、促进产品销售等。本文将从这些方面来介绍企业为什么需要搭建产品手册&#xff0c;并探讨如何有效地搭建和管理产品手册。 一、提高产品使用体验 产品手册是一份指导用户如何正确使…

【数据结构】二叉树——链式结构的实现(代码演示)

目录 1 二叉树的链式结构 2 二叉树的创建 3 二叉树的遍历 3.1 前序遍历 3.1.1运行结果&#xff1a; 3.1.2代码演示图: 3.1.3 演示分析&#xff1a; 3.2 中序遍历 3.3 后序遍历 3.4 层序遍历 4 判断是否是完全二叉树 5 二叉树节点的个数 5.1 总个数 5.2 叶子节点…

Electron-Builder Windows系统代码签名

前言 项目打包签名是两年前做的了&#xff0c;使用Electron-Bulder&#xff0c;打包工具版本迭代较少&#xff0c;倒是electron版本更新飞快&#xff0c;目前官方推荐使用Electron Forge进行打包&#xff0c;后续再对两者进行对比&#xff0c;重新整理现在的实现方案。 签名简…

微信扫码授权到登录网页,中间究竟发生了什么?

关于我昨天突然接到神秘“面试”&#xff1a;微信扫码授权登录的实现逻辑是神魔&#xff1f;在这个扫码授权的过程中客户端、服务端、微信平台都做了些神魔&#xff1f;二维码里面又有哪些信息&#xff1f; 从手机微信扫一扫二维码到登录个人的知乎账户&#xff0c;中间究竟发生…

智警杯赛前学习1.2--excel统计函数

常用统计函数 count countif&#xff08;区域&#xff0c;条件&#xff09; countifs&#xff08;区域&#xff0c;条件&#xff0c;区域&#xff0c;条件&#xff09; 求和函数 sum sumif&#xff08;区域&#xff0c;条件&#xff0c;[求和区域]&#xff09; sumifs&#xff…