redis的主从复制,哨兵和cluster集群

本文详细介绍了Redis的高可用性策略,包括主从复制、哨兵和Cluster集群。主要内容涉及内存管理、优化策略、雪崩、穿透、击穿的解决方案。主从复制提供了数据冗余和故障恢复,哨兵模式实现了自动故障转移,而Cluster实现了数据分片和高可用。文中还涵盖了Redis集群的部署步骤和故障模拟测试。
摘要由CSDN通过智能技术生成

一、redis性能管理

(1) redis-cli
 127.0.0.1:6379> info memory
 ​
 
 (2) redis-cli info memory

  • used_memory_rss:是Redis向操作系统申请的内存。
  • used_memory:是Redis中的数据占用的内存。
  • used_memory_peak:redis内存使用的峰值。

1.2内存碎片

内存碎片率=Redis向操作系统申请的内存 / Redis中的数据占用的内存

mem_fragmentation_ratio = used_memory_rss / used_memory

mem_fragmentation_ratio:内存碎片率。

redis-cli info memory |grep ratio
 

内存碎片产生的原因

  • Redis内部有自已的内存管理器,为了提高内存使用的效率,来对内存的申请和释放进行管理。
  • Redis中的值删除的时候,并没有把内存直接释放、交还给操作系统,而是交给了Redis内部有内存管理器。
  • Redis中申请内存的时候,也是先看自己的内存管理器中是否有足够的内存可用。
  • Redis的这种机制,提高了内存的使用率,但是会使Redis中有部分自己没在用,却不释放的内存,导致了内存碎片的发生。

内存碎片率对redis的影响 

  • 内存碎片率在1到1.5之间是正常的,这个值表示内存碎片率比较低,也说明Redis 没有发生内存交换。
  • 内存碎片率超过1.5,说明Redis消耗了实际需要的物理内存的150%,其中50%是内存碎片率。
  • 内存碎片率低于1的,说明Redis内存分配超出了物理内存,操作系统正在进行内存交换(使用虚拟内存,会降低性能)。需要增加可用物理内存或减少Redis内存占用。

解决碎片率过大的方法 

  • 如果你的Redis版本是4.0以下的,需要在redis-cli 工具上输入shutdown save命令,让Redis数据库执行保存操作并关闭Redis服务,再重启服务器。Redis服务器重启后,Redis 会将没用的内存归还给操作系统,碎片率会降下来。
  • Redis4.0版本开始,可以在不重启的情况下,线上整理内存碎片,将未使用的内存归还给操作系统。

 config set activedefrag yes    #自动碎片清理
 memory purge                   #手动碎片清理

 1.3内存使用率 

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

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

  • 针对缓存数据大小选择安装Redis 实例
  • 尽可能的使用Hash数据结构存储
  • 设置key的过期时间

1.4内回收key 

存清理策略,保证合理分配redis有限的内存资源。

当内存使用达到设置的最大阈值时,需选择一种key的回收策略,默认情况下回收策略是禁止删除(noenviction)。配置文件中修改 maxmemory-policy 属性值:

im /etc/redis/6379.conf
 ---598行----
 maxmemory-policy noenviction   #修改max-memory-policy属性值
 ​
 ##回收策略有以下几种:##
 ●volatile-lru
 #使用LRU算法从已设置过期时间的数据集合中淘汰数据
 (移除最近最少使用的key,针对设置了TTL的key)
 ​
 ●volatile-ttl
 #从已设置过期时间的数据集合中挑选即将过期的数据淘汰
 (移除最近过期的key)
 ​
 ●volatile-random
 #从已设置过期时间的数据集合中随机挑选数据淘汰
 (在设置了TTL的key里随机移除)
 ​
 ●allkeys-lru
 #使用LRU算法 从所有数据集合中淘汰数据
 (移除最少使用的key,针对所有的key)
 ​
 ●allkeys-random
 #从数据集合中任意选择数据淘汰(随机移除key)
 ​
 ●noenviction
 #禁止淘汰数据(不删除直到写满时报错)

二、redis的优化策略

2.1设置Redis客户端连接的超时时间 

vim /etc/redis/6379.conf
 -----114行------
 114 timeout 0     
 #单位为秒(s),取值范围为0~100000。默认值为0,表示无限制,即Redis不会主动断开连接,即使这个客户端已经空闲了很长时间。
 #例如可设置为600,则客户端空闲10分钟后,Redis会主动断开连接。
 ​
 #注意:在实际运行中,为了提高性能,Redis不一定会精确地按照timeout的值规定的时间来断开符合条件的空闲连接,例如设置timeout为10s,但空闲连接可能在12s后,服务器中新增很多连接时才会被断开。

2.2 设置redis自动碎片清理

 config set activedefrag yes    #自动碎片清理
 memory purge                   #手动碎片清理

2.3设置redis最大内存阈值 

内存阈值如果不设置,则没有限制,直到把服务器的内存干满、之后会使用交换分区。

设置内存阈值后,不会使用swap交换分区。且如果设置了key回收策略,当内存使用达到设置的最大阈值时,系统会进行key回收。

vim /etc/redis/6379.conf
 -----567行------
 567 # maxmemory <bytes>
 568 maxmemory 1gb           #例如设置最大内存阈值为1gb

三、redis雪崩、穿透、击穿的原因和解决方案

(1) redis雪崩

定义:缓存雪崩是指大量的应用请求无法在 Redis 缓存中进行处理,紧接着,应用将大量请求发送到数据库层,导致数据库层的压力激增。 

一个简单的雪崩过程:

  1. Redis 集群产生了大面积故障;

  2. 缓存失败,此时仍有大量请求去访问 Redis 缓存服务器;

  3. 在大量 Redis 请求失败后,这些请求将会去访问数据库;

  4. 由于应用的设计依赖于数据库和 Redis 服务,很快就会造成服务器集群的雪崩,最终导致整个系统的瘫痪。

 产生的原因:

1)缓存中有大量数据同时过期,导致大量请求无法得到处理。

2)Redis 缓存实例发生故障宕机了

解决方案: 

  • 【事前】高可用缓存:高可用缓存是防止出

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值