redis的性能管理、主从复制和哨兵模式

news2024/11/17 19:45:13

一、redis的性能管理

redis的数据时缓存在内存中的

查看系统内存情况

info memory

used_memory:853688 redis中数据占用的内存

used_memory_rss:10522624 redis向操作系统申请的内存

used_memory_peak:853688 redis使用内存的峰值

系统巡检:硬件巡检、数据库 nginx redis docker k8s等软件巡检

内存碎片率:used_memory_rss/used_memory=内存碎片率

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

查询比率:

redis-cli info memory | grep ratio

allocator_frag_ratio:1.26

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

allocator_rss_ratio:4.54

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

rss_overhead_ratio:1.36

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

mem_fragmentation_ratio:15.16

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

清理碎片:

自动清理碎片:

vim /etc/redis/6379.conf

最后一行插入:

activedefrag yes

开启自动清理

要设置redis最大内存阀值

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

567行

设置占用最大内存

maxmemory 1gb

一定要设置占用内存的阀值

598行

设置开启key的回收机制:

key回收策略:

maxmemory-policy volatile-lru

使用redis内置的LRU算法,把已经设置了过期时间的键值对中淘汰数据,移除最近最少使用的键值对(只是针对设置过期时间的键值对)

maxmemory-policy volatile-ttl

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

maxmemory-policy volatile-random

从已经设置的过期的键值对当中,挑选数据随机淘汰键值对(对设置了过期时间的键值对进行随意移除)

allkeys-lru

根据LRU算法当中,对所有的键值对进行淘汰,移除最少使用的键值对(针对所有的键值对)

allkeys-random

从所有键值对中,任意选项数据进行淘汰

maxmemory-policy noeviction

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

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

手动配置:

redis-cli memory purge

工作中reids占用内存效率问题如何处理:

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

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

3、内存碎片清理,手动和自动清理

4、配置合适的key回收机制

redis雪崩:

也是缓存雪崩:大量的应用请求无法在redis缓存中处理,请求会全部发送到后台数据库,

数据库本身并发能力就差,一旦高并发,数据库会很快崩溃

导致雪崩的原因:

redis集群大面积故障

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

redis实例宕机。

解决方法:

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

事中:在国内用的比较多的方式:HySTRIX,熔断,降级,限流三个手段来降低雪崩发生过后的损失

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

redis的缓存击穿:

导致原因:

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

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

redis缓存穿透:

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

键值对还在,但是值被替换了,原有的请求找不到之后,同样也会去请求后台的数据库,也是击穿的一种

redis的集群

高可用方案:

  1. 持久化
  2. 高可用 主从复制 哨兵模式 集群

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

主从复制实现数据的多级备份,以及读写分离(主负责写,从负责读)

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

主从复制的工作原理:

  1. 主节点 master 从节点slave组成,数据的复制时单向的,只能从主节点到从节点

架构配置:

主从复制:

主 20.0.0.41

从1  20.0.0.42

从2 20.0.0.43

关防火墙和安全机制

修改master节点的配置文件 

vim /etc/redis/6379.conf

 bind 0.0.0.0                      #70行,修改监听地址为0.0.0.0(生产环境中,尤其是多网卡最好填写物理网卡的IP)

 daemonize yes                     #137行,开启守护进程,后台启动

 logfile /var/log/redis_6379.log   #172行,指定日志文件存放目录

 dir /var/lib/redis/6379           #264行,指定工作目录

 appendonly yes                    #700行,开启AOF持久化功能

/etc/init.d/redis_6379 restart     #重启redis服务

改两个slave节点的配置文件 

#修改slave1的配置文件

vim /etc/redis/6379.conf

 bind 0.0.0.0                        #70行,修改监听地址为0.0.0.0(生产环境中需要填写物理网卡的IP)

 daemonize yes                       #137行,开启守护进程,后台启动

 logfile /var/log/redis_6379.log     #172行,指定日志文件目录

 dir /var/lib/redis/6379             #264行,指定工作目录

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

 appendonly yes                      #700行,修改为yes,开启AOF持久化功能

/etc/init.d/redis_6379 restart  #重启redis

netstat -natp | grep redis      #查看主从服务器是否已建立连接

tail -f /var/log/redis_6379.log

实验测试:

主节点创建数据,从节点是否同步

只有主节点能读写,从节点只能读

查看主从状态信息:

redis-cli info replication

哨兵模式:

先有主从然后再有哨兵,在主从复制的基础只上,实现主节点故障的自动切换。

