zhaozhijun 2018-09-06
先说下背景,公司的服务器一直用的阿里云,包括mysql、redis也都是买了ECS自己搭建的。这里面有几个原因:
这样自己来搞存储有好处也有坏处。
好处:
坏处:
ok,问题就是这样,接下来再来说一下我们之前的冷备和热备方案。
可以说极其简陋:
这样做的问题其实挺多的,主要几个:
针对这些问题,我们先做了mysql备份的优化。
mysql的备份方案还是比较简单的,唯一要注意的是,从机启动的时候并不会从主机拉取所有数据,所以需要停服先把主机的数据手动同步到从机,之后再启动同步。
接下来,是redis的备份问题。
为了与mysql的备份时间一致,redis这边改成了主机每10分钟备份rdb文件一次。
但新方案运行了几天之后,发现mysql经常会突然响应变慢。
后来发现因为备份脚本的逻辑是会先把rdb文件copy一份出来,而copy的目标位置和mysql使用的磁盘是同一个磁盘,所以导致磁盘IO上升,从而mysql变慢。
并且redis的bgsave每隔60秒运行一次,也是会对磁盘有大量的写操作,不过目前看来影响不是特别大,因为数据量比较小。
所以我们开始考虑新的redis备份方案。
与mysql不同,redis从机在第一次启动的时候会从主机全量同步一次数据。
所以我们想了几套方案,我分别列一下。
redis主从热备,从机进行冷备
这种方案其实是可以的,但是有几个问题:
所以后来,我决定选择一个比较简单的方案。
使用ssh将rdb文件传输到另一台机器上,再进行冷备。
既然是因为磁盘写IO增加导致问题,那么我们就先规避掉这个问题好了。
至于,redis是否要做主从热备的问题,暂时我们是还没做的,等以后再说吧。
其实要不是之前有一次阿里云服务器出现故障导致我们mysql全都用不了,我也不会狠下心半夜停服一个小时去调整备份方案。
正如前段时间被DDOS了,相关的抵御优化才被提上日程一样,无非时、势二字。