Redis的性能,哨兵模式,集群,

news2024/9/22 23:22:58

Redis的性能管理;

redis的数据保存在内存中

redis-cli info memory

redis内存使用info memory命令参数解析

used_memory:236026888     由 Redis 分配器分配的内存总量,包含了redis进程内部的开销和数据占用的内存,以字节(byte)为单位

used_memory_rss:274280448     redis向操作系统申请的内存大小

used_memory_peak:458320936   redis的内存消耗峰值(以字节为单位)

内存碎片率

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

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

如何自动清理碎片:

vim /etc/redis/6379.conf

.....

activedefrag yes 

#最后一行添加

如何手动清理碎片:

redis-cli memory purge

设置redis的内存最大阈值:

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

vim /etc/redis/6379.conf

........

#568行添加

maxmemory 1gb

key的回收策略

vim /etc/redis/6379.conf

.......

#598行添加如下(一般保留最后一个策略,根据需求添加):

maxmemory-policy volatile-lru:使用redis内资的lru算法,把已经设置了过期时间的键值对对中淘汰数据,移除最少使用的键值对。对已经设置了过期时间的键值对

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

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

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

allkeys-random:从所有键值对中任意选择键值对进行淘汰

maxmemory-policy noeciction:禁止键值对回收,(不删除任何键值对,直到Redis内存塞满了)

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

面试:

redis占用 内存的效率问题如何解决

1 日常巡检中。对redis 占用内存情况做监控

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

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

4  配置合适的Key的回收机制

Redis的报错问题:

1 雪崩:

缓存雪崩,大量的应用请求无法在redis缓冲中处理,会把所有的请求发送到后台数据库,数据库的压力会大,数据库本身并发能力差,一旦高并发,数据库会崩溃

redis集群大面积故障,Redis缓存中,大量数据同时过期,大量的请求无法得到处理。Redis实例宕机

1.1解决方案:

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

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

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

2  redis的缓存击穿(重要)

主要是热点数据缓存过期,或者删除,多个请求并发访问热点数据,请求转发到数据库,导致数据库的性能下降,经常请求的缓存数据,最好设置为永不过期

3 Redis的缓存穿透

缓存中没有数据,数据库也没有对应的数据,但是有用户一直发起这个请求,而且请求的数据是很大,一般是被黑客利用

Redis的主从复制

主从复制的作用:

是redis实现高可用的基础,哨兵模式和集群都是在主从复制的基础之上实现高可用,主从复制实现数据的多机备份,以及读写分离(主服务器负责写,从服务器只读)

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

主从复制的工作原理

主节点从节点组成,数据复制是单向,只能从主节点到从节点

1 主节点:主节点收到请求之后,他不管slave是第一次连接还是重新连接,主节点都会启动一个后台进程,执行bgsave主节点会把所有修改数据记录的命令加载到缓存和数据文件之中,

主从复制推荐使用AOF

建立连接:slave向主发送一个syn command,请求和主节点建立连接

数据文件创建完毕之后,master把数据文件传送到salve,slave 会把这个数据文件,先保存到硬盘,然后在加载到内存

实验架构:

192.168.233.7 主

192.168.233.8 从

192.168.233.9 从

依赖环境 Redis 先准备好

主:

从1 和从2

查看日志是否建好

验证是否主从

同时登录redis ,主写入  从节点无法写

哨兵模式

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

哨兵模式的原理:

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

哨兵模式的结构:

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

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

主节点的选举过程:

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

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

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

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

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

主:

sentinel monitor mymaster 192.168.233.7 6379 2 

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

从1和从2:

启动配置文件 先启动再启动从,挨个执行一遍

查看状态信息

日志查看从节点的信息

Redis 集群:

Redis3.0引入的分布式存储方案

工作模式:

集群有多个node节点组成,Redis数据分布在这些节点上,在集群之中,分为主节点和从节点

集群模式中 主从一一对应,数据写的读取和主从模式一样,主负责写,从模式只能写,集群模式自带哨兵模式,可以自动实现故障切换,但是故障切换中,整个集群不能使用,切换完毕之后集群会立刻恢复

集群模式是按照数据分片划分:

