Redis高可用之持久化、主从复制(附配置实例)

news2024/12/23 7:39:09

目录

  • 一、Redis高可用
    • 1.1 简介
    • 1.2 高可用策略
  • 二、Redis 持久化
    • 2.1 简介
    • 2.2 redis 的 2 种持久化方式
      • 2.2.1 RDB持久化
      • 2.2.2 AOF持久化
  • 三、Redis主从复制
    • 3.1 什么是主从复制?
    • 3.2 为什么要用主从复制?
    • 3.3 主从复制的特性
    • 3.4 主从复制工作原理
      • 3.4.1 全量复制
      • 3.4.2 增量复制
    • 3.5 Redis主从同步策略
  • 四、搭建Redis主从复制
    • Step1 所有节点服务器安装Redis
    • Step2 Master节点修改 Redis 配置文件
    • Step3 Slave节点修改 Redis 配置文件
    • Step4 主从效果验证

一、Redis高可用

1.1 简介

在web服务器中,高可用是指服务器可以正常访问的时间,衡量的标准是在多长时间内可以提供正常服务(99.9%、99.99%、99.999%等等)。
但是在Redis语境中,高可用的含义似乎要宽泛一些,除了保证提供正常服务(如主从分离、快速容灾技术),还需要考虑数据容量的扩展、数据安全不会丢失等。

1.2 高可用策略

策略概述
持久化持久化是最简单的高可用方法,主要作用是数据备份,即将数据存储在硬盘,保证数据不会因进程退出而丢失。
主从复制主从复制是高可用Redis的基础,主要实现了数据的多机备份,以及对于读操作的负载均衡和简单的故障恢复
哨兵在主从复制的基础上,哨兵实现了自动化的故障恢复。缺陷:写操作无法负载均衡,存储能力受到单机的限制。
集群通过集群,Redis解决了写操作无法负载均衡,以及存储能力受到单机限制的问题,实现了较为完善的高可用方案。

二、Redis 持久化

2.1 简介

Redis是内存数据库,数据都是存储在内存中,为了避免服务器断电等原因导致Redis进程异常退出后数据的永久丢失,需要定期将Redis中的数据以某种形式(数据或命令)从内存保存到硬盘;

当下次Redis重启时,利用持久化文件实现数据恢复

除此之外,为了进行灾难备份,可以将持久化文件拷贝到一个远程位置。

2.2 redis 的 2 种持久化方式

2.2.1 RDB持久化

定时把redis内存中的数据进行快照并压缩保存到硬盘;

RDB持久化保存的文件占用空间小,网络传输快,恢复速度也比AOF快,性能影响比AOF更小;

实时性不如AOF,兼容性较差,持久化期间在fork子进程时会阻塞reids父进程。

2.2.2 AOF持久化

追加的方式将Redis写操作的命令记录到文件中;

实时性比RDB好,支持秒级持久化,兼容性较好;

持久化保存的文件占用磁盘空间更大,恢复速度更慢,性能影响更大,AOF文件重写期间在fork子进程时会阻塞reids父进程;

两者区别可通过 *工作方式、实时性、磁盘占用、恢复速度、兼容性、IO性能影响等方面进行阐述。

三、Redis主从复制

3.1 什么是主从复制?

在这里插入图片描述

Redis主从复制是一种常见的数据复制机制,用于在不同的Redis服务器之间同步数据

在主从复制中,一个Redis服务器充当主服务器(master),负责接收和处理写入操作,而其他的Redis服务器充当从服务器(slave),通过复制主服务器的数据来保持与主服务器的数据同步。

Redis主从复制是实现读写分离、Redis高可用等的基础

3.2 为什么要用主从复制?

1)产生Redis单机故障时,可用通过从服务器上进行恢复数据;

2)Redis要实现高可用、高并发,单个Redis也就只能支持几万的QPS,必须以集群的形式提供服务,而集群中又以多个主从组成。

3)主从是以多个redis集合在一起,以一个master多个slave为模式对外提供服务,master主要以写为主,slave提供读,即是读写分离的情况,以读多写少为准。

