redis高可用---持久化

redis高可用

在集群当中有一个非常重要的指标,提供正常服务的时间的百分比(365天) 99.9%,redis高可用含义更广泛,支持服务是指标之一,数据容量扩展,数局的安全性。(容量、安全性)


redis中实现高可用的技术:

1、持久化-----就简单的高可用方法,主要作用是数据备份,也就是把redis缓存在内存中的数据保存在本地硬盘中。(冷备份)
2、主从复制
3、哨兵模式
4、cluster集群


持久化

主要作用是数据备份,最简单的高可用方法,也就是把redis缓存在内存中的数据保存在本地硬盘中。(冷备份)

持久化的两种方式:

1、RDB持久化:redis在内存中的数据定时保存到磁盘。(自动执行、手动执行)
2、AOF持久化:redis的操作日志,以追加的方式写入一个AOF的文件,类似于mysql的binlog
优先级 RDB的.rdb文件(默认)< AOF的.aof文件

RDB持久化

RDB持久化:指在指定时间间隔内,将内存中当前进程中的数据生产快照保存到硬盘(快照持久化),用二进制压缩存储。保存的文件名后缀.rdb。redis启动时,可以直接读取快照文件,实现数据恢复。

RDB的触发机制
手动机制:save bgsave都可以生成RDB文件。

手动机制

save工作流程:创建rdb文件时,整个redis进程会被阻塞模式,期间redis将无法进行读写操作,直到rdb文件创建完成为止。生产中不能用save。

bgsave:是主从复制的机制

bgsave工作流程主进程会通过fork机制创建一个子进程,子进程重建过程中,主进程会阻塞,子进程创建完毕,主进程解除阻塞。子进程来创建RDB文件。创建完成之后,通知主进程更新通知信息。

vim /etc/redis/6379.conf

--219行--以下三个save条件满足任意一个时,都会引起bgsave的调用
save 900 1 :当时间到900秒时,如果redis数据发生了至少1次变化,则执行bgsave
save 300 10 :当时间到300秒时,如果redis数据发生了至少10次变化,则执行bgsave
save 60 10000 :当时间到60秒时,如果redis数据发生了至少10000次变化,则执行bgsave

--254行--指定RDB文件名
dbfilename dump.rdb

--264行--指定RDB文件和AOF文件所在目录
dir /var/lib/redis/6379

--242行--是否开启RDB文件压缩
rdbcompression yes
自动机制

除了save m n 以外,还有一些其他情况会触发bgsave:
● 在主从复制场景下,如果从节点执行全量复制操作,则主节点会执行bgsave命令,并将rdb文件发送给从节点。
● 执行shutdown命令时,自动执行rdb持久化。

AOF的重写功能

1、 随着时间增长AOF文件中的数据也会不断怎加。AOF的文件也会越来越大,过大的AOF文件不仅仅会影响服务器的正常运行,也会导致数据恢复的时间过长。

文件重写是指定期的重写AOF文件,减小AOF文件的体积。AOF重写是把redis进程内的数据,转化为写的命令,同步到新的AOF文件中(不会额外生成一个新的文件,只是在原有内容中进行压缩),不会对原有的文件进行任何读、写的操作。

文件重写虽然是AOF持久化强烈推荐的,但不是必须的。没有重写,并不影响redis启动时读取数据。在实际中,会关闭自动的文件重写。通过定时任务来完成。

AOF持久化:

·AOF持久化是将redis的每一次读写删除命令记录到一个单独的文件。保存的文件名后缀.aof。查主询操作由进程记录。当redis重启时,,再次执行AQF文件中的命令来恢复数据。
·AOF的实时性更好,也是主流的持久化方案

vim /etc/redis/6379.conf

--700行--修改,开启AOF
appendonly yes

--704行--指定AOF文件名称
appendfilename "appendonly.aof"

--796行--是否忽略最后一条可能存在问题的指令
aof-load-truncated yes
#用于判断AOF文件,如果被截断时的行为
#截断:写入过程中出现异常,导致文件未能完全写入
#yes:发现被截断,redis会在启动时尽可能恢复文件中的数据。redis会继续运行
#no:发现AOF文件被截断,redis将拒绝启动
 