1 数据分片:是集群的核心功能,每个主都要提供读写的功能,但是数据一一对应写入对应的从节点,在集群模式中,可以容忍数据的不完整

2 高可用 :集群的主要目的

数据分片的实现过程:

redis集群引入了 哈希槽的概念

redis集群当中16384个哈希槽位(0-16384)

根据集群当中主节点从节点,分配哈希槽位,每个主从节点只负责一部分的

哈希槽位是连续的哈希槽位,如果出现不连续的哈希值,或者哈希槽位没有被分配,集群将会报错

主宕机之后,主节点原来负责的哈爷槽位将会不可用,需要从节点代替主节点继续负责原有的哈希操作。保证集群正常工作,故障切换的过程中,会提示集群不可用。切换完成,集群恢复继续工作。

每次读写都涉及到哈希槽位,Keyt通过crc16验证之后,对16384取余数,余数值决定数据放入哪个哈希槽位,通过这个值去找到对应的槽位所在的节点,然后直接跳转到这个节点

集群的流程:

1  集群自带主从和哨兵模式,

2  每个主从是互相隔的可以容忍数据的不完整,目的:高可用

3  哈希槽位为决定每个节点的读写槽位,在创建Key时,系统已经分配好了指定槽位

4 如果是出现MOVED不是报错,是提醒客户端取分配好的槽位节点,获取数据

实验

实验需求:需要6台装有redis的虚拟机

                                六台redis服务器都配置
vim /etc/redis/6379.conf
*****************************************************************************************
 
1、默认监听所有网卡-----70行
bind 0.0.0.0
 
2、关闭保护模式-----89行
protect-mode no
 
3、开启守护进程,以独立进程启动-----137行
daemonize yes
 
4、开启AOF持久化-----700行
appendonly yes
 
5、开启集群功能-----833行
cluster-enabled yes
 
6、集群名称文件设置-----841行
cluster-config-file nodes-6003.conf
 
7、集群超时时间设置-----847行(15000毫秒)
cluster-node-timeout 15000
 
*****************************************************************************************

 
创建集群:redis-cli -h 所在服务器ip --cluster create ip地址:6379 --cluster-replicas 1
 
此时在192.168.10.80主机创建
redis-cli -h 192.168.10.80 --cluster create 192.168.10.80:6379  192.168.10.150:6379 179 192.168.10.152:6379 192.168.10.153:6379 192.168.10.154:6379 --cluster-replicas 1
 
[root@localhost ~]# redis-cli -h 192.168.10.80 --cluster create 192.168.10.80:6379  192.168.79 192.168.10.152:6379 192.168.10.153:6379 192.168.10.154:6379 --cluster-replicas 1
>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 192.168.10.153:6379 to 192.168.10.80:6379
Adding replica 192.168.10.154:6379 to 192.168.10.150:6379
Adding replica 192.168.10.152:6379 to 192.168.10.151:6379
M: f9a09e3ededa9767aafc6aca98fcaad8e28272b6 192.168.10.80:6379
   slots:[0-5460] (5461 slots) master
M: 508caf1dfeab313b2df0173dc015b62591b012fb 192.168.10.150:6379
   slots:[5461-10922] (5462 slots) master
M: 68d8e79f5b4478dcd8143ef024607f17d02820c6 192.168.10.151:6379
   slots:[10923-16383] (5461 slots) master
S: 6c1dc5ae608ca1c20f80f4762933ee07aa4a77c5 192.168.10.152:6379
   replicates 68d8e79f5b4478dcd8143ef024607f17d02820c6
S: d82924c43dd5c907fda4abf35ffe33ad2b295abf 192.168.10.153:6379
   replicates f9a09e3ededa9767aafc6aca98fcaad8e28272b6
S: 8ae774dce41372b08e38904ef81adba51413d072 192.168.10.154:6379
   replicates 508caf1dfeab313b2df0173dc015b62591b012fb
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join
....
>>> Performing Cluster Check (using node 192.168.10.80:6379)
M: f9a09e3ededa9767aafc6aca98fcaad8e28272b6 192.168.10.80:6379
   slots:[0-5460] (5461 slots) master
   1 additional replica(s)
