Redis进阶(四):哨兵

        为了解决主节点故障,需要人工操作切换主从的情况;因此需要一种方法可以自动化的切换:哨兵的引入大大改变这种情况。

哨兵的基本概念

自动切换主从节点

        哨兵架构

1、当一个哨兵节点发现主节点挂了的时候,还需要其他节点也去检测一下这个主节点到底是不是真的挂了(防止误判)。

2、发现是真的挂了之后,哨兵 节点推举一个leader之后,选一个slave作为新的主节点

3、挑选新的主节点之后,哨兵节点自动的将从节点slave no one 脱离主节点的控制,并且控制其他的从节点归附到这个新的主节点身上。

4、哨兵节点会自动通知客户端,告知新的主节点是谁,并且后续客户端进行写操作就是针对新的主节点了。 

 因此  redis 哨兵核心功能 : 1.监控  2.自动的故障转移  3.通知

搭建哨兵

        准备工作(基于docker)

docker可以认为是一个轻量级的虚拟机:隔离环境,不吃硬件资源

docker-compose:管理一组docker容器

镜像:docker中的镜像和容器类似于 可执行程序 和 进程 的关系

镜像(Mirroring)是一种文件存储形式,一个磁盘上的数据在另一个磁盘上存在一个完全相同的副本即为镜像。

容器 (Container) 泛指任何可以用于容纳其它物品的工具,可以部分或完全封闭,被用于容纳、储存、运输物品。

在云原生技术中,容器就是将软件(镜像)打包成标准化单元,以用于开发、交付和部署。

  • 容器可以是镜像的一个实例
  • 镜像是文件,容器是进程
  • 镜像为静态,而容器可能为动态

镜像准备好之后,拉取的镜像里面包含了一个精简的Linux操作系统,并且上面安装了redis,基于镜像创建容器跑起来即可。

搭建redis哨兵环境

创建数据节点

修改配置文件:

version: '3.7'
services:master:image: 'redis:5.0.9' //基于哪个镜像container_name: redis-masterrestart: alwayscommand: redis-server --appendonly yesports: - 6379:6379 //端口映射slave1:image: 'redis:5.0.9'container_name: redis-slave1restart: alwayscommand: redis-server --appendonly yes --slaveof redis-master 6379ports:- 6380:6379slave2:image: 'redis:5.0.9'container_name: redis-slave2restart: alwayscommand: redis-server --appendonly yes --slaveof redis-master 6379ports:- 6381:6379

redis -cli -p进行验证

创建哨兵节点

version: '3.7'
services:sentinel1:image: 'redis:5.0.9'container_name: redis-sentinel-1restart: alwayscommand: redis-sentinel /etc/redis/sentinel.confvolumes:- ./sentinel1.conf:/etc/redis/sentinel.confports:- 26379:26379sentinel2:image: 'redis:5.0.9'container_name: redis-sentinel-2restart: alwayscommand: redis-sentinel /etc/redis/sentinel.confvolumes:- ./sentinel2.conf:/etc/redis/sentinel.confports:- 26380:26379sentinel3:image: 'redis:5.0.9'container_name: redis-sentinel-3restart: alwayscommand: redis-sentinel /etc/redis/sentinel.confvolumes:- ./sentinel3.conf:/etc/redis/sentinel.confports:- 26381:26379
networks:default:external:name: redis-data_default 

创建sentinel1.conf  sentinel2.conf  sentinel3.conf 三份⽂件的内容是完全相同的.
都放到 /root/redis-sentinel/ ⽬录中.

bind 0.0.0.0
port 26379
sentinel monitor redis-master redis-master 6379 2
sentinel down-after-milliseconds redis-master 1000

启动哨兵节点:

docker-compose up -d

但要注意的是,docker-compose启动多个容器:处于同一个局域网中,可以使这个容器相互访问,当时哨兵节点配置文件中的sentinel monitor注明的是另一个局域网(三个redis-server节点是一个局域网),并不能访问,

docker network ls

列出当前docker中的局域网

修改配置文件即可达成修改局域网:

networks:default:external:name: redis-data_default 

name的获取从 列出当前docker中的局域网(docker network ls) 获取到

查看日志

docker-compose logs

重新选举

手动干掉主节点后观察日志:

确定主节点挂了之后,就需要选拔新的主节点

redis-master重启之后
docker start redis-master

