当前位置: 首页 > news >正文

Redis高可用之主从复制及哨兵模式

一、Redis的主从复制

1.1 Redis主从复制定义

主从复制是redis实现高可用的基础,哨兵模式和集群都是在主从复制的基础之上实现高可用;
主从复制实现数据的多级备份,以及读写分离(主服务器负责写,从服务器只能读)

1.2 主从复制流程

(主从复制推荐使用AOF)

1)若启动一个slave机器进程,则它会向Master机器发送一个sync command命令,请求同步连接

2)无论是第一次连接还是重新连接,Master机器都会启动一个后台进程,将数据快照保存到数据文件中执行bgsave操作),同时Master还会记录修改数据的所有命令并缓存在数据文件中

3)后台进程完成缓存操作之后,Master机器就会向slave机器发送数据文件,slave端机器将数据文件保存到硬盘上,然后将其加载到内存中,接着Master机器就会将修改数据的所有操作一并发送给slave端机器若slave出现故障导致宕机,则恢复正常后会自动重新连接

4)Master机器收到slave端机器的连接后,将其完整的数据文件发送给slave端机器,如果Master同时收到多个slave发来的同步请求,则Master会在后台启动一个进程以保存数据文件,然后将其发送给所有的slave端机器,确保所有的slave端机器都正常

1.3 主从复制实操(一主二从)

主从复制架构

20.0.0.91:MASTER
20.0.0.92:SLAVE1
20.0.0.93:SLAVE2

关闭防火墙

systemctl stop firewalld
setenforce 0

修改master配置文件

vim /etc/redis/6379.conf 
--70--
bind 0.0.0.0
#修改监听地址为0.0.0.0,允许所有网段访问--137--
daemonize yes
#开启守护进程,后台启动 --172--
logfile /var/log/redis_6379.log
#指定日志文件存放目录--264--
dir /var/lib/redis/6379
#指定工作目录--700--
appendonly yes
#开启AOF持久化功能/etc/init.d/redis_6379 restart

修改slave配置文件

#salve1、slave2相同操作
vim /etc/redis/6379.conf 
--70--
bind 0.0.0.0
#修改监听地址为0.0.0.0,允许所有网段访问--137--
daemonize yes
#开启守护进程,后台启动 --172--
logfile /var/log/redis_6379.log
#指定日志文件存放目录--264--
dir /var/lib/redis/6379
#指定工作目录--288--
replicaof 20.0.0.91 6379
#指定要同步的Master节点的IP和端口--700--
appendonly yes
#开启AOF持久化功能
​​
/etc/init.d/redis_6379 restart  #重启redis
ss -natp | grep redis      #查看主从服务器是否已建立连接

测试

测试主从复制以及读写分离

 

测试slave断开时,master写入数据,slave恢复正常后能否复制

二、Rdis的哨兵模式

在主从复制的基础上,哨兵引入了主节点的自动故障转移。

2.1 哨兵模式的组成

哨兵节点: 哨兵系统由一个或多个哨兵节点组成,哨兵节点是特殊的redis节点,不存储数据。

数据节点: 主节点和从节点都是数据节点。

2.2 哨兵模式的原理

哨兵是一个分布式系统,部署在每一个redis的节点之上,用于在主从结构之间,对每一台redis的服务进行监控。

1).监控: 哨兵会不断地检查主节点和从节点是否运作正常。
每个哨兵节点每隔一秒,通过ping命令方式,检测主从之间的心跳线。
主节点在一定时间内没有回复或者回复了错误的消息,此时哨兵就会主观地认为主节点下线,
超过半数的哨兵节点认为主节点下线时,才会将主节点认为客观下线。

2).自动故障转移: 当主节点不能正常工作时,哨兵会开始自动故障转移操作,它会将失效主节点的其中一个从节点升级为新的主节点,并让其它从节点改为复制新的主节点。
主节点的选举原则:
已经下线的从节点不会被选为主节点;
选择配置文件当中优先级最高的从节点作为主节点(replica-priority 100);
选择一个复制数据最完整的从节点作为主节点。
(如何实现切换:主节点出现故障时,从节点通过投票的方式选择一个新的master )

3).通知(提醒): 哨兵可以将故障转移的结果发送给客户端。

2.3 哨兵模式实操

修改哨兵节点配置文件

#所有节点相同操作
vim /opt/redis-5.0.7/sentinel.conf
--17--
protected-mode no
#取消注释,关闭保护模式--21--
port 26379
#Redis哨兵默认的监听端口--26--
daemonize yes
#指定sentinel为后台启动--36--
logfile "/var/log/sentinel.log"
#指定日志文件存放路径--65--
dir "/var/lib/redis/6379"
#指定数据库存放路径--84--
sentinel monitor mymaster 20.0.0.91 6379 2 
#指定该哨兵节点监控20.0.0.91:6379这个主节点,该主节点的名称是mymaster。
#最后的2的含义与主节点的故障判定有关:至少需要2个哨兵节点同意,才能判定主节点故障并进行故障转移
​
--113--
sentinel down-after-milliseconds mymaster 30000
#判定服务器down掉的时间周期,默认30000毫秒(30秒)--146--
sentinel failover-timeout mymaster 180000
#同一个sentinel对同一个master两次failover之间的间隔时间(180秒)