3.3 主从复制的特性

1)一个master可以有多个slave;

2)一个slave只能有一个master;

3) 数据流是单向的,master到slave;

4)主从复制底层依赖与RDB方式进行全量复制。

3.4 主从复制工作原理

Redis主从之间的复制分为两部分:全量复制和增量复制。

3.4.1 全量复制

Redis在第一次实现主从关系时会进行全量复制
在这里插入图片描述

1)Slave 通过 psync命令同步数据与Master建立socket长连接;

2)Master 收到psync命令,执行bgsave语句生成RDB快照

3)Master发送RDB数据;

4)Slave清空数据并加载Master发来的RDB数据;

5)Master将生成RDB文件过程中,修改的数据,repl buffer发送给Slave

6)Slave执行接收到的修改命令;

7)Master通过socket长连接持续把写命令发送给从接单,保证数据一致性。

3.4.2 增量复制

如果由于网络原因造成原因造成主从断开,期间有数据写入master,再次形成主从时,会形成增量复制
在这里插入图片描述

1)Slave连接断开

2)Master最近数据的修改命令的缓存;

3)Slave重新建立Socket长连接到master;

4)Slave psync命令同步数据: offset偏移量控制;

5)Master判断 Slave的offset。如果在repl backlog buffer中,Master会将缓存中从salve的offset之后数据一次性同步给salve节点,否则会全量同步;

6)Master通过socket长连接持续把写命令发送给从节点,保证主从一致性

3.5 Redis主从同步策略

主从刚刚连接的时候,进行全量同步;全同步结束后,进行增量同步。

当然,如果有需要,slave 在任何时候都可以发起全量同步。

redis 策略是,无论如何,首先会尝试进行增量同步,如不成功,要求从机进行全量同步

四、搭建Redis主从复制

在这里插入图片描述

节点服务器IP地址
Master192.168.2.100
Slave1192.168.2.102
Slave2192.168.2.103
#开机自动关闭防火墙
systemctl  disable firewalld --now

#永久关闭selinux
sed -i 's/enforcing/disabled/' /etc/selinux/config

Step1 所有节点服务器安装Redis

安装过程见 Redis安装部署和常用命令_白幽幽白的博客-CSDN博客

Step2 Master节点修改 Redis 配置文件

vim /usr/local/redis/conf/redis.conf

bind 0.0.0.0							#87行,修改监听地址为0.0.0.0
protected-mode no						#111行,将本机访问保护模式设置no
port 6379								#138行,Redis默认的监听6379端口
daemonize yes							#309行,设置为守护进程,后台启动
pidfile /usr/local/redis/log/redis_6379.pid		#341行,指定 PID 文件
logfile "/usr/local/redis/log/redis_6379.log"	#354行,指定日志文件
dir /usr/local/redis/data				#504行,指定持久化文件所在目录
#requirepass abc123						#1037行,可选,设置redis密码
appendonly yes							#1380行,开启AOF

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

systemctl restart redis-server.service

Step3 Slave节点修改 Redis 配置文件

Slave1

vim /usr/local/redis/conf/redis.conf

bind 0.0.0.0							
#87行,修改监听地址为0.0.0.0

protected-mode no						
#111行,将本机访问保护模式设置no

port 6379								
#138行,Redis默认的监听6379端口

daemonize yes							
#309行,设置为守护进程,后台启动

pidfile /usr/local/redis/log/redis_6379.pid		#341行,指定 PID 文件

logfile "/usr/local/redis/log/redis_6379.log"	#354行,指定日志文件

dir /usr/local/redis/data				
#504行,指定持久化文件所在目录

replicaof 192.168.2.100 6379			
#528行,指定要同步的Master节点IP和端口

masterauth abc123						
#535行,可选,指定Master节点的密码,仅在Master节点设置了requirepass

requirepass abc123						
#1038行,可选,设置redis密码

appendonly yes							
#1380行,开启AOF

在这里插入图片描述