Redis主节点如果宕机,会把其中的⼀个从节点,提拔成主节点.

当之前的Redis主节点重启之后,这个主节点被加⼊到哨兵的监控中,但是只会被作为从节点使⽤.

主从切换的具体流程 

1.主观下线

哨兵节点通过心跳包判定redis服务器是否正常工作,如果没有心跳包了,说明redis节点挂了,但是此时不能排除网络波动影响,只能单方面认为该节点挂了

2.客观下线

多个哨兵认为主节点挂了:认为挂了的哨兵节点数目达到法定票数,哨兵们就认为该主节点客观下线

3.要让多个哨兵节点选举一个leader,由这个leader负责选一个从节点作为新的主节点。

示例:

此时一号哨兵成为leader

每个哨兵只有一票,当哨兵1发现当前主节点客观下线之后,就立即给自己投一票,并且告诉了2,3哨兵节点,(当他们没有投票的时候,收到投票请求就会投出去)如果总的票数超过了哨兵总数的一半,选举完成(哨兵总数常设为奇数)

 4.此时leader选举完毕,leader需要挑选一个从节点作为主节点:

a.优先级:每个redis数据节点都会在配置文件中,有一个优先级设置,slave-priority,优先级高的节点会win

b.offset 优先级相同比较offset,offset:从节点从主节点同步数据的进度,挑选offset大的节点作为主节点

c.run id 每个redis节点启动的时候随机生成的一串数字:此时选谁都行,随机挑一个。看run id 更小

5.新的主节点选好之后,leader会控制这个节点执行slave no one,成为master。并且控制其他节点执行slave of,让这些其他节点 “认主” 。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

新华三H3CNE网络工程师认证—进制转换

了解进制转换,先要了解一下IP地址与子网划分,在我们通信当中,每一层都有它的标识,网络层的标识一共有两类协议,一个是IP协议,一个是IPv6协议。IP地址和MAC地址,他们之间是有一些区别。IP地址在网…

07.FreeRTOS列表与列表项

文章目录 07. FreeRTOS列表与列表项1. 列表和列表项的简介2. 列表相关API函数3. 代码验证 07. FreeRTOS列表与列表项 1. 列表和列表项的简介 列表的定义: typedef struct xLIST {listFIRST_LIST_INTEGRITY_CHECK_VALUE /* 校验值 */volatile UBaseType_t uxN…

在百度飞浆中搭建pytorch环境

文章目录 1 先检查创建的环境2 创建虚拟环境3 最终结果 1 先检查创建的环境 选择GPU版本 检查python版本 2 创建虚拟环境 虚拟环境的创建 python3 -m venv env_name # (python3 -m 路径 环境名)激活虚拟环境 source env_name/bin/activate这里注意,同名文件…

sqli靶场复现(1-8关)

目录 1.sqli-labs第二关 1.判断是否存在sql注入 1.1你输入数字值的ID作为参数,我们输入?id1 1.2在数据库可以查看到users下的对应内容 2.联合注入 2.1首先知道表格有几列,如果报错就是超过列数,如果显示正常就是没有超出列数。 2.2得…

PHP全方位多功能投票小程序系统源码

🌟【全民参与,决策更精彩】全方位多功能投票小程序大揭秘!🎉 🚀 开篇引入:投票新风尚,尽在指尖 Hey小伙伴们,你是否厌倦了传统的投票方式,觉得它们既繁琐又不够灵活&am…

IO进程----标准IO

目录 IO进程 标准IO 1. 概念: 2. 特点: 3. 缓存区 3.1. 行缓存:和终端操作相关 刷新缓存的条件: 1) 程序正常退出 2) \n刷新 3) 缓存区满刷新 4) 强制刷新 fflush 3.2. 全缓存:和文件操作相关 3.…

sqli-labs闯关1-4

第一关: 这里的输入了 ?id1 意思是以GET方式传入id1的参数 就等于SELECT * FROM users WHERE id1 LIMIT 0,1 注意:-- 与-- 空格的区别 在url中输入了--以后,后端数据会变成--空格。在 url中输入 -- 空格 变成 -- 在mysql中&…

使用Go语言实现基于泛型的Jaccard相似度算法

基本原理 跳表: jaccard相似度: jaccard相似度的代码实现: 时间复杂度分析: 快速jaccard算法: 代码实现,这个要求两个集合都是有序的: Jaccard相似度算法的基本实现 算法&#xf…