哨兵模式的原理:

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

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

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

哨兵模式的结构:
哨兵节点:监控,不存储任何数据

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

redis工作机制:
哨兵监控的是redis的节点,不是监控哨兵

每个哨兵每隔一秒,通过ping命令的方式,检测主从之间的心跳线

主节点在一定时间内没有回复,或则回复了错误消息。这个时候,哨兵会主观的任务主节点下线了。如果有超过半数的哨兵节点认为主节点下线了,在个时候才会认为主节点是客观下线

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

主节点选举的过程:

  1. 已经下线的从节点,不会被选为主节点
  2. 选择配置微文件中,从节点优先级最高的,replica-priority 100
  3. 选择一个复制数据最完整的从节点

哨兵模式,源码包里自带

主从配置方式一致:

vim /opt/redis-5.0.7/sentinel.conf

17行
protected-mode no

取消注释

关闭保护模式

21行

哨兵模式默认端口

26行

指定哨兵模式是否后台运行 改成yes

36行

是日志文件

65行

设置工作目录:

84行

指定初始的主服务器

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

 113行

判断服务器宕掉的服务周期

146行

故障节点的最大超时时间

配置完之后

重启服务

要先启master 再启slave

都在redis原码包目录下启动的

要在reids原码包目录下,启动

redis-sentinel sentinel.conf &

监控哨兵集群

查看整个集群的哨兵情况:

redis-cli -p 26379 info Sentinel

模拟故障:

先杀进程或暂停节点

然后投票选举一个master

测试结果,新master创建数据,slave同步数据

故障恢复,重启源master服务器

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

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

相关文章

【从浅识到熟知Linux】基本指令之rmdir和rm

🎈归属专栏:从浅学到熟知Linux 🚗个人主页:Jammingpro 🐟每日一句:加油努力,这次写完真的真的真的要去干饭了! 文章前言:本文介绍rmdir和rm指令用法并给出示例和截图。 文…

【Java】智慧工地云平台源码(APP+SaaS模式)

在谈论“智慧工地”之前,我们首先得知道传统工地为什么跟不上时代了。 说起传统工地,总有一些很突出的问题:比如工友多且杂,他们是否入场、身体状况如何,管理人员只能依靠巡查、手工纪录来判断,耗时耗力&am…

在CentOS 7.9上搭建高性能的FastDFS+Nginx文件服务器集群并实现外部远程访问

文章目录 引言第一部分:FastDFS介绍与安装1.1 FastDFS简介1.2 FastDFS安装1.2.1 安装Tracker Server1.2.2 安装Storage Server 1.3 FastDFS配置1.3.1 配置Tracker Server1.3.2 配置Storage Server1.3.3 启动FastDFS服务 第二部分:Nginx配置2.1 Nginx安装…

在线定制印刷系统源码/定制云印刷/个性印刷在线DIY定制商城系统/全站DIV+CSS 布局+手机、PC端

源码简介: 在线定制印刷系统源码/定制云印刷,它是个性印刷在线DIY定制商城系统,而且全站采用DIVCSS 布局,可以手机、PC端实时互通。 支持多种产品定制,包括但不限于水杯、雨伞、U盘、T恤、衬衫和四件套。独创的制作间…

Django必备知识点(图文详解)

目录 day02 django必备知识点 1.回顾 2.今日概要 3.路由系统 3.1 传统的路由 3.2 正则表达式路由 3.3 路由分发 小结 3.4 name 3.5 namespace 3.4 最后的 / 如何解决? 3.5 当前匹配对象 小结 4.视图 4.1 文件or文件夹 4.2 相对和绝对导入urls​编辑…

使用git下载远程所有分支到本地

使用git下载远程所有分支到本地: 打开gitbash 输入以下命令即可: git clone git地址 cd git文件夹 git branch -r | grep -v \-> | while read remote; do git branch --track "${remote#origin/}" "$remote"; done git fetch -…

深度学习第1天:深度学习入门-Keras与典型神经网络结构

☁️主页 Nowl 🔥专栏《机器学习实战》 《机器学习》 📑君子坐而论道,少年起而行之 文章目录 神经网络 介绍 结构 基本要素 Keras 介绍 导入 定义网络 模型训练 前馈神经网络 特点 常见类型 代码示例 反馈神经网络 特点 …

VC++彻底理解链接器:四,重定位

