redis的性能管理及集群架构(主从复制、哨兵模式)

一、redis的性能管理

1、内存指标info memory

内存指标(重要)

used_memory:853736

数据占用的内存

used_memory_rss:10551296

redis向操作系统申请的内存

used_memory_peak:853736

redis使用内存的峰值

注:单位:字节

系统巡检:硬件巡检、数据库、中间件(nginx、redis)、docker、k8s

2内存碎片率

(1)定义:系统已分配给redis,但reids未能有效利用的内存

(2)计算格式:内存碎片率=used_memory_rss/used_memory

(3)监控指标redis-cli info memory|grep ratio(生产环境常用)

监控指标

定义

allocator_frag_ratio:1.29

分配器碎片的比例

(越小越好,值越高,内存浪费越多)

redis主进程调度时产生的内存

allocator_rss_ratio:5.49

分配器占用物理内存的比例

主进程调度时占用的物理内存

rss_overhead_ratio:1.38

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

RSS是redis向系统申请的内存空间

mem_fragmentation_ratio:15.59

内存碎片率

(越低越好,内存使用率越高)

3、清理内存的两种方式

(1)自动清理碎片vim /etc/redis/6379.conf

末尾添加activedefrag yes自动清理碎片的配置

2手动清理碎片redis-cli memory purge

4、设置redis的最大内存阀值

(在工作中一定要设置redis的占用内存阈值。若不设置阈值,会塞满内存,直到炸)

(1)先设置最大内存阀值vim /etc/redis/6379.conf

添加maxmemory 1gb

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

(2)再开启key的回收机制

key的回收机制

maxmemory-policy volatile-lru

(常用)

使用redis内置的lru算法,在已设置过期时间的键值对中淘汰数据中,移除最近最少使用的键值对

maxmemory-policy volatile-ttl

(常用)

使用redis内置的ttl算法,在已设置过期时间的键值对中挑选一个即将过期的键值对

maxmemory-policy volatile-random

(少用)

在已设置过期时间的键值对中,挑选数据,随机淘汰键值对

注:以上算法只针对已设置过期时间的键值对,永不过期的不在此范围内

allkeys-lru

使用redis内置的lru算法,对所有的键值对进行淘汰,移除最少使用的键值对

allkeys-random

(更少用)

在所有键值对中任意选择数据进行淘汰

注:以上算法针对所有的键值对,无论是否设置过期时间

maxmemory-policy noeviction

(最常用)

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

【面试题】redis占用内存的效率问题如何解决?(经验)

①日常巡检中,监控redis的占用情况

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

③手动/自动清理内存碎片

④配置合适的key回收机制

5redis雪崩(缓存雪崩)(少见)

(1)定义

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

(2)产生雪崩的原因

①redis集群大面积故障

②在redis缓存中,大量数据同时过期,大量的请求无法得到处理

③redis实例宕机

(3)解决雪崩的方式

①事前预防:采用高可用架构(主从复制、哨兵模式、redis集群),防止整个缓存故障

②事中处理(开发):在国内通用方式——HySTRIX(熔断、降级、限流),降低雪崩发生后的损失,确保数据库不死,可以慢,但不能没有响应

③事后解决:以redis备份的方式恢复数据(运维)或快速缓存预热(开发)

6、redis的缓存击穿(重点)

(1)产生原因

①热点数据缓存过期或被删除,当多个请求并发访问热点数据时,请求转发到数据库,导致数据库性能快速下降。经常被请求的缓存数据最好设置为永不过期

②键值对还在,但值被替换,原有的请求找不到之后,同样会请求后台数据库,导致数据库性能快速下降

(2)解决方式

①热点数据设置成永不过期

②恢复原有的值

7、redis的缓存穿透(恶意攻击)(很少见)

(1)定义

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

(2)解决方式:专门的安全人员处理

redis的集群架构

1、高可用方案

(1)主从复制

(2)哨兵模式

(3)redis集群

2、主从复制

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

(2)主从复制实现数据的多机备份和读写分离(主服务器——写,从服务器——读)

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

3、主从复制的工作原理

由主节点master和从节点slave组成,数据复制是单向的,只能从主节点到从节点

4、哨兵模式

在主从复制的基础上实现主节点故障的自动切换

(1)哨兵模式定义

哨兵是一个分布式系统,用于在主从结构之间,对每台redis服务进行监控。主节点出现故障时,从节点通过投票的方式选择一个新的master

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

(2)哨兵模式的结构

①哨兵节点:监控主、从节点,不存储数据

②数据节点:主节点和从节点,都是数据节点

(哨兵1监控从1,从2节点;哨兵2监控主节点,从2 节点;哨兵3监控主节点,从1节点)

(2)哨兵模式工作原理

每个哨兵节点每隔一秒,通过ping命令方式,检测主、从之间的心跳线,主节点在一定时间内没有回复或回复了错误消息,这个时候哨兵会主观认为主节点下线了;超过半数的哨兵节点认为主节点下线了,这个时候才会认为主节点是客观下线

故障恢复可能会有延迟,因为有一个选举过程

(4)如何选举新的主节点

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

(5)主节点的选举过程

①已下线的从节点不会被选为主节点

②选择配置文件中从节点优先级最高的replica-priority 100

③自动选择一个复制数据最完整的从节点

三、主从复制+哨兵模式实验

基于主从复制做哨兵模式实验

