redis 高可用

redis 的性能管理:redis的数据缓存在内存当中。

查看redis性能指标:info memory

used_ memory:1800800 redis中数据占用的内存

used_ memory_ rss:5783552 redis向操作系统申请的内存

used_ memory_ peak: 1800800 redis使用内存的峰值。

工作有用

单位都是字节

生产中一大早就要 系统巡检:硬件巡检,数据库 nginx redis docker k8s

内存碎片率:used_memory_rss/used_memory

系统已经分配给了redis,但是redis未能够利用的内存。

查看碎片比例

redis-cli info memory | grep ratio

allocator_ frag. ratio:1.19

分配器碎片的比例,redis主进程调度时生产的内存,比例越小越好,值越高内存浪费越多。

allocator_ rss ratio:7.15

分配器占用物理内存的比例,告诉你主进程调度执行时占用了多少物理内存。

rss_ overhead_ ratio:0.31

RSS是向系统申请的内存空间,redis占用物理空间额外的开销比例,比例越低越好, redis实际占用的物理内存和向系统申请的内存越接近,额外的开销越低。

mem_fragmentation_ ratio:3.33

内存碎片的比例,越低越好,内存的使用率越高。

如何清理碎片

手动:redis-cli memory purge

自动:

vim /etc/redis/6379 . conf

在最后一行插入

activedefrag yes

设置redis的最大内存阈值(设置多少看需求):

一旦到达阈值,自动清理碎片,开启key的回收机制。

key回收机制:不用随机清理的方法

maxmemory-policy volatile-lru: 使用redis内置的LR算法,把已经设置了过期时间的键值对中淘汰数据,一次最近最少使用键值对(针对已经设置了过期时间的键值对)

maxmemory-policy volatile-ttI : 已经设置了过期时间的键值对,从当中挑选一个即将过期的键值对(针对有设置时间的键值对)

maxmemory-policy volatile-random:从已经设置了过期时间的键值对当中,挑选数据随机淘汰键值对。(对设置了过期时间的键值对进行随机淘汰,不怎么用)

allkeys-lru:LRU算法当中,对所有的键值对进行淘汰,移除最少使用的键值对。(针对所有的键值对)

allkeys-random:对所有键值对随机选择淘汰。不用

maxmemory-policy noeviction : 禁止键值对回收(不删除任何键值对,直到redis把内存塞满,写不了,报错为止)

在工作中,一定要给redis占用内存设置阈值

面试题:你在工作中如果redis占用内存满了,效率问题如何解决:

1,日常巡检当中,对redis的占用情况做监控

2,设置redis占用系统内存的阈值,避免占用系统全部内存

3,内存碎片清理,手动 自动。

4,配置合适的key回收机制。

redis的雪崩:

缓存雪崩:大量的应用请求无法在redis缓存当中处理,请求会全部发送到后台数据库,数据库并发能力本身就很差。大量的读写的压力就会激增,一旦高并发,数据库很快崩溃

redis集群大面积故障

redis缓存中,大量随机提升过期,大量的请求无法得到处理

redis实时宕机。

解决方案:

事前:高可用架构,防止整个缓存故障。主从复制和哨兵面试 redis集群。

事中:在国内用的比较多的方式:HySTRIX,熔断,降级,限流三个手段来降低雪崩发生之后的损失。数据库不死即可,慢,但有响应。

事后,redis备份。快速缓存预热。

redis的缓存击穿:面试可能问

缓存击穿主要是热点数据的缓存过期,或者被删除,多个请求并发访问热点事件,请求也是转发到了数据库了,导致数据库的性能快速下降。

经常被请求的缓存数据,最好设置为永不过期。

键值对还在,但是值被替换了,原有的请求找不到了,同样也回去请求后台数据库。数据恢复即可。

redis的缓存穿透:

缓存中没有数据,数据库也没有对应数据,但是有用户一直在发起这个都没有的请求,而且请求的数据格式很大。黑客在利用漏洞攻击,压垮应用数据库。

redis的集群:

高可用方案

1,持久化

2,高可用 主从复制 哨兵模式 集群

主从复制:是redis实现高可用的基础,哨兵模式和集群都是在主从复制的基础之上实现高可用。

主从复制实现数据的多机备份,以及读写分离(主服务器负责写,从服务器只能读)。

缺陷:故障无法自动恢复,需要人工干预,写操作的负载均衡。

主从复制的工作原理:

1,主节点(master)从节点(slave)组成,数据复制是单项的,只能从主节点到从节点

关闭防火墙:

systemctl stop firewalld

setenforce 0

vim /etc/redis/6379.conf

主:

修改监听地址

bind 0.0.0.0

打开aof同步

appendonly yes

/etc/init.d/redis_6379 restart 重启

从:

bind 0.0.0.0

配置指向主的IP地址和端口

288 行

replicaof 192.168.176.71 6379

700行 打开aof同步

appendonly yes

/etc/init.d/redis_6379 restart 重启

