Redis持久化备份方式

来源:互联网 发布:炒股软件mac版 编辑:程序博客网 时间:2024/05/10 01:22

Redis持久化备份方式

半持久化RDB模式  

Redis定期将内存中数据刷到磁盘上,从而保证数据的持久化,永久保存Redis数据。

半持久化RDB是Redis默认备份方式,通过快照(snapshotting)完成的,当满足在Redis.conf配置文件中设置的条件时Redis会自动将内存中的所有数据进行快照并存储在硬盘上,完成数据备份。

Redis进行RDB快照的条件由用户在配置文件中自定义,由两个参数构成:时间和改动键的个数。当在指定时间内被更改键的个数大于指定的数值时就会进行快照。配置文件中默认预值了3个条件:

save              900        1           #900秒内有至少1个键被更改则进行快照;

save              300        10          #300秒内有至少10个键被更改则进行快照;

save              60        10000      #60秒内有至少10000个键被更改则进行快照。默认可以存在多个条件,条件之间是“或”的关系,只要满足其中任意一个,就会进行快照备份数据。若想要禁用自动快照,只需删除所有save参数即可。

Redis默认会将快照文件存储在Redis数据目录中,默认文件名是:dump.rdb,可通过配置dir和dbfilename两个参数来指定快照文件的存储路径和文件名。

也可以在Redis命令行执行config get dir获取Redis数据保存路径,如下图:



Redis快照过程:Redis使用fork函数复制一份当前进程(父进程)的副本(子进程),父进程负责接收和处理客户端发来的命令,而子进程负责将内存中的数据写入硬盘中的临时文件,当子进程写完所有数据后会用该临时文件替换旧的RDB文件,至此一次快照操作完成。

RDB文件是经过压缩的二进制格式,所以占用的空间会小于内存中的数据大小。除了自动快照,还可以手动发送SAVE和BGSAVE命令让Redis执行快照。

两个命令区别是:SAVE是由主进程进行快照操作,会阻塞其他请求,BGSAVE会通过fork子进程进行快照操作。

全持久化AOF模式

Redis实时将内存中数据刷到磁盘上,从而保证数据的持久化,永久保存Redis数据。

如果数据非常重要无法承受任何损失,可以使用AOF方式进行持久化,默认Redis没有开启AOF(append only file)方式的全持久化模式。

在启动时Redis会逐个执行AOF文件中的命令来将硬盘中的数据载入到内存中,载入的速度相对于RDB慢些,开启AOF持久化后每执行一条都会更改Redis中的数据的命令,Redis就会将命令写入硬盘中的AOF文件。

Redis允许同时开启AOF和RDB,既保证了数据安全又使得进行备份等操作十分容易。

Redis AOF持久化参数配置详解:

appendonly  yes                                       #开启AOF持久化功能;

appendfilenameappendonly.aof              #AOF持久化保存文件名;

appendfsyncalways                              #每次执行写入都会执行同步,最安全也最慢;

#appendfsynceverysec                           #每秒执行一次同步操作;

#appendfsyncno                                  #不主动进行同步操作,而是完全交由操作系统来做,每30秒一次,最快也最不安全;

auto-aof-rewrite-percentage  100           #当AOF文件大小超过上一次重写时的AOF文件大小的百分之多少时会再次进行重写,如果之前没有重写过,则以启动时的AOF文件大小为依据;

auto-aof-rewrite-min-size    64mb         #允许重写的最小AOF文件大小配置写入AOF文件后,要求系统刷新硬盘缓存的机制。

Redis主从复制备份

通过持久化功能,Redis保证了即使在服务器重启的情况下也不会损失(或少量损失)数据。但是由于数据是存储在一台服务器上的,如果这台服务器的硬盘出现故障,也会导致数据丢失。

为了避免单点故障,我们希望将数据库复制多个副本以部署在不同的服务器上,即使只有一台服务器出现故障其他服务器依然可以继续提供服务,这就要求当一台服务器上的数据库更新后,可以自动将更新的数据同步到其他服务器上,Redis提供了复制(replication)功能可以自动实现同步的过程。通过配置文件在Redis从数据库中配置文件中加入slaveof  master-ip master-port即可,主数据库无需配置。

Redis主从复制优点及应用场景, WEB应用程序可以基于主从同步实现读写分离以提高服务器的负载能力。在常见的场景中,读的频率一般比较大,当单机Redis无法应付大量的读请求时,可以通过复制功能建立多个从数据库,主数据库只进行写操作,而从数据库负责读操作,还可以基于LVS+keepalived+Redis对Redis实现均和高可用。

从数据库持久化通常相对比较耗时,为了提高性能,可以通过复制功能建立一个(或若干个)从数据库,并在从数据库中启用持久化,同时在主数据库禁用持久化。

当从数据库崩溃时重启后主数据库会自动将数据同步过来,所以无需担心数据丢失。而当主数据库崩溃时,需要在从数据库中使用SLAVEOF NO ONE命令将从数据库提升成主数据库继续服务,并在原来的主数据库启动后使用SLAVE  OF命令将其设置成新的主数据库的从数据库,即可将数据同步回来。