REDIS数据安全与性能保障
数据持久化
定义
REDIS的数据持久化有两种方式,一种是RDB方式,就是在指定条件达到时,或者接收命令将redis中的数据以快照的方式保存到磁盘中;另一种方式是AOF,达到指定条件时,将输入的指令追加到指定文件。
配置
// 快照持久化配置
save 60 1000 // 每60s执行1000次操作
stop-writes-on-bgsave-error no // 保存快照发生错误时是否继续写入
rdbcompression yes // 压缩rdb文件
dbfilename dump.rdb // 保存文件名
// AOF持久化配置
appendonly no // 是否使用AOF持久化
appendfsync everysec // 每秒保存
no-appendfsync-on-rewrite no // 在对AOF进行压缩是否执行同步操作
auto-aof-rewrite-percentage 100 // 一倍
auto-aof-rewrite-min-site 64mb //64mb才压缩
// 共有配置
dir ./ 文件保存目录
RDB
创建快照的几种方法:
- 客户端发送BGSAVE命令,redis服务器就会fork出一个子进程来将快照写入磁盘,主进程响应其他命令
- 客户端发送SAVE命令,不做其他响应,只讲快照保存到磁盘中,容易造成堵塞,不推荐使用
- 配置文件中配置了save配置,比如save x y x秒内执行了y次写入,就触发BGSAVE命令
- 接收到SHUTDOWN命令时,或收到TERM命令,会执行一个SAVE命令
- 当一个redis服务器连接另一个redis服务器,并向对方发送sync命令,则触发BGSAVE
RDB会丢失生成最近一次快照后,接收的命令。
AOF
AOF持久化会将执行的写命令追加到AOF文件的末尾。
appendfsync选项
-
always
每个Redis写命令都同步保存到硬盘中,严重影响redis性能
-
everysec
每秒执行一次同步操作,最多丢失1s数据
-
no
让操作系统来决定何时保存,系统崩溃时,不能评估丢失数据量
随着时间流逝,AOF文件增长会很快,文件会变得很大,用户可以向redis发送一个BGREWRITEAOF命令,来重写AOF文件,消除冗余的命令,也可以通过配置auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-site 64mb这两个配置来自动触发重写命令。
复制
redis主从复制配置
如果只是一主多从的集群配置,多个从节点在和主节点进行通信时,可能会阻塞,我们可以设计成主从链,一主三从九从从,这样来分摊主服务器的压力
检验磁盘写入
通过向主服务器写入标志位,再到从服务中检测是否收到标志位来检测是否同步完成,再检测从服务器info里面的aof-pending-bio-fsync=0来显示已经写入磁盘中
处理系统故障
- 进行数据恢复时,我们应当先验证rdb文件或aof文件使用redis-check-dump或redis-check-aof命令
- 再更换故障服务器,可以使用新的redis服务器当主服务器,对从服务器执行save命令,生成数据文件,再拷贝到新主服务器中;或者将从服务器升级为主服务器,另外添加从服务器。或者使用Redis Sentinel技术,它可以监听服务器,当祝福其挂掉时,自动进行故障转移。
未完待续。。。
网友评论