验证主从模式:

从不能写

为了应对主挂了之后,应用了哨兵模式,

先有主从再有哨兵

再主从复制的基础之上,实现主节点故障的自动切换。

哨兵模式的原理:

哨兵:是一个分布式系统,用于再主从结构之间,对每台redis的服务进行监控。

主节点出现故障时,从节点通过投票的方式选择一个新的master

哨兵模式也需要至少三个节点。

哨兵模式的结构:

哨兵节点:监控,不存储数据

数据节点:阿虎节点和从节点的都是数据节点

哨兵模式的原理:

每个设备节点每隔一秒,通过平目录方式,检测主从之间的心跳线。主节点在一定时间内没有回复,或者回复了一个错误信息,哨兵就会主观的认为主节点下线的,只有超过半数的哨兵阶段的认为主节点下线了,这个时候才会认为主节点是客观下线。

哨兵节点如何切换

哨兵节点会通过raft算法(选举算法)每个节点都会投票,共同投票,选举出一个新的master,然后新的master实现主节点转移和故障恢复通知。

主节点的选举过程:

1,已经下线的主节点,不会选为主节点

2,会选择配置文件当中,从节点优先级最高的replica-priority (默认都是100 所以不推荐)

3,选择一个复制数据最完整的从节点

哨兵监控的是节点心跳线:

故障恢复需要时间。

依据的是源码包

vim sentinel.conf

关闭默认模式

protected-mode no

哨兵模式的默认端口

port 26379

指定哨兵模式后台运行

daemonize yes

指定日志文件存放路径

logfile "/var/log/sentinel.log"

数据库存放的目录

dir "/var/lib/redis/6379"

指定初始主服务器

sentinel monitor mymaster 192.168.176.71 6379 2

原始主

2:表示至少需要两台服务器认为主已经下线,才会进行主从切换。

30秒之内没有进行响应,主观认为主挂了

sentinel down-after-milliseconds mymaster 30000

180内所有的都认为主挂了切换

sentinel failover-timeout mymaster 180000

启动哨兵(先启主,在起从)

redis-sentinel sentinel.conf &

查看整个集群的哨兵模式情况

redis-cli -p 26379 info Sentinel

查看哨兵日志

tail -f /var/log/sentinel.log

模拟故障切换:

/etc/init.d/redis_6379 stop

查看端口:

ps -elf | grep redis

打开日志查看切换

tail -f /var/log/sentinel.log

主以自动切换。

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

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

相关文章

持续集成失败:hudson.plugins.git.GitException: Failed to delete workspace

持续集成环境(git gitlab jenkins pipeline maven harbor docker k8s)之前都是ok的,突然就报错了: Cloning the remote Git repository Cloning repository git192.168.117.180:qzcsbj/gift.git ERROR: Failed to clean the workspace jenkins.ut…

2023年【安全生产监管人员】考试题及安全生产监管人员找解析

题库来源:安全生产模拟考试一点通公众号小程序 安全生产监管人员考试题参考答案及安全生产监管人员考试试题解析是安全生产模拟考试一点通题库老师及安全生产监管人员操作证已考过的学员汇总,相对有效帮助安全生产监管人员找解析学员顺利通过考试。 1、…

【问题定位】通过看Mybatis源码解决系统问题

开发需求好好的,运维同事突然发现了一个问题,某个任务的详情页面加载不出来。看日志,系统在进行查询操作的时候抛出空指针异常。感觉是Mybatis内部异常,所以就跟踪源码看下Mybatis运行到哪一步报错的。 DefaultSqlSession#select…

LeetCode算法题解(动态规划)|LeetCode343. 整数拆分、LeetCode96. 不同的二叉搜索树

一、LeetCode343. 整数拆分 题目链接:343. 整数拆分 题目描述: 给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k > 2 ),并使这些整数的乘积最大化。 返回 你可以获得的最大乘积 。 示例 1: 输入…

【Linux】-进程间通信-共享内存(SystemV),详解接口函数以及原理(使用管道处理同步互斥机制)

💖作者:小树苗渴望变成参天大树🎈 🎉作者宣言:认真写好每一篇博客💤 🎊作者gitee:gitee✨ 💞作者专栏:C语言,数据结构初阶,Linux,C 动态规划算法🎄 如 果 你 …

pyqt5的组合式部件制作(四)

对组合式部件的制作又改进了一版,组合式部件的子部件不再需要单独“提升为”,如果在模板文件的提升部件窗口内选择了“全局包含”,那么只需要在模板文件和应用文件中直接复制粘贴即可,部件的应用更为简便。如下图:按住…

docker、elasticsearch8、springboot3集成备忘

目录 一、背景 二、安装docker 三、下载安装elasticsearch 四、下载安装elasticsearch-head 五、springboot集成elasticsearch 一、背景 前两年研究了一段时间elasticsearch,当时也是网上找了很多资料,最后解决个各种问题可以在springboot上运行了…