如果对数据的完整性高,建议使用no
如果追求数据服务器的可用性,可以使用yes
可用性在并发场景上很重要,推荐使用yes

AOF如何实现备份恢复

vim /etc/redis/6379.conf
cd /var/lib/redis/6379
#检查文件是否生成
 
实现数据恢复
进入redis
set test1 1
set test2 2
set test3 3
vim /var/lib/redis/6379/appendonly.aof
#配置文件会记录所有redis的操作
flushall
/etc/init.d/redis_6379 stop
#停止redis服务
vim /var/lib/redis/6379/appendonly.aof
#根据为位置点删除flushall这个操作
/etc/init.d/redis_6379 restart
#重启服务
进入redis查看文件恢复
实验已经完成!

AOF缓存区的同步文件策略存在三种同步方式,它们分别是:

vim /etc/redis/6379.conf
--729--
●appendfsync always: 命令写入aof_buf后立即调用系统fsync操作同步到AOF文件,fsync完成后线程返回。
这种情况下,每次有写命令都要同步到AOF文件,硬盘IO成为性能瓶颈,Redis只能支持大约几百TPS写入,
严重降低了Redis的性能;即便是使用固态硬盘(SSD),每秒大约也只能处理几万个命令,而且会大大降低SSD的寿命。

●appendfsync no: 命令写入aof_buf后调用系统write操作,不对AOF文件做fsync同步;同步由操作系统负责,
通常同步周期为30秒。这种情况下,文件同步的时间不可控,且缓冲区中堆积的数据会很多,数据安全性无法保证。

●appendfsync everysec: 命令写入aof_buf后调用系统write操作,write完成后线程返回;
fsync同步文件操作由专门的线程每秒调用一次。everysec是前述两种策略的折中,是性能和数据安全性的平衡,
因此是Redis的默认配置,也是我们推荐的配置。
重写的触发条件

1、手动触发
重写命令 redis-cli bgrewriteaof

2、自动触发
 

vim /etc/redis/6379.conf​
771行
auto-aof-rewrite-percentage 100
#文件的大小超过基准的百分比。默认值就是100。文件的大小超过2倍时,会执行bgrewriteaof。
如果设置为0就是禁用自动触发。
 
auto-aof-rewrite-min-size 64mb
#文件大于基准值,才会进行重写。这个是AOF文件执行重写的最小值,避免开始启动redis后,文件太小,然后频繁的进行重写。​
必须要有auto-aof-rewrite-min-size 64mb。
否则会频繁重写。如果配置定时任务需要先注释掉auto-aof-rewrite-percentage 100否则会自动生效。

AOF重写为什么可以压缩文件?

1、 在重写的过程中,如果有过期的数据不会写入文件

2、 重写的过程中无效的命令不再写入文件,数据被重复设置,例如:set test=1 set test=2。删除的数据也不会写入,例如:set test 1 del test

3、 多条命令合并成一个。例如:sadd test1 v1 sadd test1 v2 sadd test1 v3 合并为 sadd test1 v1 v2 v3

重写之后,AOF的文件当中的命令减少了,空间也少了,恢复速度也怎加了。(重写不是必须的)
 

RDB和AOF的优缺点

RDB的优点:文件体积小,网络传输的速度很快,适合全量复制。恢复速度比AOF快。
RDB的缺点:做不到实时的持久化,数据如此重要,不能够容忍数据丢失。RDB需要满足特定的格式,兼容性很差。
老版本的RDB不支持新版本。redis版本要一致

AOF的优点:秒级持久化,兼容性好(文本格式保存命令通用)。
AOF的缺点:文件大,恢复速度慢。AOF持久化,需要频繁的向磁盘写入数据,磁盘的io压力大,对redis的主进程新能也有一定的影响

启动时加载发现rdb文件被损坏,日志中会打印错误,redis会拒绝启动。redis-check-rdb 修复RDB的持久化文件。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【HCSD大咖直播】亲授大厂面试秘诀【云驻共创】

