redis的高可用(主从复制和哨兵模式)

redis的高可用(主从复制和哨兵模式

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

INFO memory:查看redis内存使用情况

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

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

used_memory_peak:1800800:redis使用内存的峰值

系统巡检:硬件巡检,数据库,nginx,redis,docker,k8s

redis-cli info memory | grep ratio:过滤内存碎片

内存碎片率:used_memory_rss/used_memory

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

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和自动清理在配置文件redis最后一行添加activedefrag yes)

设置redis的最大内存阀值:(在/etc/redis/6379.conf中568行maxmemory 1gb)

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

key回收的策略:(要先设置上面的阀值

配置文件redis/5379.conf,598行增加

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占用的内存的效率问题如何解决?

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

2、设置redis占用系统内存的阀值(在/etc/redis/6379.conf中568行maxmemory 1gb),避免占用系统全部内存

3、内存碎片清理(手动清理redis-cli memory purge和自动清理在配置文件redis最后一行添加activedefrag yes

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

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

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

redis雪崩(缓存雪崩):

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

redis集群大面积故障

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

redis实例宕机

解决方案:

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

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

数据库不死即可,慢可以,但是不能没有响应

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

redis的缓存击穿:

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

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

redis的缓存穿透:

缓存中没有数据,数据库也没有对应数据,但是有用户一直在发起这个都没有的请求,而且请求的数据格式很大

一般这种情况就是黑客利用漏洞进行攻击,压垮应用数据库

redis的集群:

1、持久化

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

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

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

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

主从复制的工作原理:

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

主从复制的实验:

(主)打开配置文件:vim /etc/redis/6379.conf

70行 IP地址改为0.0.0.0,让所有的主机都可以使用

137行 daemonize yes打开

700行 appendonly no打开变成yes

重启配置文件:/etc/init.d/redis_6379 restart

(从)打开配置文件:vim /etc/redis/6379.conf

70行 IP地址改为0.0.0.0,让所有的主机都可以使用

137行 daemonize yes打开

288行添加一行replicaof 192.168.233.11 6379

700行 appendonly no打开变成yes

哨兵模式:先有主从再有哨兵

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

哨兵模式的原理:

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

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

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

哨兵模式的结构:

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

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

主:192.168.233.11

从:192.168.233.12

从:192.168.233.13

哨兵模式的实验:

(主)cd /opt/

cd redis-5.0.7/

vim sentinel.conf

17行注释取消掉protected-mode no

26行daemonize no改成yes

36行logfile "/var/log/sentinel.log"

65行dir "/var/lib/redis/6379"

84行sentinel monitor mymaster 192.168.233.11 6379 2

启动配置文件redis-sentinel sentinel.conf &

redis-cli -p 26379 info Sentinel

ps -elf | grep redis

(从)cd /opt/

cd redis-5.0.7/

vim sentinel.conf

17行注释掉protected-mode no

26行 daemonize no改为yes

36行logfile "/var/log/sentinel.log"

65行dir "/var/lib/redis/6379"

84行sentinel monitor mymaster 192.168.233.11 6379 2

启动配置文件redis-sentinel sentinel.conf &

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

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

相关文章

Halcon Solution Guide I basics(3): Region Of Interest(有兴趣区域/找重点)

文章目录 文章专栏前言文章解读前言创建ROI案例1:直接截取ROI手动截取ROI 总结ROI套路获取窗口句柄截取ROI区域获取有效区域 Stop组合 文章专栏 Halcon开发 Halcon学习 练习项目gitee仓库 CSDN Major 博主Halcon文章推荐 前言 今天来看第三章内容,既然是…

QTableWidget——编辑单元格

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

docker、elasticsearch8、springboot3集成备忘

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

Godot

前言 为什么要研究开源引擎 主要原因有: 可以享受“信创”政策的红利,非常有利于承接政府项目。中美脱钩背景下,国家提出了“信创”政策。这个政策的核心就是,核心技术上自主可控。涉及的产业包括:芯片、操作系统、数据…

【Django使用】md文档10大模块第5期:Django数据库增删改查和Django视图

Django的主要目的是简便、快速的开发数据库驱动的网站。它强调代码复用,多个组件可以很方便的以"插件"形式服务于整个框架,Django有许多功能强大的第三方插件,你甚至可以很方便的开发出自己的工具包。这使得Django具有很强的可扩展…

Vue项目 配置项设置

一、项目运行时浏览器自动打开 找到package.json文件 找到"sctipts"配置项 在"serve"配置项最后加上--open "scripts": {"serve": "vue-cli-service serve --open","build": "vue-cli-service build&quo…

Redis面试内容,Redis过期策略,Redis持久化方式,缓存穿透、缓存击穿和缓存雪崩,以及解决办法

文章目录 一、redis什么是RedisRedis使用场景1、缓存2、数据共享[分布式](https://so.csdn.net/so/search?q分布式&spm1001.2101.3001.7020)3、分布式锁4、全局ID5、计数器6、限流7、位统计 Redis有5中数据类型: SSHLZRedis中一个key的值每天12点过期&#xff…

Cookie、Session、CBV加装饰器的三种方法

【0】cookie、session和Token的发展史 【1】Cookie的形式 存储形式:k:v键值对存储位置:客户端缺点:不安全,信息可能会泄露 【2】session的形式 标识符,表示我是当前用户加密出来的数据对敏感信息进行加密…

排序算法-----快速排序(非递归实现)

目录 前言 快速排序 基本思路 非递归代码实现 前言 很久没跟新数据结构与算法这一栏了,因为数据结构与算法基本上都发布完了,哈哈,那今天我就把前面排序算法那一块的快速排序完善一下,前面只发布了快速排序递归算法,…

单链表相关面试题--3.链表的中间节点

3.链表的中间节点 876. 链表的中间结点 - 力扣(LeetCode) /* 解题思路: 通过快慢指针找到中间节点,快指针每次走两步,慢指针每次走一步,当快指针走到结尾的时候,慢指针正好走到中间位置 */ typ…

HTTPS协议的加密流程

目录 一,HTTPS是什么 二,两种加密方式 三,HTTPS的加密过程 3.1 引入对称加密 3.2 引入非对称加密 3.3 引入证书 一,HTTPS是什么 HTTPS也是一个应用层协议,它是在HTTP协议的基础上引入了一个加密层。因为HTTP协议…

51单片机按键控制LED灯亮灭的N个玩法

51单片机按键控制LED灯亮灭的N个玩法 1.概述 这篇文章介绍按键的使用,以及通过控制LED灯的小实验,发现按键中存在的问题,然后思考并解决这些问题。达到熟练使用按键控制元器件。 2.搭建硬件环境 1.硬件准备 名称型号数量单片机STC12C205…

Sleuth

Sleuth 一 引言 随着服务的越来越多,对调⽤链的分析会越来越复杂。它们之间的调⽤关系也许如下图: 问题: 1:微服务之间的调⽤错综复杂,⽤户发送的请求经历那些服务,调⽤链不清楚,没有⼀ 个⾃…

【SpringCloud微服务全家桶学习笔记-Hystrix(服务降级,熔断,接近实时的监控,服务限流等)】

服务雪崩 (微服务面临的问题) 多个微服务之间调用的时候,假设微服务A调用微服务B和微服务C,微服务B和微服务C又调用其它的微服务,这就是所谓的“扇出”。如果扇出的链路上某个微服务的调用响应时间过长或者不可用&…

sqlserver==索引解析,执行计划,索引大小

1创建测试表 -- 创建大型表 CREATE TABLE LargeTableWithIndex (ID int IDENTITY(1,1) PRIMARY KEY,IndexedColumn int,NonIndexedColumn nvarchar(255),OtherData nvarchar(255) );2插入测试数据 -- 使用 T-SQL 插入大量数据 DECLARE @i int = 1; WHILE @i <= 100000 -- …

Mac中LaTex无法编译的问题

最近在使用TexStudio时&#xff0c;遇到一个棘手的问题&#xff1a; 无法编译&#xff0c;提示如下&#xff1a; kpathsea: Running mktexfmt xelatex.fmt /Library/TeX/texbin/mktexfmt: kpsewhich -var-valueTEXMFROOT failed, aborting early. BEGIN failed–compilation a…

redis运维(十二) 位图

一 位图 ① 概念 1、说明&#xff1a;位图还是在操作字符串2、位图玩字符串在内存中存储的二进制3、ASCII字符通过映射转化为二进制4、操作的是字符串value ② ASCII字符铺垫 1、控制ASCII字符 2、ASCII可显示字符 ③ SETBIT 细节&#xff1a; setbit 命令的返回值是之…

git常用命令(git github ssh)

目录 1、语法说明2、本地仓库相关操作建立一个git文件(git init)把工作区的文件添加到暂存区(git add)把暂存区的文件添加到本地仓库(git commit)查看暂存区和本地仓库中的文件(git ls-files)查看文件夹下所有文件的状态(git status)查看版本库中的提交记录(git log)恢复的文件…

如何解决msvcp110.dll丢失问题,分享5个有效的解决方法

最近&#xff0c;我在使用电脑时遇到了一个令人头疼的问题——msvcp110.dll丢失。这个错误通常会导致某些应用程序无法正常运行。为了解决这个问题&#xff0c;我们需要采取一些有效的方法来修复丢失的msvcp110.dll文件。那么&#xff0c;msvcp110.dll到底是什么呢&#xff1f;…