Redis性能管理及主从复制、哨兵的配置与部署

一、redis性能管理

1.1 查看Redis内存使用

1.2 内存碎片率

1.3 内存使用率

1.3.1 避免内存交换发生的方法

1.4 内回收key

1.4.1 配置文件中修改 maxmemory-policy 属性值

1.5 缓存穿透

1.5.1 原因

1.5.2 条件

1.5.3  解决方案

1.6 缓存击穿

1.6.1 原因

1.6.2 现象

1.6.3 解决方案

1.7 缓存雪崩

1.7.1 缓存雪崩与缓存击穿的区别

1.7.2 解决方案

二、主从复制

2.1 概念

2.2 作用

2.3 流程

2.4 配置

2.4.1 关闭防火墙和核心防护

2.4.2 安装

2.4.3 软连接

2.4.4 修改 Redis 配置文件(Master节点操作)

2.4.5 修改 Redis 配置文件(Slave节点操作)

三、哨兵

3.1 概念

3.2 原理

3.3 作用

3.4 故障转移机制

3.5 主节点的选举

3.6 配置

3.6.1 关闭防火墙和核心防护

3.6.2 修改Redis 哨兵模式的配置文件(所有节点操作)

3.6.3 启动哨兵模式

3.6.4查看哨兵信息

3.6.5 故障模拟


一、redis性能管理

1.1 查看Redis内存使用

127.0.0.1:6379> info memory

1.2 内存碎片率

操作系统分配的内存值 used_memory_rss 除以 Redis 使用的内存总量值 used_memory 计算得出。内存值 used_memory_rss 表示该进程所占物理内存的大小,即为操作系统分配给 Redis 实例的内存大小。除了用户定义的数据和内部开销以外,used_memory_rss 指标还包含了内存碎片的开销, 内存碎片是由操作系统低效的分配/回收物理内存导致的(不连续的物理内存分配)。
(1)内存碎片率稍大于1是合理的,这个值表示内存碎片率比较低,也说明 Redis 没有发生内存交换。
(2)内存碎片率超过1.5,说明Redis消耗了实际需要物理内存的150%,其中50%是内存碎片率。需要在redis-cli工具上输入shutdown save 命令,让 Redis 数据库执行保存操作并关闭 Redis 服务,再重启服务器。
(3)内存碎片率低于1的,说明Redis内存分配超出了物理内存,操作系统正在进行内存交换。需要增加可用物理内存或减少 Redis 内存占用。

1.3 内存使用率

redis实例的内存使用率超过可用最大内存,操作系统将开始进行内存与swap空间交换。

1.3.1 避免内存交换发生的方法

(1)针对缓存数据大小选择安装 Redis 实例

(2)尽可能的使用Hash数据结构存储

(3)设置key的过期时间

1.4 内回收key

内存清理策略,保证合理分配redis有限的内存资源。当达到设置的最大阀值时,需选择一种key的回收策略,默认情况下回收策略是禁止删除。

1.4.1 配置文件中修改 maxmemory-policy 属性值

vim /etc/redis/6379.conf

(1)volatile-lru:使用LRU算法从已设置过期时间的数据集合中淘汰数据(移除最近最少使用的key,针对设置了TTL的key)
(2)volatile-ttl:从已设置过期时间的数据集合中挑选即将过期的数据淘汰(移除最近过期的key)
(3)volatile-random:从已设置过期时间的数据集合中随机挑选数据淘汰(在设置了TTL的key里随机移除)
(3)allkeys-lru:使用LRU算法从所有数据集合中淘汰数据(移除最少使用的key,针对所有的key)
(4)allkeys-random:从数据集合中任意选择数据淘汰(随机移除key)
(5)noenviction:禁止淘汰数据(不删除直到写满时报错)

1.5 缓存穿透

1.5.1 原因

黑客或者其他非正常用户频繁进行很多非正常的 url 访问,使得 redis 查询不到数据库。

1.5.2 条件

(1)应用服务器压力变大

(2)redis 命中率降低

(3)一直查询数据库,使得数据库压力太大而压垮

1.5.3  解决方案

(1)对空值缓存:如果一个查询返回的数据为空(不管是数据是否不存在),我们仍然把这个空结果(null)进行缓存,设置空结果的过期时间会很短,最长不超过五分钟。