LeetCode Hot100 排序链表

给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。 示例 1: 输入:head [4,2,1,3] 输出:[1,2,3,4]示例 2: 输入:head [-1,5,3,4,0] 输出:[-1,0,3,4,5]示例 3: 输…

工程技术人员职称专业一览表,赶紧收藏!有助评职称、落户

现在很多地区为了引进人才,都会对各类获得中级或高级职称的人才提供一系列优惠政策,比如人才补贴、职称入户等等。 下面小编就来为大家介绍一下中级职称专业一览表,告诉你能以考代评的几个考试,需要评职称、落户的快看过来&#…

【秋招突围】2024届秋招-京东笔试题-第二套

🍭 大家好这里是 春秋招笔试突围,一起备战大厂笔试 💻 ACM金牌团队🏅️ | 多次AK大厂笔试 | 编程一对一辅导 ✨ 本系列打算持续跟新 春秋招笔试题 👏 感谢大家的订阅➕ 和 喜欢💗 和 手里的小花花🌸 ✨ 笔试合集传送们 -> 🧷春秋招笔试合集 🍭 本次给大家…

PXE:Kickstart自动化安装Linux系统

PXE:工作在 Client/Server模式,允许客户机通过网络从远程服务器下载引导镜像,并加载安装文件或者整个操作系统。 运行 PXE协议需要设置:DHCP服务器和TFTP服务器。DHCP服务器用来给 PXE client(将要安装系统的主机&…

【C++二分查找 决策包容性】1300. 转变数组后最接近目标值的数组和

本文涉及的基础知识点 C二分查找 决策包容性 LeetCode1300. 转变数组后最接近目标值的数组和 给你一个整数数组 arr 和一个目标值 target ,请你返回一个整数 value ,使得将数组中所有大于 value 的值变成 value 后,数组的和最接近 target …

element plus el-select修改后缀图标

使用 element plus 提供的api 默认为&#xff1a; 修改后为&#xff1a; 方法&#xff1a; <el-select v-model"value" placeholder"Select" size"large" style"width: 120px;":teleported"false" :suffix-icon"…

香港电讯为知名地产商构建安全稳定可靠的企业组网

客户背景 客户公司的总部位于香港&#xff0c;专注于房地产、酒店、基础设施及服务、商场等业务。经过多年沉淀&#xff0c;其内地业务不断壮大&#xff0c;拓展至各个地区并覆盖多个城市&#xff0c;原有的网络架构已无法满足客户的业务扩张需求。 客户需求 解决网络速度和稳…

python-约瑟夫环(赛氪OJ)

[题目描述] n 个人&#xff08; 0,1,2,3,4...n−1 &#xff09;&#xff0c;围成一圈&#xff0c;从编号为 k 的人开始报数&#xff0c;报数报到 m 的人出队。 下次从出队的人之后开始重新报数&#xff0c;循环往复&#xff0c;当队伍中只剩最后一个人的时候&#xff0c;那个人…

C++从入门到起飞之——深浅拷贝string类补充 全方位剖析!

​ &#x1f308;个人主页&#xff1a;秋风起&#xff0c;再归来~&#x1f525;系列专栏&#xff1a;C从入门到起飞 &#x1f516;克心守己&#xff0c;律己则安 目录 1、浅拷贝 2、深拷贝 3、现代版写法的拷贝构造和赋值重载 4、再探swap! 5、写实拷贝&#xff…

面试官:怎样设计一个分布式任务调度平台?

大家好&#xff0c;我是君哥。 在工作中&#xff0c;批量任务调度的需求经常会遇到&#xff0c;比如下面的几个场景&#xff1a; 数据迁移&#xff1a;从数据库 A 批量读取数据&#xff0c;加工后把数据写入数据库 B&#xff1b; 消息通知&#xff1a;运营商批量给客户发送短…

同态加密和SEAL库的介绍(二)BFV 基础方案实现

写在前面&#xff1a; 本篇具体讲解如何使用 BFV 加密方案对加密的整数进行简单的计算&#xff08;一个多项式评估&#xff09;&#xff0c;来源是官方提供的示例。BFV 是比较常见的方案&#xff0c;在很多大模型推理的时候&#xff0c;都是将浮点数的权重和输入变换成…

MongoDB学习笔记(三)

使用Python操作MongoDB: 使用管理员用户&#xff1a;