S: 8ae774dce41372b08e38904ef81adba51413d072 192.168.10.154:6379
   slots: (0 slots) slave
   replicates 508caf1dfeab313b2df0173dc015b62591b012fb
S: 6c1dc5ae608ca1c20f80f4762933ee07aa4a77c5 192.168.10.152:6379
   slots: (0 slots) slave
   replicates 68d8e79f5b4478dcd8143ef024607f17d02820c6
M: 68d8e79f5b4478dcd8143ef024607f17d02820c6 192.168.10.151:6379
   slots:[10923-16383] (5461 slots) master
   1 additional replica(s)
S: d82924c43dd5c907fda4abf35ffe33ad2b295abf 192.168.10.153:6379
   slots: (0 slots) slave
   replicates f9a09e3ededa9767aafc6aca98fcaad8e28272b6
M: 508caf1dfeab313b2df0173dc015b62591b012fb 192.168.10.150:6379
   slots:[5461-10922] (5462 slots) master
   1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
[root@localhost ~]# 

查看hash槽位CLUSTER nodes

验证从节点不能读

此处error不是报错,表明客户端尝试读取键值对test1,但是实际槽位在4768,因此集群要求客户端移动到4768槽位所在的主机节点获取数据

(2)验证从节点能不能写。不能

(3)验证分配hash槽位后,不在相应的hash槽位上的主节点能不能写。不能,只能到指定节点上操作

模拟故障

任意一台主服务器故障

主20.0.0.34——redis3故障,从20.0.0.44——redis4成为新主

 monitor 查看哨兵的ping命令

监控redis实时工作日志,检测主从节点之间的心跳线

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

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

相关文章

CentOS虚拟机重置账号密码

虚拟机忘记密码了 一般来说,虚拟机的账号密码,工作中都会有文档记录,如果忘记了可以查看文档。但是也有特例,虚拟机的密码没有记录到文档中,尝试了很多次依然登录失败,这时候就只能重置账号密码了。 1.重…

61 权限提升-RedisPostgre令牌窃取进程注入

目录 演示案例:Redis数据库权限提升-计划任务PostgreSQL数据库权限提升Windows2008&7令牌窃取提升-本地Windows2003&10进程注入提升-本地pinjector进程注入工具针对-win2008以前操作系统pexec64 32进程注入工具针对-win2008及后操作系统- (佛系) 涉及资源: postgersql是…

配置华为云镜像加速器

登录华为云官网,点击控制台 在服务列表里面寻找swr服务 点击镜像中心,点击镜像加速器 {"registry-mirrors": [ "https://301dc05233c6419b810bdb22135af9eb.mirror.swr.myhuaweicloud.com" ]}配置镜像加速器 vim /etc/docker…

数据提取PDF SDK的对比推荐

PDF 已迅速成为跨各种平台共享和分发文档的首选格式,它作为一种数据来源,常见于公司的各种报告和报表中。为了能更好地分析、处理这些数据信息,我们需要检测和提取 PDF 中的数据,并将其转换为可用且有意义的格式。而数据提取的 PD…

基于Python实现汽车销售数据可视化+预测【500010086.1】