启动哨兵模式并查看哨兵状态

#启动三台节点上的哨兵模式
cd /opt/redis-5.0.7/
redis-sentinel sentinel.conf &#在哨兵节点查看监控状态
[root@localhost ~]# redis-cli -p 26379 info Sentinel

模拟故障测试

#Master
ps -elf | grep redis
kill -9 pid号  #Master节点上redis-server的进程号
netstat -natp | grep redis

相关文章:

Redis高可用之主从复制及哨兵模式

一、Redis的主从复制 1.1 Redis主从复制定义 主从复制是redis实现高可用的基础,哨兵模式和集群都是在主从复制的基础之上实现高可用; 主从复制实现数据的多级备份,以及读写分离(主服务器负责写,从服务器只能读) 1.2 主从复制流…...

代理模式,dk动态代理,cglib动态代理

目录 一、代理模式1、生活中代理案例2、为什么要使用代理3、代理模式在Java中的应用4、什么是代理模式 二、代理的实现方式1、java中代理图示2、静态代理 三、动态代理1、概述2、JDK动态代理jdk动态代理原理分析 3、Cglib动态代理3.1 基本使用3.2 cglib基本原理 一、代理模式 …...

Vue2系列 -- 组件自动化全局注册(require.context)

参考官网:https://v2.cn.vuejs.org/v2/guide/components-registration.html 1 作用 省略 import 引入组件 省略 在main.js 中注册 实现自动化引入组件 2 自定义文件夹 在 src 下新建一个 components/base 文件夹,用于存放要自动注册的组件 3 在 base…...

【华为OD题库-038】支持优先级的对列-java

题目 实现一个支持优先级的队列,高优先级先出队列,同优先级时先进先出。 如果两个输入数据和优先级都相同,则后一个数据不入队列被丢弃。 队列存储的数据内容是一个 整数。 输入描述 一组待存入队列的数据(包含内容和优先级)。 输出描述 队列…...

python爱心代码高级

在Python中,我们可以使用matplotlib库来创建一个更高级的爱心图形。以下是一个示例: import matplotlib.pyplot as pltimport numpy as npx np.linspace(-2, 2, 1000)y1 np.sqrt(1-(abs(x)-1)**2)y2 -3*np.sqrt(1-(abs(x)/2)**0.5)fig, ax plt.subp…...

基于SSM+Vue的社区共享食堂管理系统

基于SSM的社区共享食堂管理系统的设计与实现~ 开发语言:Java数据库:MySQL技术:SpringMyBatisSpringMVC工具:IDEA/Ecilpse、Navicat、Maven 系统展示 主页 菜品详情 管理员界面 摘要 社区共享食堂管理系统是一种基于SSM&#xf…...

MYSQL基础知识之【修改数据,删除数据】

文章目录 前言MySQL UPDATE 查询使用PHP脚本更新数据 MySQL DELETE 语句从命令行中删除数据使用 PHP 脚本删除数据 后言 前言 hello world欢迎来到前端的新世界 😜当前文章系列专栏:Mysql 🐱‍👓博主在前端领域还有很多知识和技术…...

【机器学习】交叉验证 Cross-validation

交叉验证(CrossValidation)方法思想简介 以下简称交叉验证(Cross Validation)为CV.CV是用来验证分类器的性能一种统计分析方法,基本思想是把在某种意义下将原始数据(dataset)进行分组,一部分做为训练集(train set),另一部分做为验证集(validation set),首先用训练集对分类器进…...

Pycharm修改文件默认打开方式 + CSV Editor插件使用

1、File —> Settings —> Editor —> File Types 然后将*csv添加到最上面 在plugins中下载插件,CSV Editor 备注:不在上一步的“File Types”中将*.csv设置为CSV格式,插件是不起作用的 就可以使用了...

shiro整合redis

shiro整合redis 前言:shiro默认的session是存储在jvm内存中的,这样会导致java服务内存占用更大以及一旦服务器宕机或者版本迭代需要重启服务时,缓存中的数据不能恢复,导致用户需要重新登录认证,体验很差。因此利用第三…...

HarmonyOS(七)——@BuilderParam装饰器

前言: 前面我们认识了Builder装饰器:自定义构建函数,今天我们继续认识下一个装饰器——BuilderParam装饰器。 当开发者创建了自定义组件,并想对该组件添加特定功能时,例如在自定义组件中添加一个点击跳转操作。若直接…...

展开运算符(...)

假如我们有一个数组: const arr [7,8,9];● 我们如果想要数组中的元素,我们必须一个一个手动的去获取,如下: const arr [7,8,9]; const badNewArr [5, 6, arr[0], arr[1],arr[2]]; console.log(badNewArr);● 但是通过展开运…...

