61、redis高可用

一、redis高可用

0、什么是高可用

  • 在web服务器中,高可用是指服务器可以正常访问的时间,衡量的标准是在多长时间内可以提供正常服务(99.9%、99.99%、99.999%等等)。
  • 但是在Redis语境中,高可用的含义似乎要宽泛一些,除了保证提供正常服务(如主从分离、快速容灾技术),还需要考虑数据容量的扩展、数据安全不会丢失等。

Redis的高可用技术

  • 在Redis中,实现高可用的技术主要包括持久化、主从复制、哨兵和 Cluster集群,下面分别说明它们的作用,以及解决了什么样的问题
  • 持久化:持久化是最简单的高可用方法(有时甚至不被归为高可用的手段),主要作用是数据备份,即将数据存储在硬盘,保证数据不会因进程退出而丢失。
  • 主从复制:主从复制是高可用Redis的基础,哨兵和集群都是在主从复制基础上实现高可用的。主从复制主要实现了数据的多机备份,以及对于读操作的负载均衡和简单的故障恢复。缺陷:故障恢复无法自动化;写操作无法负载均衡;存储能力受到单机的限制。
  • 哨兵:在主从复制的基础上,哨兵实现了自动化的故障恢复。缺陷:写操作无法负载均衡;存储能力受到单机的限制。
  • Cluster集群:通过集群,Redis解决了写操作无法负载均衡,以及存储能力受到单机限制的问题,实现了较为完善的高可用方案。

1.1、实现高可用的方式:

1.1.1、redis的持久化

1、持久化,最简单的高可用方法,主要功能就是备份数据。把内存当中的数据保存到硬盘当中。

2、内存当中数据,保存到硬盘。

开启持久化之后,会有一个持久化的文件。通过文件进行恢复。

redis提供的持久化方式:

**RDB持久化:**定时的将内存当中的数据保存磁盘上,类似于快照的形式用二进制压缩存储。后缀名是.rdb,每次redis重新启动时,都会读取快照文件,进行恢复,默认的持久化方式。

dbfilename dump.rdb

#rdb持久化的文件名

dir /var/lib/redis/6379

#RDB文件的默认存放路径

save 900 1
#当时间到900秒,过redis的数据发生1次变化,就会执行bgsave
save 300 10

#当时间到300秒,过redis的数据发生10次变化,就会执行bgsave

save 60 10000

#当时间到60秒,过redis的数据发生10000次变化,就会执行bgsave

#save m n 只是配置文件当中的配置项,redis执行的命令是bgsave。

save不能在命令行执行,一旦执行了save,redis的主进程进入阻塞状态,读写都将不能进行。直到save完成,才能继续读写。save在生产时是禁用的。

bgsave就是rdb快照保存的方式

bgsave在执行关闭redis服务的时候,也会自动执行bgsave

在这里插入图片描述

在这里插入图片描述

bgsave是主从复制的默认恢复模式,从节点执行全量恢复。主节点通过bgsave命令把rgb发送给节点。

除了配置文件 save m n 关闭redis 会执行bgsave,开启redis也会执行bgsave。

AOF持久化:

  • 他是把操作的数据库执行以日志的形式保存在指定的文件当中,文件名的后缀名.aof。类似于mysql的binlog。
  • AOF持久化的实时性好,只要是操作了都会记录在日志文件中,进程出现意外时,丢失的数据更少,AOF是主流的持久化方式。
  • RDB和AOF两者是配合适用。
  • AOF默认是关闭的,需要开启。如果同时开启AOF和RDB,哪个优先级高?
  • 一旦开启AOF,系统默认选择AOF进行恢复。
 701 appendonly yes  ##开启AOF

 731 appendfsync everysec
 732 #每秒都会主动更新一次

 754 no-appendfsync-on-rewrite no
 755 #不是每次都一定要对AOF文件进行重写,手动来对AOF文件进行重写

 798 aof-load-truncated yes
 799 #如果发现AOF文件被截断,redis在启动时会自动修改AOF的文件>     ,尽可能的对数据进行恢复。
 800 #NO redis 一旦变成no,redis发现文件被截断,redis就会拒绝启动

CONFIG SET requirepass ""##清除密码

[root@redis1 ~]# cd /var/lib/redis/
[root@redis1 redis]# ls
6379
[root@redis1 redis]# cd 6379
[root@redis1 6379]# ls
appendonly.aof  dump.rdb
[root@redis1 6379]# pwd
/var/lib/redis/6379


重写:

在这里插入图片描述

在这里插入图片描述

文件压缩成二进制文件