导入模块 import numpy as np import pandas as pd from pylab import mpl import plotly.express as px import matplotlib.pyplot as plt import seaborn as sns设置全局字体 plt.rcParams[font.sans-serif][kaiti]获取数据 total_sales_df pd.read_excel(r"./data/中…

【Web题】狼追兔问题

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

CSS特效017:球体涨水的效果

CSS常用示例100专栏目录 本专栏记录的是经常使用的CSS示例与技巧,主要包含CSS布局,CSS特效,CSS花边信息三部分内容。其中CSS布局主要是列出一些常用的CSS布局信息点,CSS特效主要是一些动画示例,CSS花边是描述了一些CSS…

基于遗传优化的多属性判决5G-Wifi网络切换算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 MATLAB2022a 3.部分核心程序 .......................................................................... %接收功率、网…

Python中match-case语法: 引领新的模式匹配时代

更多Python学习内容:ipengtao.com Python在其最新的版本中引入了match-case语法,这是一项强大的功能,为开发者提供了更加灵活和直观的模式匹配方式。本文将深入探讨match-case的各个方面,并通过丰富的示例代码,帮助大家…

MES管理系统与自动化系统如何实现相辅相成

随着科技的飞速发展,制造企业正面临着数字化转型的巨大挑战与机遇。在这一过程中,自动化系统无疑扮演了重要角色,然而,仅仅依赖自动化系统还不足以支撑起整个数字化转型的大厦。这就是为什么我们需要推行MES管理系统解决方案的原因…

【数字信号处理】傅里叶变换的离散性与周期性

傅里叶变换的离散性与周期性 2023年11月21日 #elecEngeneer 文章目录 傅里叶变换的离散性与周期性1. 符号说明2. 具体分析3. 序列的序号表示的DFT下链 1. 符号说明 t : 连续时间(时域)变量 ω : 频域变量,aka角频率 g : 时域函数 G : 频域函数 n : 时域采样序列序号…

Go iota简介

当声明枚举类型或定义一组相关常量时,Go语言中的iota关键字可以帮助我们简化代码并自动生成递增的值。本文档将详细介绍iota的用法和行为。 iota关键字 iota是Go语言中的一个预定义标识符,它用于创建自增的无类型整数常量。iota的行为类似于一个计数器…

vue3 终端实现 (vue3+xterm+websocket)

目录 一、xterm介绍 二、效果展示 三、vue文件实现代码 一、xterm介绍 xterm是一个使用 TypeScript 编写的前端终端组件&#xff0c;可以直接在浏览器中实现一个命令行终端应用&#xff0c;通常与websocket一起使用。 二、效果展示 三、vue文件实现代码 <template>…

网络安全如何自学?

1.网络安全是什么 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 2.网络安全市场 一、是市场需求量高&#xff1b; 二、则是发展相对成熟…

操作系统发展过程--单道批处理系统、多道批处理系统、分时系统、实时系统

一、单道批处理系统 计算机早期&#xff0c;为了能提高利用率&#xff0c;需要尽量保持系统的连续运行&#xff0c;即在处理完一个作业之后&#xff0c;紧接着处理下一个作业&#xff0c;以减少机器的空闲等待时间 1.单道批处理系统的处理过程 为了实现对作业的连续处理&…

Ubuntu开机显示No bootable devices found

Ubuntu开机报错&#xff0c;显示显示No bootable devices found&#xff0c;如下图所示&#xff1a; 解决方案如下&#xff1a; 1. F2进入BIOS (1) 重启开启&#xff0c;按F2进入BIOS系统。 (2) 进入Boot Sequence&#xff0c;目前系统选择了UEFI&#xff0c;而Legacy选项为…

学习.NET验证模块FluentValidation的基本用法(续1:其它常见用法)

FluentValidation模块支持链式验证方法调用&#xff0c;也就是说&#xff0c;除了 RuleFor(r > r.UserName).NotEmpty()调用方式之外&#xff0c;还可以将对单个属性的多种验证函数以链式调用方式串接起来&#xff0c;比如UserName属性不能为空&#xff0c;长度在5~10之间&a…

CTF-PWN-QEMU-前置知识

文章目录 QEMU 内存管理(QEMU 如何管理某个特定 VM 的内存)MemoryRegion gpa->hpaFlatView&#xff1a;表示MR 树对应的地址空间FlatRange&#xff1a;存储不同MR对应的地址信息AddressSpace&#xff1a;不同类型的 MemoryRegion树RAMBlock总体简化图 QEMU 设备模拟 &#x…

设计模式之建造者(Builder)模式

目录 1、什么是建造者Builder模式&#xff1f; 2、建造者Builder模式的利与弊 3、建造者Builder模式的应用场景 4、建造者模式中的指导者&#xff08;Director&#xff09;有什么作用&#xff1f; 5、建造者Builder模式与其他模式的关系 小结 1、什么是建造者Builder模式…

某60区块链安全之未初始化的存储指针实战一学习记录

区块链安全 文章目录 区块链安全未初始化的存储指针实战一实验目的实验环境实验工具实验原理实验过程 未初始化的存储指针实战一 实验目的 学会使用python3的web3模块 学会分析以太坊智能合约未初始化的存储指针漏洞 找到合约漏洞进行分析并形成利用 实验环境 Ubuntu18.04操…