systemctl restart redis-server.service

Slave2

#远程传输
scp 192.168.2.102:/usr/local/redis/conf/redis.conf /usr/local/redis/conf/redis.conf

systemctl restart redis-server.service

在这里插入图片描述

Step4 主从效果验证

#在Master节点上看日志:
tail -f /usr/local/redis/log/redis_6379.log 

在这里插入图片描述

#在Master节点上验证从节点:
redis-cli -a abc123 info replication -a

在这里插入图片描述

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

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

相关文章

Java项目-Spring Boot的生鲜网上交易系统

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 文章目录 1 简介2 技术栈3 系统功能4 功能设计5系统详细设计5.1系统功能模块5.2后台功能模块5\.2\.1用户功…

TextSniper for Mac: 革新您的文本识别体验

你是否曾经需要从图片或扫描文档中提取文本,却苦于没有合适的工具?那么,TextSniper for Mac将是你的完美解决方案。这款文本识别工具将彻底改变你处理图像和扫描文件的方式,让你更快速、更高效地完成任务。 TextSniper for Mac 是…

直流负载箱的使用场景和应用范围是什么?

直流负载箱是用于模拟电子设备负载的测试仪器,用于电源供应器、逆变器、电池等直流电源设备的性能测试和负载仿真,它可以模拟各种负载条件,以便测试和评估电源设备在不同负载情况下的工作性能,直流负载箱的使用场景和应用范围广泛…

Jmeter状态码及请求

Jmeter与LR的区别? 1.都是压测工具,可以用来做性能测试,但是Jmeter比较轻量级。jmeter 是用java语言写的,需要java环境,LR不需要,除非用iavavuser协议 (不用掌握) 2.Jmeter更偏向于功能和技术,LR偏向于业务…

VME-7807RC-414001 350-93007807-414001 VMIVME-017807-411001 VMIVME-017807-414001

VME-7807RC-414001 350-93007807-414001 VMIVME-017807-411001 VMIVME-017807-414001 由于第12代英特尔酷睿处理器的16核/24线程配置,Nuvo-9000型号与之前的平台相比,性能大幅提升。它们还支持新的DDR5内存标准,以获得更多内存带宽&#xf…

气传导耳机有哪些品牌?性能不错的气传导耳机分享

​气传导耳机采用空气传导技术,使声音传递更加自然舒适。随着气传导耳机的创新发展,越来越多用户不知道气传导耳机该怎么选了,所以今天我来推荐几款相当不错的气传导耳机给大家参考,享受音乐时不受耳道压力的困扰。 一、NANK南卡…

电力智能化运维平台:提高效率和保障电力系统的稳定运行

随着信息技术、人工智能、物联网的发展,电力系统的规模和复杂性也在不断增长。为了确保电力系统的稳定运行,传统的运维方式已经无法满足需求。电力智能化运维平台应运而生,为电力行业带来了全新的运维模式和技术手段。 电力智能化运维平台…

密歇根大学发布3款生成式AI产品,并应用在教学、日常工作!

密歇根日报消息,美国顶级公立大学-密歇根大学宣布推出3款生成式AI产品UM-GPT、UM-GPT开发包和UM-Maizey,并将其应用在教学、日常工作、学术研究等领域。微软也参与了此次产品研发,并提供技术支持。 密歇根大学将为安娜堡分校、弗林特分校、迪…

重学C++ | std::set 的原理

std::set 是C标准库中的容器之一&#xff0c;它基于红黑树实现。std::set 利用红黑树的特性来实现有序的插入、查找和删除操作&#xff0c;并且具有较好的平均和最坏情况下的时间复杂度。 当向 std::set 插入元素时&#xff0c;它会按照特定的比较函数&#xff08;bool less<…

优化您的Mac系统,提升性能——TinkerTool System for Mac

TinkerTool System for Mac 是一款功能强大的系统维护工具&#xff0c;为您提供了一系列优化和排错工具&#xff0c;帮助您轻松管理和提升Mac系统的性能。不论您是普通用户还是高级用户&#xff0c;这款应用程序都能满足您的需求&#xff0c;让您的Mac保持高效稳定。 TinkerTo…