充分非必要条件

一旦开启AOF持久化之后,所有的数据库操作记录必然都会写入AOF持久化文件当中。

AOF的文件会越来越大。

AOF的文件越大,记录的操作就越多,一旦要恢复,速度会很慢。

重写就是为了压缩AOF持久化文件。

重写就是把原内容压缩,后续新的读写,继续插入aof文件。

1.2、RDB和AOF持久化之间的优缺点:

  • RDB文件小,传输速度快,适合全量复制,速度快

  • 恢复速度比aof快。

  • 性能上影响比较小

  • AOF:秒级持久化,数据量全,兼容性好。

  • 缺点:文件大,恢复速度慢,性能影响大。

  • 但是,支持全量和增量。数据安全大于一切。

192.168.168.51:6379> info memory ##查看碎片

Memory

used_memory:895440

##字节 redis中的数据占用内存的大小

used_memory_rss:15183872

##字节 redis向系统申请的内存,随着数据占用的大小,自动扩容。
used_memory_peak:4996016

##占用系统内存的峰值

 568 # maxmemory <bytes>
 569 #设置redis占用系统的阈值

内存碎片化率:

内存碎片化率=redis向系统申请的内存/redis数据实际占用的内存

在这里插入图片描述

查询碎片化率:

[root@redis1 6379]# redis-cli info memory | grep ratio
allocator_frag_ratio:1.28
分配器的碎片化比列,值越大,碎片越多,导致内存浪费。
allocator_rss_ratio:7.71
分配器占用物理内存的比列
rss_overhead_ratio:1.13
表示占用物理内存的额外的开销的比列,这个值越小越好。redis实际使用的物理内存比rss更接近
mem_fragmentation_ratio:18.22
内存的碎片比列,已经分配的内存,但是没有使用的内存,这个值越低越好,内存利用率高。

1354 # activedefrag yes
取消注释打开,自动清理碎片。
[root@redis1 6379]# redis-cli memory purge
OK 
##命令行手动清理碎片
[root@redis1 6379]# redis-cli info memory | grep ratio
allocator_frag_ratio:1.29
allocator_rss_ratio:2.42
rss_overhead_ratio:2.47
mem_fragmentation_ratio:12.47

192.168.168.51:6379> memory purge
OK
##redis数据库里面手动清理内存碎片

1.3、redis常见的问题:

1.3.1、缓存击穿:

5秒

15秒

redis的缓存数据有一部分丢失了,导致请求转发到了数据库。

或者是缓存刚刚过期,新缓存还没有建立,请求都转发到了数据库。

防范机制:redis缓存数据设置为永不过期。

持久化,高可用

我发现经常使用的热点语句,查询速度突然变得很慢,查找问题,发现该热点数据对应的缓存键值对消失了。

因为没有redis的数据库的密码,我报告了给数据库的部门。

set 重新创建了这个热点数据的缓存,解决了这个问题。

1.3.2、缓存穿透:

80%以上是黑客攻击。

利用缓存和数据库里面都没有的数据,用户一直在发起请求。

利用大量的请求压垮数据库,从而导致整个网站崩溃。

防火墙 只能起到一定的作用

验证拦截 (消息队列)需要手动完成,可以判断是否是攻击行为。

缓存空的数据,id=-1 test=-1

把一些空数据,也设置缓存,生命周期短一些,以防止恶意攻击。

1.3.3、缓存雪崩:

redis产生了大面积的故障(缓存数据丢失),所有的请求全部转发到了数据库。

数据库不适合高并发,很快集群就会崩溃,然后整个系统瘫痪。

1、人为====踩缝纫机

2、缓存数据大量的同时过期,新的缓存没有及时生产。

3、redis服务集群崩溃 主从 哨兵

怎么防备:

1、redis集群一定要做高可用方案

持久化,主从,哨兵,集群。

2、访问量过大,超过redis本身的负载能力。

熔断机制,Hystrix可以实现熔断,降级,限流来降低雪崩的概率。

缓存雪崩:

redis产生了大面积的故障(缓存数据丢失),所有的请求全部转发到了数据库。

数据库不适合高并发,很快集群就会崩溃,然后整个系统瘫痪。

1、人为====踩缝纫机

2、缓存数据大量的同时过期,新的缓存没有及时生产。

3、redis服务集群崩溃 主从 哨兵

怎么防备:

1、redis集群一定要做高可用方案

持久化,主从,哨兵,集群。

2、访问量过大,超过redis本身的负载能力。

熔断机制,Hystrix可以实现熔断,降级,限流来降低雪崩的概率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值