同学们&#xff0c;毕业季是否找到了自己心仪的工作呢&#xff1f;是否了解大厂面试流程、要求以及技巧呢&#xff1f;华为云IoT高级工程师&#xff0c;传授大厂面试秘诀&#xff0c;教大家如何轻松get大厂offer&#xff01;提前为大厂面试做准备&#xff0c;赢在起跑线&#x…

新安装win11,搜索框无法输入的问题

正确的做法是如下: 1首先进入win11系统&#xff0c;在搜索框中输入“ 控制面板 ”将其打开2在控制面板中找到“时间和语言“ 标题 再选择“ 语言和区域”, 标题 在显示的语言上面&#xff0c;点击省略号&#xff0c;进入语言选项 标题 在键盘处&#xff0c;删除不需要的输入法…

C++纯虚函数和抽象类 制作饮品案例(涉及知识点:继承,多态,实例化继承抽象类的子类,多文件实现项目)

一.纯虚函数的由来 在多态中&#xff0c;通常父类中虚函数的实现是毫无意义的&#xff0c;主要都是调用子类重写的内容。例如&#xff1a; #include<iostream>using namespace std;class AbstractCalculator { public:int m_Num1;int m_Num2;virtual int getResult(){r…

docker和docker-compose生产的容器,不在同一个网段,解决方式

在实际项目中&#xff0c;使用docker run xxXx 和docker-compose up -d 不在同一个网段&#xff0c;一个是默认是172.17.x.x, 另一个是172.19.x.x。为解决这个问题需要自定义一个网络&#xff0c;我命名为“my-bridge” 首先熟悉几条命令&#xff1a; docker network ls 或…

如何理解低代码开发工具?

目录 一、低代码平台是什么 1. 数据输入 2. 数据流转 3. 数据加工 4. 数据输出 &#xff08;1&#xff09;视图&#xff1a;单表的数据的简单展示 &#xff08;2&#xff09;看板&#xff1a;提供单表、多表数据的多种图表组合展示 二、低代码能力 ➪ 全栈可视化编程&#xff1…

你知道Linux操作系统的前世今生吗?Linux系统又该如何搭建呢?

文章目录 前言1. Linux 是什么1.1 Unix & Linux 发展历程图1.2 Linux 的发展1.3 Linux 的发行版 2. Linux 环境搭建2.1 环境搭建方式2.2 使用云服务器 3. 使用终端软件连接到 Linux3.1 什么是终端软件3.2 下载安装 XShell3.3 使用 XShell 登陆主机 总结 前言 可能很多人都…

labelImg

labelImg 在anaconda虚拟环境中安装labelImg 进入conda虚拟环境DL2中 输入命令&#xff1a; pip install PyQt5 pip install pyqt5-tools pip install lxml pip install labelimg PyQt5:是用于创建GUI应用程序的跨平台工具包&#xff0c;它将Python与Qt库融为一体 Lxml&#…

深信服技术认证“SCSA-S”划重点:渗透测试工具使用

为帮助大家更加系统化的学习网络安全知识&#xff0c;尽快通过深信服安全服务认证工程师认证&#xff0c;深信服推出“SCSA-S认证备考秘笈”共十期内容&#xff0c;“考试重点”内容框架&#xff0c;帮助大家快速get重点知识~ 划重点来啦 深信服安全服务认证工程师&#xff08;…

CVE-2023-0179提权利用

前言 在CVE-2023-0179-Nftables整型溢出中&#xff0c;分析了漏洞的成因&#xff0c;接下来分析漏洞的利用。 漏洞利用 根据漏洞成因可以知道&#xff0c;payload_eval_copy_vlan函数存在整型溢出&#xff0c;导致我们将vlan头部结构拷贝到寄存器&#xff08;NFT_REG32_00-N…

【SpringBoot】通过profiles设置环境

效果图&#xff0c;通过profiles设置环境 在父级pom.xml中添加配置 <profiles><profile><id>dev</id><properties><application.environment>dev</application.environment></properties><activation><activeByDefau…

OceanBase:OBServer节点管理