>Web 3.0顶级干货教学:浅析区块链与货币关系

Web 3.0顶级干货教学🔥:浅析区块链与货币关系 尊重原创,编写不易 ,帮忙点赞关注一下~转载小伙伴请注明出处!谢谢 1.0 数字交易 最早一笔数字化交易 是在www.PizzaHut.com 在 1994 年产生的,但是有趣的事情…

oracle面试相关的,Oracle基本操作的SQL命令

文章目录 数据库-Oracle〇、Oracle用户管理一、Oracle数据库操作二、Oracle表操作1、创建表2、删除表3、重命名表4、增加字段5、修改字段6、重名字段7、删除字段8、添加主键9、删除主键10、创建索引11、删除索引12、创建视图13、删除视图 三、Oracle操作数据1、数据查询2、插入…

linux部署jar 常见问题

1.java -jar xxx.jar no main manifest attribute, in xxx.jar 一.no main manifest attribute, in xxx.jar 在pom.xml文件中加入&#xff1a; <plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifac…

【DevOps】Git 图文详解(八):后悔药 - 撤销变更

Git 图文详解&#xff08;八&#xff09;&#xff1a;后悔药 - 撤销变更 1.后悔指令 &#x1f525;2.回退版本 reset3.撤销提交 revert4.checkout / reset / revert 总结 发现写错了要回退怎么办&#xff1f;看看下面几种后悔指令吧&#xff01; ❓ 还没提交的怎么撤销&#x…

QTableWidget——编辑单元格

文章目录 前言熟悉QTableWiget&#xff0c;通过实现单元格的合并、拆分、通过编辑界面实现表格内容及属性的配置、实现表格的粘贴复制功能熟悉QTableWiget的属性 一、[单元格的合并、拆分](https://blog.csdn.net/qq_15672897/article/details/134476530?spm1001.2014.3001.55…

Linux中的进程程序替换

Linux中的进程程序替换 1. 替换原理2. 替换函数3. 函数解释4. 命名理解程序替换的意义 1. 替换原理 替换原理 用fork创建子进程后执行的是和父进程相同的程序(但有可能执行不同的代码分支),子进程往往要调用一种exec函数以执行另一个程序。当进程调用一种exec函数时,该进程的…

Vue 定义只读数据 readonly

readonly 让一个响应式数据变为 **深层次的只读数据**。 isReadonly 判断一个数据是不是只读数据。 应用场景&#xff1a;不希望数据被修改时使用。 readonly 深层次只读&#xff1a; <template><h1>reactive数据</h1><p>姓名&#xff1a;{{ info…

BUUCTF 梅花香之苦寒来 1

BUUCTF:https://buuoj.cn/challenges 题目描述&#xff1a; 注意&#xff1a;得到的 flag 请包上 flag{} 提交 密文&#xff1a; 下载附件&#xff0c;解压得到一张.jpg图片。 解题思路&#xff1a; 1、用010 Editor看了一下&#xff0c;刚开始以为是修改宽高的题&#xff…

【C++干货铺】list的使用 | 模拟实现

个人主页点击直达&#xff1a;小白不是程序媛 C专栏&#xff1a;C干货铺 代码仓库&#xff1a;Gitee 目录 list的介绍及使用 list的介绍 list的使用 list的构造 list迭代器的使用 list的增删查改 list的模拟实现 结点的封装 迭代器的封装 list成员变量 构造函数 …

22LLMSecEval数据集及其在评估大模型代码安全中的应用:GPT3和Codex根据LLMSecEval的提示生成代码和代码补全,CodeQL进行安全评估

LLMSecEval: A Dataset of Natural Language Prompts for Security Evaluations 写在最前面主要工作 课堂讨论大模型和密码方向&#xff08;没做&#xff0c;只是一个idea&#xff09; 相关研究提示集目标NL提示的建立NL提示的建立流程 数据集数据集分析 存在的问题 写在最前面…

一篇五分生信临床模型预测文章代码复现——Figure 10.机制及肿瘤免疫浸润(六)

之前讲过临床模型预测的专栏,但那只是基础版本,下面我们以自噬相关基因为例子,模仿一篇五分文章,将图和代码复现出来,学会本专栏课程,可以具备发一篇五分左右文章的水平: 本专栏目录如下: Figure 1:差异表达基因及预后基因筛选(图片仅供参考) Figure 2. 生存分析,…

【开源】基于Vue和SpringBoot的高校宿舍调配管理系统

项目编号&#xff1a; S 051 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S051&#xff0c;文末获取源码。} 项目编号&#xff1a;S051&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能需求2.1 学生端2.2 宿管2.3 老师端 三、系统…

C语言每日一题(35)有效的括号

力扣网 20 有效的括号 题目描述 给定一个只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&#xff0c;[&#xff0c;] 的字符串 s &#xff0c;判断字符串是否有效。 有效字符串需满足&#xff1a; 左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。每个右…