16 Redis 数据备份和恢复

1,半持久化RDB 模式
2, 全持久化AOF模式
3,Redis主从复制备份


Redis所有数据 都是保存在内存中,Redis数据备份可以定期的通过异步方式保存在磁盘上,该方式称为半持久化模式,如果每一次数据变化都写入aof文件里面,则称为全持久化模式。同时还可以基于Redis 主从复制实现Redis备份与恢复。
1,半持久化RDB模式
半持久化RDB 模式也是REdis备份默认方式,是通过快照(snapshotting)完成的,当符合在Redis.conf配置文件中设置的条件时Redis会自动将内存中所以的数据进行快照并存储在硬盘上,完成数据备份。
Redis 进行RDB 快照的条件由用户在配置文件中自定义,有2个参数构成,时间和改动的键的个数。挡在指定的时间内被更改的键的个数大于指定的数值时就会进行快照。在配置文件中已经预制了3个条件:

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

默认可以存在多个条件,条件之间是或的关系,只要满足其中的一个条件,就会进行快照,如果想要禁用快照,只需要将所有的save的参数删除即可。Redis默认会将快照文件存储在redis数据目录。默认的文件名为: dump.rdb 文件,可以通过配置dir 和 dbfilename 2个参数分别指定快照的路径和文件名。也可以在rdeis命令行里执行config get dir 获取redis 数据保存路径 ,


image
image

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

执行fork的时操作系统会使用写时复制(copy-on-write)策略,即fork函数发生的一刻父子进程共享同一个内存数据,当父进程要改其中谋片数据时,操作系统会将改片数据复制一份以保证子进程的数据不受影响,所以新的RDB 文件存储的时执行fork一刻的内存数据。
Redis在进行快照的过程中不会修改RDb文件,只有快照结束后才会将旧的文件替换成新的,也就是说任何时候RDB文件都是完整的,这使得我们可以通过定时备份RDB 文件来实现Redis 数据库备份。
RDB 文件是经过压缩(可以配置rdbcompression参数以禁用压缩节省CPU占用)
的二进制格式,所以占用的空间会小于内存中的数据大小,更加利于传输。除了自动快照,还可以手动发送save 和bgsave命令让REDIS 执行快照。2个命令的区别在于,前者是由主进程进程进行快照操作,会阻塞住其他请求,后者会通过fork子进程进行快照操作。
Redis启动后会读取RDb快照文件,将数据从硬盘载入到内存,根据数据量大小与结构和服务器性能不同,通常将一个记录一千万个字符串类型键,大小为1gb的快照文件载入到内存20-30秒钟。
通过rdb方式实现持久化,一旦redis异常退出,就会丢失最后一次快照以后更改的所有的数据,此时需要根据开发者根据具体的应用场合,通过组合设置自动快照条件的方式来将可能发生的数据损失控制在能够接受的范围。

2,全持久化AOF 模式
如果数据很重要无法承受任何损失,可以考虑使用aof 方式进行持久化。默认redis没有开启aof(append only file)方式的全持久化模式。
在启动时redis 会逐个执行AOF文件中的命令来将硬盘中的数据载入到内存中,载入的速度比RDB会慢一些,开启aof持久化后每执行一条会更改redis 中的数据的命令,Redis就会将改命令写入到硬盘中的aof文件,aof文件保存位置和rdf文件的位置相同。都是通过dir参数设置的。默认的文件名是appendonly.aof,可以通过appendfilename 参数修改该名称。
Redis 允许同时开始aof 和rdb,既保证了数据安全又使得进行备份等操作十分容易。此时重启redis后redis会使用aof 文件来恢复数据,因为aof方式的持久化可能丢失的数据更少,可以在redis.conf 中通过appendonly 参数开启redis aof 全持久化模式:

appendonly  yes                    #开启AOF持久化功能;
appendfilename appendonly.aof          #AOF持久化保存文件名;
appendfsync always                     #每次执行写入都会执行同步,最安全也最慢;
#appendfsync everysec                  #每秒执行一次同步操作;
#appendfsync no                    #不主动进行同步操作,而是完全交由操作系统来做,每30秒一次,最快也最不安全;
auto-aof-rewrite-percentage  100      #当AOF文件大小超过上一次重写时的AOF文件大小的百分之多少时会再次进行重写,如果之前没有重写过,则以启动时的AOF文件大小为依据;
auto-aof-rewrite-min-size    64mb      #允许重写的最小AOF文件大小配置写入AOF文件后,要求系统刷新硬盘缓存的机制。

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

为了避免单点故障,我们希望将数据库复制在多个副本以部署在不同的服务器上,即使只有一台服务器出现故障其他服务器可以继续提供服务,这就要求当一台服务器上的数据库更新后,可以自动将更新的数据同步到其他的服务器上,redis提供了复制(replication)功能可以自动实现同步的过程。通过配置文件在redis从数据库中配置文件中加入 slaveof master-ip master-port即可 ,主数据无需配置。
redis主从复制优点以及应用场景,web应用程序可以基于主从同步实现读写分离以提高服务器的负载能力。在常见的场景中,读的频率一般比较大,以单机redis 无法应付大量的读请求时,可以通过复制功能建立多个从数据库,主数据只进行些操作,而从数据库负责读写操作,还可以基于lvs+keepalived+Redis 对redis 实现均和高可用。
从数据库持久化通常相对比较耗时,为了提高性能,可以通过复制功能建立一个(或若干个)从数据库, 并在从数据库中启用持久化。同时在主数据库禁用持久化。

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

https://www.cnblogs.com/deny/p/11531355.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,163评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,301评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,089评论 0 352
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,093评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,110评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,079评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,005评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,840评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,278评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,497评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,667评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,394评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,980评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,628评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,649评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,548评论 2 352