(2)设置可访问的名单(白名单):使用 bitmaps 类型定义一个可以访问的名单,名单 id 作为 bitmaps 的偏移量,每次访问和 bitmap 里面的 id 进行比较,如果访问 id 不在 bitmaps 里面,进行拦截,不允许访问。

(3)采用布隆过滤器:布隆过滤器(Bloom Filter)是 1970 年由布隆提出的。它实际上是一个很长的二进制向量 (位图) 和一系列随机映射函数(哈希函数)。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率和删除困难。

(4)进行实时监控:当发现 Redis 的命中率开始急速降低,需要排查访问对象和访问的数据,和运维人员配合,可以设置黑名单限制服务。

1.6 缓存击穿

1.6.1 原因

redis 某个 key 过期了,大量访问使用这个 key(热门 key)

1.6.2 现象

数据库访问压力瞬时增加,数据库崩溃,redis 里面没有出现大量 key 过期。

1.6.3 解决方案

(1)预先设置热门数据:在 redis 高峰访问之前,把一些热门数据提前存入到 redis 里面,加大这些热门数据 key 的时长。

(2)实时调整:现场监控哪些数据热门,实时调整 key 的过期时长。

(3)使用锁:就是在缓存失效的时候(判断拿出来的值为空),不是立即去 load db。先使用缓存工具的某些带成功操作返回值的操作(比如 Redis 的 SETNX)去 set 一个 mutex key。当操作返回成功时,再进行 load db 的操作,并回设缓存,最后删除 mutex key;当操作返回失败,证明有线程在 load db,当前线程睡眠一段时间再重试整个 get 缓存的方法。

1.7 缓存雪崩

1.7.1 缓存雪崩与缓存击穿的区别

(1)缓存雪崩是指在同一时间内,缓存中大量的或者说大规模的key集体失效,这可能是由于缓存设置了相同的过期时间,导致在这一时间点上大量请求落到数据库上,造成数据库压力急剧上升,甚至可能导致数据库崩溃。因此,缓存雪崩针对的是很多key的缓存。

(2)缓存击穿是指一个热点key突然失效(例如过期),而这个时候恰好有大量的并发请求查询这个key,因为缓存中已经没有这个数据,所有的请求都会落到数据库上,对数据库造成巨大压力。缓存击穿通常针对的是单一key的高并发访问。

1.7.2 解决方案

(1)构建多级缓存架构:nginx 缓存 + redis 缓存 + 其他缓存(ehcache 等)。

(2)使用锁或队列:用加锁或者队列的方式来保证不会有大量的线程对数据库一次性进行读写,从而避免失效时大量的并发请求落到底层存储系统上,该方法不适用高并发情况。

(3)设置过期标志更新缓存:记录缓存数据是否过期(设置提前量),如果过期会触发通知另外的线程在后台去更新实际 key 的缓存。

(4)将缓存失效时间分散开:比如可以在原有的失效时间基础上增加一个随机值,比如 1-5 分钟随机,这样每一个缓存的过期时间的重复率就会降低,就很难引发集体失效的事件。

二、主从复制

2.1 概念

主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(Master),后者称为从节点(Slave);数据的复制是单向的,只能由主节点到从节点。默认情况下,每台Redis服务器都是主节点;且一个主节点可以有多个从节点(或没有从节点),但一个从节点只能有一个主节点。

2.2 作用

(1)数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。

(2)故障恢复:当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复;实际上是一种服务的冗余。

(3)负载均衡:在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务(即写Redis数据时应用连接主节点,读Redis数据时应用连接从节点),分担服务器负载;尤其是在写少读多的场景下,通过多个从节点分担读负载,可以大大提高Redis服务器的并发量。

(4)高可用基石:除了上述作用以外,主从复制还是哨兵和集群能够实施的基础,因此说主从复制是Redis高可用的基础。

2.3 流程

(1)若启动一个Slave机器进程,则它会向Master机器发送一个“sync command”命令,请求同步连接。

(2)无论是第一次连接还是重新连接,Master机器都会启动一个后台进程,将数据快照保存到数据文件中(执行rdb操作),同时Master还会记录修改数据的所有命令并缓存在数据文件中。

(3)后台进程完成缓存操作之后,Master机器就会向Slave机器发送数据文件,Slave端机器将数据文件保存到硬盘上,然后将其加载到内存中,接着Master机器就会将修改数据的所有操作一并发送给Slave端机器。若Slave出现故障导致宕机,则恢复正常后会自动重新连接。