重定位 程序的运行过程就是CPU不断的从内存中取出指令然后执行执行的过程,对于函数调用来说比如我们在C/C语言中调用简单的加法函数add,其对应的汇编指令可能是这样的: call 0x4004fd 其中0x4004fd即为函数add在内存中的地址,当CPU执行这条…

全国测绘资质管理信息系统测绘资质申报流程

讲解一期关于测绘资质申请如何操作,在哪操作的问题,想要知道的按以下流程操作即可 (注:以下操作为资质系统操作,想要能把资质申请下来,还需满足以下要求,后面会和系统操作一起统一讲解&#xf…

K8S如何部署ActiveMQ(单机、集群)

前言 大家好,在今天的讨论中,我们将深入研究如何将ActiveMQ迁移到云端,以便更好地利用Kubernetes的容器调度和资源管理能力,确保ActiveMQ的高可用性和可扩展性。 ActiveMQ是Apache开源组织推出的一款开源的、完全支持JMS1.1和J2…

IBM X3650M4安装ESXI6.5卡在/lsl_mr3.v00

环境:IBM X3650M4服务器双盘配置raid1,通过rufus制作启动U盘,安装VMware Vsphere 5.5系统 问题:卡在/lsi_mr3.v00界面无法往下运行(两台配置一样的机器遇到同样的问题) 解决方案: 直接在U盘根…

软件设计中如何画各类图之二深入解析数据流图(DFD):系统设计与分析的关键视觉工具

目录 1 前言2 数据流图(DFD)的重要性3 数据流图的符号说明4 清晰的数据流图步骤4.1 确定系统边界4.2 识别数据流4.3 定义处理过程4.4 确认数据存储4.5 建立数据流动的连线4.6 细化和优化 5 数据流图的用途6 使用场景7 实际应用场景举例8 结语 1 前言 当…

Eclipse 设置try-cacth 默认格式

设置面板 第一处 第二处 其中NsRuntimeException是自定义的异常处理。这样设置后,打开代码补全功能,输入try回车就会默认显示设置的代码

雅可比矩阵(Jacobian Matrix)

假设给定一个从n维欧式空间到m维欧式空间的变换: 雅可比矩阵就是将一阶偏导数排列成一个m行、n列形式的矩阵,记作: 举一个例子: 雅可比矩阵等于:

新手如何对一个web网页进行一次渗透测试

新手如何对一个web网页进行一次渗透测试 什么是渗透测试? 在获得web服务运营的公司书面授权的情况下,模拟攻击者的行为,以确定系统的脆弱性,并为保护系统提供有效的建议。 渗透测试和红蓝对抗的区别 渗透测试和红蓝对抗别再傻傻分不清楚…

ChatGPT重磅升级!集简云支持GPT4 Turbo Vision, GPT4 Turbo, Dall.E 3,Whisper等最新模型

在11月7日凌晨,OpenAI全球开发者大会宣布了 GPT-4的一次大升级,推出了 GPT-4 Turbo号称为迄今为止最强的大模型。 此次GPT-4的更新和升级在多个方面显示出强大的优势和潜力。为了让集简云用户能快速体验新模型的能力,我们第一时间整理了大会发…

Leetcode103 二叉树的锯齿形层序遍历

二叉树的锯齿形层序遍历 题解1 层序遍历双向队列 给你二叉树的根节点 root ,返回其节点值的 锯齿形层序遍历 。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。 提示&#xff1a…

力扣每日一题-统计和小于目标的下标对数目-2023.11.24

力扣每日一题:统计和小于目标的下标对数目 开篇 今天这道力扣打卡题写得我好狼狈,一开始思路有点问题,后面就是对自己的代码到处缝缝补补,最后蒙混过关。只能分享一下大佬的代码,然后我帮大家分享代码的思路。 题目链…

迈巴赫S480升级主动式氛围灯 浪漫婉转的气氛

主动式氛围灯有263个可多色渐变的LED光源,营造出全情沉浸的动态光影氛围。结合智能驾驶辅助系统,可在转向或检测到危险时,予以红色环境光提示,令光影艺术彰显智能魅力。配件有6个氛围灯,1个电脑模块。 1、气候&#xf…

2023年亚太杯数学建模A题——深度学习苹果图像识别(思路+模型+代码+成品)

Image Recognition for Fruit-Picking Robots 水果采摘机器人的图像识别功能 问题 1:计数苹果 根据附件 1 中提供的可收获苹果的图像数据集,提取图像特征,建立数学模型,计算每幅图像中的苹果数量,并绘制附件 1 中所有…