目录 1.查看节点 2.添加节点 2.1 创建数据目录 2.2.OceanBase 运行时所依赖的部分三方动态库 2.3.安装 OceanBase 数据库的 RPM 包 2.4.启动节点 observer 进程 2.5.向集群中添加节点 3.隔离节点 4.重启节点 4.1 停止服务 4.2 转储 4.3 关闭进程 4.4 启动进程 4.…

【原创】为MybatisPlus增加一个逻辑删除插件,让XML中的SQL也能自动增加逻辑删除功能

前言 看到这个标题有人就要说了&#xff0c;D哥啊&#xff0c;MybatisPlus不是本来就有逻辑删除的配置吗&#xff0c;比如TableLogic注解&#xff0c;配置文件里也能添加如下配置设置逻辑删除。 mybatis-plus:mapper-locations: classpath*:mapper/*.xmlconfiguration:mapUnd…

Java-认识String类

本章重点&#xff1a; 1. 认识 String 类 2. 了解 String 类的基本用法 3. 熟练掌握 String 类的常见操作 4. 认识字符串常量池 5. 认识 StringBuffer 和 StringBuilder 1.String类的重要性 在C语言中已经涉及到字符串了&#xff0c;但是在C语言中要表示字符串只能使用字符数组…

C++中的内存管理

✨前言✨ &#x1f4d8; 博客主页&#xff1a;to Keep博客主页 &#x1f646;欢迎关注&#xff0c;&#x1f44d;点赞&#xff0c;&#x1f4dd;留言评论 ⏳首发时间&#xff1a;2023年11月21日 &#x1f4e8; 博主码云地址&#xff1a;博主码云地址 &#x1f4d5;参考书籍&…

如何选择适合的开源框架来构建微服务架构?

随着科技的飞速发展&#xff0c;云计算和大规模应用的需求日益显著&#xff0c;这促使微服务架构在软件开发领域中占据了主流地位。微服务架构的广泛应用为开发人员提供了灵活性、可伸缩性和高可用性&#xff0c;从而推动了快速的应用程序开发。然而&#xff0c;在构建微服务架…

ky10 server x86 安装、更新openssl3.1.4(在线编译安装、离线安装)

查看openssl版本 openssl version 离线编译安装升级 #!/bin/shOPENSSLVER3.1.4OPENSSL_Vopenssl versionecho "当前OpenSSL 版本 ${OPENSSL_V}" #------------------------------------------------ #wget https://www.openssl.org/source/openssl-3.1.4.tar.gzech…

git撤销某一次commit提交

一&#xff1a;撤销上一次commit提交&#xff0c;但不删除修改的代码 可以使用使用VSCode 二&#xff1a;使用 git reset --hard命令删除提交时&#xff0c;将会删除该提交及其之后的所有更改&#xff08;相当于你想要回滚到的提交的提交ID&#xff09; git reset --hard 版本…

ubuntu18.04安装并运行ORB-SLAM2

查看版本号 lsb_release -a 换源 Ubuntu系统自带的源都是国外的网址&#xff0c;国内用户在使用的时候下载比较慢甚至无法获取&#xff0c;需要替换成国内的镜像源 备份源文件 sudo cp /etc/apt/sources.list /etc/apt/sources.list.old 打开文件 sudo gedit /etc/apt/so…

【Python】153是一个非常特殊的数,它等于它的每位数字的立方和,即153=1*1*1+5*5*5+3*3*3。编程求所有满足这种条件的三位十进制数。

问题描述 153是一个非常特殊的数&#xff0c;它等于它的每位数字的立方和&#xff0c;即1531*1*15*5*53*3*3。编程求所有满足这种条件的三位十进制数。 输出格式 按从小到大的顺序输出满足条件的三位十进制数&#xff0c;每个数占一行。 方法一&#xff1a; for i in range(10…

入行IC | 从小白助理级,到总监专家级,到底要经历怎样的成长阶段呢?

《中国集成电路产业人才发展报告》是业内和IC设计、IC人才都息息相关的一份报告。 &#xff08;文末可领全部报告资料&#xff09; * 从报告数据来看&#xff0c;无论在半导体产业的哪个环节&#xff0c;个人发展路径和年薪待遇都是逐级攀升的趋势。 那么从小白助理级&a…
最新文章