Apache Flink(二):数据架构演变

🏡 个人主页:IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客 🚩 私聊博主:加入大数据技术讨论群聊,获取更多大数据资料。 🔔 博主个人B栈地址:豹哥教你大数据的个人空间-豹…...

【C++】类与对象(中)

一、类的默认成员函数 如果一个类中什么成员都没有,简称为空类。 空类中真的什么都没有吗?并不是,任何类在什么都不写时,编译器会自动生成以下6个默认成员函数。 默认成员函数:用户没有显式实现,编译器会自…...

webshell之无扩展免杀

1.php加密 这里是利用phpjiami网站进行加密,进而达到加密效果 加密前: 查杀效果 可以看到这里D某和某狗都查杀 里用php加密后效果 查杀效果 可以看到这里只有D某会显示加密脚本,而某狗直接绕过 2.dezend加密 可以看到dezend加密的特征还是…...

用 VirtualBox 安装 OpenWrt 等 Linux 系统,无法启动的解决办法

用 VirtualBox 安装 OpenWrt 等 Linux 系统,无法启动的解决办法 最近新买了台联想小新 Pro 14 2023 锐龙版,因为有 32GB 的运行内存,所以想安装虚拟机以充分发挥。一开始使用 Hyper-V 来安装可以正常使用,但是后面想使用 Virtual…...

Windows下搭建Tomcat HTTP服务,发布公网远程访问

文章目录 前言1.本地Tomcat网页搭建1.1 Tomcat安装1.2 配置环境变量1.3 环境配置1.4 Tomcat运行测试1.5 Cpolar安装和注册 2.本地网页发布2.1.Cpolar云端设置2.2 Cpolar本地设置 3.公网访问测试4.结语 前言 Tomcat作为一个轻量级的服务器,不仅名字很有趣&#xff0…...

k8s-daemonset、job、cronjob控制器 6

Daemonset控制器(一个节点部署一个) 、 创建Daemonset控制器 控制节点上不能进行部署,有污点 解决方式: 扩容节点,token值过期的解决方法: 回收pod job控制器 需要使用perl镜像,仓库没有&…...

技术面时,一定要掌握这3个关键点

前言 现在有这么多优秀的测试工程师,大家都知道技术面试是不可避免的一个环节,一般技术面试官都会通过自己的方式去考察你的技术功底与基础理论知识。 如果你参加过一些大厂面试,肯定会遇到一些这样的问题: 1、看你项目都用到了…...

[Linux]进程创建➕进程终止

文章目录 1.再谈fork()函数1.1fork()创建子进程 OS都做了哪些工作?1.2对上述问题的理解1.3写时拷贝进行父子进程分离的优势1.4了解eip寄存器和pc1.5了解进程的上下文数据1.6对计算机组成的理解1.7fork常规用法1.8fork调用失败的原因 2.进程终止2.1进程终止时操作系统要做的工作…...

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…...

Chapter03-Authentication vulnerabilities

文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解

突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 ​安全措施依赖问题​ GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

OpenLayers 可视化之热力图

注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...

python报错No module named ‘tensorflow.keras‘

是由于不同版本的tensorflow下的keras所在的路径不同,结合所安装的tensorflow的目录结构修改from语句即可。 原语句: from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后: from tensorflow.python.keras.lay…...

代码规范和架构【立芯理论一】(2025.06.08)

1、代码规范的目标 代码简洁精炼、美观,可持续性好高效率高复用,可移植性好高内聚,低耦合没有冗余规范性,代码有规可循,可以看出自己当时的思考过程特殊排版,特殊语法,特殊指令,必须…...

前端中slice和splic的区别

1. slice slice 用于从数组中提取一部分元素,返回一个新的数组。 特点: 不修改原数组:slice 不会改变原数组,而是返回一个新的数组。提取数组的部分:slice 会根据指定的开始索引和结束索引提取数组的一部分。不包含…...

《Docker》架构

文章目录 架构模式单机架构应用数据分离架构应用服务器集群架构读写分离/主从分离架构冷热分离架构垂直分库架构微服务架构容器编排架构什么是容器,docker,镜像,k8s 架构模式 单机架构 单机架构其实就是应用服务器和单机服务器都部署在同一…...

xmind转换为markdown

文章目录 解锁思维导图新姿势:将XMind转为结构化Markdown 一、认识Xmind结构二、核心转换流程详解1.解压XMind文件(ZIP处理)2.解析JSON数据结构3:递归转换树形结构4:Markdown层级生成逻辑 三、完整代码 解锁思维导图新…...

【阅读笔记】MemOS: 大语言模型内存增强生成操作系统

核心速览 研究背景 ​​研究问题​​:这篇文章要解决的问题是当前大型语言模型(LLMs)在处理内存方面的局限性。LLMs虽然在语言感知和生成方面表现出色,但缺乏统一的、结构化的内存架构。现有的方法如检索增强生成(RA…...