云上mysql redis数据备份简要分析和方案 - 云起网

云起网

您现在的位置是:首页> 服务器相关 -> 云上mysql redis数据备份简要分析和方案

Article

云上mysql redis数据备份简要分析和方案

云起网2018-09-20 服务器相关271
现在是云的时代程序和数据都在云上,在别人的地方总会担心各种情况的丢失,发生过一两次,数据的备份就被提上了日程。

之前的备案方案可以说极其简陋甚至没有方案:

mysql、redis每天10点冷备,备份到本地磁盘和阿里云OSS

redis使用rdb落地,每60秒至少有1次写就会触发落地。

这样做的问题其实挺多的,主要几个:


mysql dump的时候会导致游戏卡顿,即使加了 -single-transaction 参数 也仅仅是缓解

冷备频率过低,真出现问题数据已经太久

没有热备,风险较大

针对这些问题,我们先做了mysql备份的优化。


mysql主从同步,实现热备。

主机不再执行mysqldump,从机上每隔10分钟执行一次mysqldump,并备份到本地磁盘和阿里云OSS

mysql的备份方案还是比较简单的,唯一要注意的是,从机启动的时候并不会从主机拉取所有数据,所以需要停服先把主机的数据手动同步到从机,之后再启动同步。


接下来,是redis的备份问题。


为了与mysql的备份时间一致,redis这边改成了主机每10分钟备份rdb文件一次。


但新方案运行了几天之后,发现mysql经常会突然响应变慢。


后来发现因为备份脚本的逻辑是会先把rdb文件copy一份出来,而copy的目标位置和mysql使用的磁盘是同一个磁盘,所以导致磁盘IO上升,从而mysql变慢。


并且redis的bgsave每隔60秒运行一次,也是会对磁盘有大量的写操作,不过目前看来影响不是特别大,因为数据量比较小。


所以我们开始考虑新的redis备份方案。


与mysql不同,redis从机在第一次启动的时候会从主机全量同步一次数据。


所以我们想了几套方案,我分别列一下。


redis主从热备,从机进行冷备


这种方案其实是可以的,但是有几个问题:


如果主机不关闭rdb保存就没有问题,如果关闭了的话,那么当主机不小心宕机重启,那么当主机redis启动之后,会把从机redis的数据也抹掉。十分危险。

一旦从机服务器出问题,重新启动后会从主机同步所有数据,导致主机bgsave运行,如果数据量很大,会导致主机内存狂飙,如果主机又忘记配置内存使用限制,就会是灾难了。这在云风的一篇文章中有写: 谈谈陌陌争霸在数据库方面踩过的坑( Redis 篇)

所以后来,我决定选择一个比较简单的方案。


使用ssh将rdb文件传输到另一台机器上,再进行冷备。


既然是因为磁盘写IO增加导致问题,那么我们就先规避掉这个问题好了。


至于,redis是否要做主从热备的问题,暂时我们是还没做的,等以后再说吧。


其实要不是之前有一次阿里云服务器出现故障导致我们mysql全都用不了,我也不会狠下心半夜停服一个小时去调整备份方案。


正如前段时间被DDOS了,相关的抵御优化才被提上日程一样,无非时、势二字。


文章评论

共有0条评论来说两句吧...