文章目录
- 一、单节点Redis的问题
- (一)数据丢失
- (二)并发能力问题
- (三)存储能力问题
- (四)故障恢复问题
- 二、Redis持久化
- (一)RDB
- 1、RDB是什么
- 2、rdb配置
- 3、手动触发RDB
- 4、RDB原理
- (二)AOF
- 1、AOF是什么
- 2、开启AOF
- 3、AOF持久化流程
- 4、Rewrite压缩
- (三)RDB vs AOF
- 三、Redis主从集群读写分离
- (一)搭建主从架构
- (二)主从同步原理
- 全量同步
- 增量同步
- 同步优化
- 总结
- 四、Redis哨兵
- (一)、哨兵的作用和原理
- 1、哨兵的作用
- 2、哨兵原理
- (二)、搭建哨兵集群
- (三)、RedisTemplate哨兵模式
- 五、分片集群
- (一)、搭建分片集群
- (二)、散列插槽
- (三)、集群伸缩
- (四)、故障转移
- (五)、RedisTemplate访问分片集群
一、单节点Redis的问题
(一)数据丢失
解决方案:实现Redis数据持久化
(二)并发能力问题
解决方案:搭建主从集群,实现读写分离
(三)存储能力问题
解决方案:搭建分片集群,利用插槽机制实现动态扩容
(四)故障恢复问题
解决方案:利用哨兵,实现健康检测和自动恢复
二、Redis持久化
(一)RDB
1、RDB是什么
RDB全称Redis Database Backup file(Redis数据备份文件),也被叫做Redis数据快照。简单来说就是把内存中的所有数据都记录到磁盘中。当Redis实例故障重启后,从磁盘读取快照文件,恢复数据。快照文件称为RDB文件,默认是保存在当前运行目录。
redis停机时会执行一次RDB。
2、rdb配置
Redis内部有触发机制,可以在redis.conf文件中找到,格式如下:
#900秒内,如果至少有一个key被修改,则执行bgsave,如果是save “” 则表示禁用RDB
save 900 1
save 300 10
save 60 10000
# save: 设置快照的触发条件,格式为:save <seconds> <changes>
# 其中seconds表示指定时间间隔内的秒数,changes表示指定修改数量内的次数。
# 当满足其中一个条件时,Redis 就会进行快照。
stop-writes-on-bgsave-error yes # 在RDB执行时如果出现错误,是否停止写入。默认是yes。
rdbcompression yes # 是否压缩 RDB 文件。默认是yes。
rdbchecksum yes #是否对 RDB 文件进行校验和。默认是yes。
dbfilename dump_6379.rdb # 设置 RDB 文件名,默认是dump.rdb。
dir /var/lib/redis/6379 # 设置 RDB 存储的路径,默认是Redis启动目录,一般需要指定其他路径
rdb-del-sync-files no
# rdb-del-sync-files是Redis的一个高级配置选项,在默认情况下不开启。
# 当开启后,Redis在执行RDB持久化期间,将首先创建一个新的RDB文件,如果保存成功,则删除上一个RDB文件,并将新RDB文件重命名为原来的RDB文件名。具体来说,当开启rdb-del-sync-files选项时,Redis会在将新的RDB文件重命名为旧的RDB文件的同时将旧的RDB文件删除,这个动作是同步执行的,因此相当于在RDB文件的写入和删除之间插入了一个同步点。
# 开启rdb-del-sync-files,可以将RDB生成和删除的CPU负载分散在时间上,从而减少对Redis操作的影响。但是需要注意的是,由于同时进行写入和删除的操作,所以会消耗更多的磁盘IO,因此在I/O繁忙的系统上,这个选项可能会影响Redis的性能表现。
3、手动触发RDB
4、RDB原理
(二)AOF
1、AOF是什么
以日志的形式来记录每个写操作(增量保存),将Redis执行过的所有写指令记录下来(读操作不记录), 只许追加文件但不可以改写文件,redis启动之初会读取该文件重新构建数据,换言之,redis 重启的话就根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作。
2、开启AOF
AOF和RDB同时开启,系统默认取AOF的数据(数据不会存在丢失)
3、AOF持久化流程
(1)客户端的请求写命令会被append追加到AOF缓冲区内;
(2)AOF缓冲区根据AOF持久化策略[always,everysec,no]将操作sync同步到磁盘的AOF文件中;
(3)AOF文件大小超过重写策略或手动重写时,会对AOF文件rewrite重写,压缩AOF文件容量;
(4)Redis服务重启时,会重新load加载AOF文件中的写操作达到数据恢复的目的;
4、Rewrite压缩
1 压缩是什么:
AOF采用文件追加方式,文件会越来越大为避免出现此种情况,新增了重写机制, 当AOF文件的大小超过所设定的阈值时,Redis就会启动AOF文件的内容压缩, 只保留可以恢复数据的最小指令集.可以使用命令bgrewriteaof
2 重写原理,如何实现重写
AOF文件持续增长而过大时,会fork出一条新进程来将文件重写(也是先写临时文件最后再rename),redis4.0版本后的重写,是指上就是把rdb 的快照,以二级制的形式附在新的aof头部,作为已有的历史数据,替换掉原来的流水账操作。
重写虽然可以节约大量磁盘空间,减少恢复时间。但是每次重写还是有一定的负担的,因此设定Redis要满足一定条件才会进行重写。
如果Redis的AOF当前大小>= base_size +base_size*100% (默认)且当前大小>=64mb(默认)的情况下,Redis会对AOF进行重写。
(三)RDB vs AOF
三、Redis主从集群读写分离
(一)搭建主从架构
(二)主从同步原理
全量同步
增量同步
同步优化
总结
简述全量同步和增量同步区别?
全量同步:master将完整内存数据生成RDB,发送RDB到slave。后续命令则记录在repl baklog,逐个发送给slave。
增量同步:slave提交自己的offset到master,master获取repl_baklog中从offset之后的命令给slave
什么时候执行全量同步?
slave节点第一次连接master节点时slave节点断开时间太久,repl_baklog中的offset已经被覆盖时
什么时候执行增量同步?
slave节点断开又恢复,并且在repl_baklog中能找到offset时
四、Redis哨兵
(一)、哨兵的作用和原理
1、哨兵的作用
2、哨兵原理
(二)、搭建哨兵集群
(三)、RedisTemplate哨兵模式