java项目之人事管理系统(ssm源码+文档)

项目简介 人事管理系统实现了以下功能&#xff1a; 管理员&#xff1a;个人中心、员工管理、部门经理管理、部门信息管理、员工考勤管理、签到管理、请假申请管理、工资查询管理、部门类型管理.部门经理&#xff1a;个人中心、员工管理、部门信息管理、员工考勤管理、签到管理…

【rhce考试时间是每年什么时候呢?】

RHCE9.0 新技术 公开课 10月11日&#xff0c;12日 感兴趣可留言 如果你是一个系统管理员&#xff0c;或者正朝着这个方向努力前进&#xff0c;那么你可能已经听过RHCE这个词。RHCE是Red Hat Certified Engineer的缩写&#xff0c;是全球公认的Linux系统工程师认证之一。通过获…

[C++随笔录] list模拟实现

list模拟实现 基本结构(1)iterator类的基本结构(2)Node类的基本结构(3)list类的基本结构 初始化(1) list类的构造函数(2) Node类的构造函数(3) iterator类中的构造函数 迭代器行为(1) 前置&& 后置(2) 前置-- && 后置--(3)operator* && operator->(4…

微机原理与接口技术

8088/8086 CPU的两种工作模式 8088/8086可工作于两种模式下&#xff1a;最小模式与最大模式 ■最小模式为单处理器模式&#xff0c;所有控制信号由微处理器产生 ■最大模式为多处理器模式&#xff0c;部分控制信号由外部总线控制器 产生 ■用于包含协处…

阿里云服务器共享型和企业级性能差异对比

阿里云ECS云服务器共享型和企业级有什么区别&#xff1f;企业级就是独享型&#xff0c;共享型和企业级云的主要区别CPU调度模式&#xff0c;共享型是非绑定CPU调度模式&#xff0c;企业级是固定CPU调度模式&#xff0c;共享型云服务器在高负载时计算性能可能出现波动不稳定&…

Pytorch之GoogLeNet图像分类

&#x1f482; 个人主页:风间琉璃&#x1f91f; 版权: 本文由【风间琉璃】原创、在CSDN首发、需要转载请联系博主&#x1f4ac; 如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连)和订阅专栏哦 目录 前言 一、GoogLeNet网络结构 1.Inception 结构 (1)Inception v1 (2)…

基于FPGA的图像形态学膨胀算法实现,包括tb测试文件和MATLAB辅助验证

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 在FPGA中仿真结果如下所示&#xff1a; 将FPGA中的仿真结果导入到matlab显示二维图&#xff0c;效果如下&#xff1a; 2.算法运行软件版本 matla…

Java 8 CompletableFuture 学习及实践笔记

CompletableFuture 学习及实践笔记 CompletableFuture 是 Java 8 引入的一个强大的异步编程工具&#xff0c;它提供了一种简洁而灵活的方式来处理异步操作和构建复杂的异步流程。 创建 CompletableFuture 使用 CompletableFuture.supplyAsync(Supplier<U> supplier) 方…

WindTerm 安装使用教程【图解】

往期回顾 MobaXtermMobaXterm 安装使用教程【图解】-CSDN博客WindTermWindTerm 安装使用教程【图解】-CSDN博客 一、WindTerm 功能介绍 WindTerm 是一款 Github 上开源的 SSH 终端工具&#xff0c;到目前为止它已经收获了 16.9K 颗星&#xff0c;它是完全可以比肩 MobaXterm 工…

AI写稿软件,最新的AI写稿软件有哪些

写作已经成为各行各业无法绕开的重要环节。不论是企业的广告宣传、新闻媒体的报道、还是个人自媒体的内容创作&#xff0c;文字都扮演着不可或缺的角色。随着信息的爆炸式增长&#xff0c;写作的需求也不断攀升&#xff0c;这使得许多人感到困扰。时间不够用、创意枯竭、写作技…