(4)Master机器收到Slave端机器的连接后,将其完整的数据文件发送给Slave端机器,如果Mater同时收到多个Slave发来的同步请求,则Master会在后台启动一个进程以保存数据文件,然后将其发送给所有的Slave端机器,确保所有的Slave端机器都正常。

2.4 配置

2.4.1 关闭防火墙和核心防护

systemctl stop firewalld
setenforce 0

2.4.2 安装

yum install -y gcc gcc-c++ make
tar zxvf redis-5.0.7.tar.gz -C /opt/
wget -p /opt http://download.redis.io/releases/redis-5.0.7.tar.gz
cd /opt/redis-5.0.7/
make
make PREFIX=/usr/local/redis install
cd /opt/redis-5.0.7/utils
./install_server.sh

2.4.3 软连接

ln -s /usr/local/redis/bin/* /usr/local/bin/

2.4.4 修改 Redis 配置文件(Master节点操作)

vim /etc/redis/6379.conf
bind 0.0.0.0						#70行,修改监听地址为0.0.0.0
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

2.4.5 修改 Redis 配置文件(Slave节点操作)

vim /etc/redis/6379.conf
bind 0.0.0.0						#70行,修改监听地址为0.0.0.0
daemonize yes						#137行,开启守护进程
logfile /var/log/redis_6379.log		#172行,指定日志文件目录
dir /var/lib/redis/6379				#264行,指定工作目录		
replicaof 192.168.133.20 6379        #288行,指定要同步的Master节点IP和端口
appendonly yes						#700行,开启AOF持久化功能
/etc/init.d/redis_6379 restart

三、哨兵

3.1 概念

当服务器宕机后,需要手动一台从机切换为主机,这需要人工干预,不仅费时费力而且还会造成一段时间内服务不可用。为了解决主从复制的缺点,就有了哨兵机制。

3.2 原理

哨兵是特殊的redis服务,不提供读写服务,主要用来监控redis实例节点。 哨兵架构下client端第一次从哨兵找出redis的主节点,后续就直接访问redis的主节点,不会每次都通过 sentinel代理访问redis的主节点,当出现故障时通过投票机制选择新的 Master并将所有slave连接到新的 Master。所以整个运行哨兵的集群的数量不得少于3个节点,并且将新的master信息通知给client端。

这里面redis的client端一般都实现了订阅功能,订阅sentinel发布的节点变动消息。Redis服务是通过配置文件启动的,比如上面的从节点设置了只读模式,它被选举成了master之后就是可读写的了。

3.3 作用

监控:哨兵会不断地检查主节点和从节点是否运作正常。
自动故障转移:当主节点不能正常工作时,哨兵会开始自动故障转移操作,它会将失效主节点的其中一个从节点升级为新的主节点,并让其它从节点改为复制新的主节点。
通知(提醒):哨兵可以将故障转移的结果发送给客户端。

3.4 故障转移机制

1、由哨兵节点定期监控发现主节点是否出现了故障
每个哨兵节点每隔1秒会向主节点、从节点及其它哨兵节点发送一次ping命令做一次心跳检测。如果主节点在一定时间范围内不回复或者是回复一个错误消息,那么这个哨兵就会认为这个主节点主观下线了(单方面的)。当超过半数哨兵节点认为该主节点主观下线了,这样就客观下线了。

2、当主节点出现故障,此时哨兵节点会通过Raft算法(选举算法)实现选举机制共同选举出一个哨兵节点为leader,来负责处理主节点的故障转移和通知。所以整个运行哨兵的集群的数量不得少于3个节点。

3、由leader哨兵节点执行故障转移,过程如下:

(1)将某一个从节点升级为新的主节点,让其它从节点指向新的主节点;

(2)若原主节点恢复也变成从节点,并指向新的主节点;

(3)通知客户端主节点已经更换。

3.5 主节点的选举

1、过滤掉不健康的(已下线的),没有回复哨兵 ping 响应的从节点。

2、选择配置文件中从节点优先级配置最高的。(replica-priority,默认值为100)

3、选择复制偏移量最大,也就是复制最完整的从节点。

哨兵的启动依赖于主从模式,所以须把主从模式安装好的情况下再去做哨兵模式。

3.6 配置

3.6.1 关闭防火墙和核心防护

systemctl stop firewalld
setenforce 0

3.6.2 修改Redis 哨兵模式的配置文件(所有节点操作)

vim /opt/redis-5.0.7/sentinel.conf
 17 protected-mode no      #关闭保护模式

 21 port 26379             #Redis哨兵默认的监听端口

 26 daemonize yes                #指定sentinel为后台启动

 36 logfile "/var/log/sentinel.log"  #指定日志存放路径

 65 dir "/var/lib/redis/6379"        #指定数据库存放路径

 84 sentinel monitor mymaster 192.168.48.11 6379 2  #指定该哨兵节点监控192.168.48.11:6379这个主节点,该主节点的名称是mymaster,最后的2的含义与主节点的故障判定有关:至少需要2个哨兵节点同意,才能判定主节点故障并进行故障转移

113 sentinel down-after-milliseconds mymaster 30000  #判定服务器down掉的时间周期,默认30000毫秒(30秒)

146 sentinel failover-timeout mymaster 180000        #146行,故障节点的最大超时时间为180000 (180秒 )

3.6.3 启动哨兵模式

注意:先启master,再启slave

cd /opt/redis-5.0.7/

redis-sentinel sentinel.conf &

3.6.4查看哨兵信息

redis-cli -p 26379 info sentinel

3.6.5 故障模拟

1、查看并杀死master节点的redis-server

ps -ef | grep redis
kill -9 进程号                     #Master节点上redis-server的进程号

2、再次查看哨兵信息

redis-cli -p 26379 INFO Sentinel

补充 :脚本

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

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

相关文章

移位运算与乘法

描述 题目描述: 已知d为一个8位数,请在每个时钟周期分别输出该数乘1/3/7/8,并输出一个信号通知此时刻输入的d有效(d给出的信号的上升沿表示写入有效) 信号示意图: 波形示意图: 输入描述&#…

Leetcode 215. 数组中的第K个最大元素

心路历程: 这道题本质上是排序不完全的过程,而且这道题有bug,直接用python的排序算法其实就能AC。 可以按照快排排到找到k-1个large元素的思维去做,不过这道题需要考虑空间复杂度,所以需要用指针快排。 其实也可以考虑…

SUPS:一种用于自动驾驶的仿真地下泊车场景数据集

SUPS:一种用于自动驾驶的仿真地下泊车场景数据集 附赠自动驾驶学习资料和量产经验:链接 摘要 本文介绍了SUPS:一种用于自动驾驶的仿真地下泊车场景数据集。随着自动驾驶的范围扩大,自动地下泊车引起了人们极大的关注。自动驾驶汽…

【stm32】软件I2C读写MPU6050

软件I2C读写MPU6050(文章最后附上源码) 编码 概况 首先建立通信层的.c和.h模块 在通信层里写好I2C底层的GPIO初始化 以及6个时序基本单元 起始、终值、发送一个字节、接收一个字节、发送应答、接收应答 写好I2C通信层之后,再建立MPU6050的.c和.h模块 基于I2C通…

京东云幻兽帕鲁4核16G服务器优惠价格26元1个月、398元一年

京东云幻兽帕鲁4核16G服务器优惠价格26元1个月、658元1年、三年3098元,配置为:轻量云主机4C16G-100G SSD系统盘-5M带宽-1000G月流量 华北-北京,京东云优惠活动 yunfuwuqiba.com/go/jd 活动链接打开如下图: 幻兽帕鲁4核16G服务器优…

计算机网络-TCP重传、滑动窗口、流量控制、拥塞控制

重传机制 超时重传:超时重传时间(RTO)设定为略大于RTT(动态)。触发场景包括自己发送的数据包丢失和别人给自己的回应数据包丢失。启动重传机制后如果还没有收到数据包,则RTO设置为上次的两倍,直…

双连通分量算法

1. 连通图概念 连通图:无向图任意两点之间存在通路。 强连通:有向图(前提)中,任意两点都有至少一条通路,则此图为强连通图。 弱连通图:将有向图的有向边换成无向边得到的图是连通图&#xff0c…

Tomcat管理配置

Tomcat管理配置 1 host-manager项目2 manager项目 Tomcat 提供了Web版的管理控制台,位于webapps目录下。Tomcat 提供了用于管理Host的host-manager和用于管理Web应用的manager。 1 host-manager项目 Tomcat启动之后,可以通过 http://localhost:8080/ho…

Cortex-M7 外设(peripherals)总览

1 PPB内存映射总览 由Cortex-M7的内存映射模型可知,0xE000_0000~0xE00F_FFFF地址空间为私有外设总线 (Private peripheral bus,PPB)的内存区域,其具体的地址映射如表1所示。 表1 PPB寄存器内存映射 其中,注释后缀的相关含义如…

5.5.1MFC对话框——文件对话框

本文仅供学习交流,严禁用于商业用途,如本文涉及侵权请及时联系将于24小时内删除 目录 1.实验原理 2.示例说明 1.实验原理 CFileDialog类 用CFileDialog类提供的通用文件对话框,实现Windows标准的【打开】和【另存为】功能。 CFileD…

前端canvas项目实战——在线图文编辑器(八):复制、删除、锁定、层叠顺序

目录 前言一、效果展示二、实现步骤1. 复制2. 删除3. 锁定4. 层叠顺序 三、实现过程中发现的bug1. clone方法不复制自定义属性2. 复制「锁定」状态的对象,得到的新对象也是「锁定」状态 四、Show u the code后记 前言 上一篇博文中,我们细致的讲解了实现…

如何在没有备份的情况下从 iPad 恢复照片?

有很多操作都可能导致iPad照片丢失,包括误删除、出厂设置、iPad的iOS更新等。如果没有备份,似乎没有办法找回它们。然而,即使您将备份保留在 iCloud 或iTunes上,这些方式也需要您的 iPad 首先重置,从而用备份内容覆盖当…

Java-类型转换

Java数据类型转换的规则掌握后,将使我们对以后的学习事半功倍,下面是我列出的一些重点。 类型转换 由于Java是强类型语言,所以要进行有些运算的时候,需要用到类型转换。底到高依次是:byte,short,char->int->lo…

AJAX 原理

一、AJAX原理 - XMLHttpRequest 定义: 关系:axios 内部采用 XMLHttpRequest 与服务器交互。 好处:掌握使用 XHR 与服务器进行数据交互,了解 axios 内部原理。 1.1 使用 XMLHttpRequest: 步骤: 1. 创建 XM…

OpenHarmony开发-系统烧录

本文详细介绍了烧录OpenHarmony系统到开发板的操作流程。从基础的硬件准备和软件环境设置入手,详细说明了如何配置开发环境、构建系统镜像等过程,详细描述了烧录过程中的关键步骤,以及如何使用专用工具将OpenHarmony系统镜像传输到开发板。同…

ffmpeg 将多个视频片段合成一个视频

ffmpeg 将多个视频片段合成一个视频 References 网络视频 6 分钟的诅咒。 新建文本文件 filelist.txt filelist.txtfile output_train_video_0.mp4 file output_train_video_1.mp4 file output_train_video_2.mp4 file output_train_video_3.mp4 file output_train_video_4.m…

PowerJob 分布式任务调度简介

目录 适用场景 设计目标 PowerJob 功能全景 任务调度 工作流 分布式计算 动态容器 什么是动态容器? 使用场景 可维护性和灵活性的完美结合 实时日志&在线运维 PowerJob 系统组件 PowerJob 应用场景 PowerJob 的优势 PowerJob(原OhMyScheduler&…

【opencv】示例-aruco_dict_utils.cpp 计算 ArUco 字典度量

该程序可用于计算 ArUco 字典度量。 要计算考虑翻转标记的指标&#xff0c;请使用 -r 标志。 该程序可用于创建和编写自定义 ArUco 词典。 #include <opencv2/objdetect/aruco_detector.hpp> // 包含aruco marker检测相关功能的头文件 #include <iostream> // 包含…

供应链领域主题:生产制造关键术语和系统

BOM&#xff08;Bill of Material&#xff09;物料清单 BOM&#xff08;Bill of Material&#xff09;物料清单&#xff0c;是计算机可以识别的产品结构数据文件&#xff0c;也是ERP的主导文件。BOM使系统识别产品结构&#xff0c;也是联系与沟通企业各项业务的纽带。ERP系统中…

(源码)基于Spring Boot和Vue植物养殖技巧学习系统的设计与实现

前言 &#x1f497;博主介绍&#xff1a;✌专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f447;&#x1f3fb; 精彩专栏 推荐订阅&#x1f447;&#x1f3fb; 2024年Java精品实战案例《100套》 &#x1f345;文末获取源码联系&#x1f345; &#x1f31f…