[转]redis持久化和常见故障
Redis主从复制的原理
当建立主从关系时,slave配置slaveof <master_host> <master_port> 。slave服务器会向主服务器发送一个sync命令。master接受并fork一个进程来执行BGSAVE命令。该命令生成一个RDB文件并且全量发送给slave服务器,slave服务器接收并载入RDB文件,同时,主服务器将缓冲区的命令以增量的方式发送给从服务器,最终使从服务器的数据状态和主服务器保持一致。
RDB的工作原理
当redis生成dump.rdb文件时,工作过程如下
redis主进程fork一个子进程
fork出来的子进程将内存的数据集dump到临时的RDB中
当子进程对临时的RDB文件写入完毕,redis用新的RDB文件代替旧的RDB文件
AOF的工作原理
AOF :append only file。每当Redis执行一个改变数据集的命令时,这个命令都会被追加到AOF文件的末尾。当redis重新启动时,程序可以通过AOF文件恢复数据
持久化文件监控
Redis 监控最直接的方法当然就是使用系统提供的 info 命令来做了,只需要执行下面一条命令,就能获得 Redis 系统的状态报告。
redis-cli info
RDB文件状态监控
其中跟RDB文件状态监控相关的参数
rdb_changes_since_last_save 表明上次RDB保存以后改变的key次数
rdb_bgsave_in_progress 表示当前是否在进行bgsave操作。是为1
rdb_last_save_time 上次保存RDB文件的时间戳
rdb_last_bgsave_time_sec 上次保存的耗时
rdb_last_bgsave_status 上次保存的状态
rdb_current_bgsave_time_sec 目前保存RDB文件已花费的时间
AOF文件状态监控
其中跟AOF文件状态监控相关的参数
aof_enabled AOF文件是否启用
aof_rewrite_in_progress 表示当前是否在进行写入AOF文件操作
aof_rewrite_scheduled
aof_last_rewrite_time_sec 上次写入的时间戳
aof_current_rewrite_time_sec:-1
aof_last_bgrewrite_status:ok 上次写入状态
aof_last_write_status:ok 上次写入状态