实验目的:解决redis单节点故障问题

实验条件:

IP地址

作用

组件

20.0.0.14

主服务器

redis服务

20.0.0.24

从服务器1

redis服务

20.0.0.34

从服务器2

redis服务

实验步骤:

1、主从复制实验

(1)配置主服务器

(2)配置从服务器

从1

从2

replicaof 20.0.0.14 6379表示只读(20.0.0.14是主服务器的IP地址)

主从复制完成

(3)测试

2、哨兵模式实验

(1)配置主服务器

这个2:一般设置成集群的一半

最小切换时间30秒

最大切换时间180秒

(2)配置从服务器

从1

从2(与从1同样的配置)

(3)启动主从服务器(先启动主再启动从)

redis-sentinel sentinel.conf &

监控哨兵集群的信息redis-cli -p 26379 info Sentinel

哨兵模式搭建完毕

查看从节点信息tail -f /var/log/sentinel.log

(4)故障切换

模拟故障

看日志是否主从切换,有延迟

tail -f /var/log/sentinel.log

目前,新主的IP地址是20.0.0.34

(5)测试

①测试新主能不能写

恢复原主

②测试原主能否继续写

不能

原因:配置文件/etc/redis/6379.conf发生变化

原主(现从2)

从1

原从2(新主)

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

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

相关文章

如何使用ArcGIS Pro进行坐标转换

不同来源的数据坐标系可能是不同的,为了统一使用这些数据就需要进行坐标转换,ArcGIS Pro作为专业的GIS软件,坐标转换功能肯定也是包含的,这里为大家介绍一下ArcGIS Pro如何进行坐标转换,希望能对你有所帮助。 数据来源…

2023-11-22 LeetCode每日一题(网格中的最小路径代价)

2023-11-22每日一题 一、题目编号 2304. 网格中的最小路径代价二、题目链接 点击跳转到题目位置 三、题目描述 给你一个下标从 0 开始的整数矩阵 grid ,矩阵大小为 m x n ,由从 0 到 m * n - 1 的不同整数组成。你可以在此矩阵中,从一个…

Python中控制台如何展示进度条——tqdm库使用

在 Python 中可以使用特定的库来创建控制台进度条,其中 tqdm 是一个常用的选择,它能够方便地显示进度条并跟踪迭代的进度。你可以通过 pip 安装 tqdm 库: pip install tqdm包装迭代器: 使用 tqdm 来包装你的迭代器,比…

Tomcat实现WebSocket即时通讯 Java实现WebSocket的两种方式

HTTP协议是“请求-响应”模式,浏览器必须先发请求给服务器,服务器才会响应该请求。即服务器不会主动发送数据给浏览器。 实时性要求高的应用,如在线游戏、股票实时报价和在线协同编辑等,浏览器需实时显示服务器的最新数据&#x…

HQL刷题 50道

HQL刷题 50道 尚硅谷HQL刷题网站 答案 1.查询累积销量排名第二的商品 select sku_id from (select sku_id, dense_rank() over (order by total desc) rnfrom (select sku_id, sum(sku_num) totalfrom order_detailgroup by sku_id) t1) t2 where rn 2;2.查询至少连续三天下…

排序算法--快速排序

实现逻辑 ① 从数列中挑出一个元素,称为 “基准”(pivot), ② 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这…

「Verilog学习笔记」含有无关项的序列检测

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点,刷题网站用的是牛客网 timescale 1ns/1ns module sequence_detect(input clk,input rst_n,input a,output reg match);reg [8:0] a_tem ; always (posedge clk or negedge rst_n) begin if (~rs…

汽车级芯片NCV7518MWATXG 可编程六沟道低压侧 MOSFET预驱动器 特点、参数及应用

NCV7518MWATXG 可编程六沟道低压侧 MOSFET 预驱动器属于 FLEXMOS™ 汽车级产品,用于驱动逻辑电平 MOSFET。该产品可通过串行 SPI 和并行输入组合控制。该器件提供 3.3 V/5 V 兼容输入,并且串行输出驱动器可以采用 3.3 V 或 5 V 供电。内部通电重置提供受…

cocos2dx ​​Animate3D(二)

Twirl 扭曲旋转特效 // 持续时间(时间过后不会回到原来的样子) // 整个屏幕被分成几行几列 // 扭曲中心位置 // 扭曲的数量 // 振幅 static Twirl* create(float duration, const Size& gridSize, const Vec2& position, unsigned int twirls, float amplitude)…

供应链和物流的自动化新时代

今天,当大多数人想到物流自动化时,他们会想到设备。机器人、无人机和自主卡车运输在大家的谈话中占主导地位。全自动化仓库的视频在网上流传,新闻主播们为就业问题绞尽脑汁。这种炒作是不完整的,它错过了供应链和物流公司的机会。…

【开源】基于Vue和SpringBoot的创意工坊双创管理系统

项目编号: S 049 ,文末获取源码。 \color{red}{项目编号:S049,文末获取源码。} 项目编号:S049,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 管理员端2.2 Web 端2.3 移动端 三、…

ros2不同机器通讯时IP设置

看到这就是不同机器的IP地址,为了避免在路由器为不同的机器使用DHCP分配到上面的地址,可以设置DHCP分配的范围:(我的路由器是如下设置的,一般路由器型号都不一样,自己找一下) 防火墙设置-----&…