SA项目灾难恢复策略
本文有三部分内容,分别为RedisHA策略,Storm策略,Voltdb集群策略
一:RedisHA策略
(1)介绍
SA项目中redis采用版本为2.8,采用其自带的redis-sentinel功能来实现HA。启动三个sentinel进程来监控master和slaver。三个sentinel进程互相通信,有一个为主sentinel进程用来选举master节点。当主sentinel挂掉,sentinel进程会根据选举算法推选出一个新的sentinel来作为主sentinel进程,从而选出master。这样的架构保证了不存在单点问题。
(2)备份
Redis的持久化采用的是默认的快照模式。设置参数为:
save 900 1 #当有一条Keys数据被改变时,900秒刷新到Disk一次
save 300 10 #当有10条Keys数据被改变时,300秒刷新到Disk一次
save 60 10000 #当有10000条Keys数据被改变时,60秒刷新到Disk一次
采用快照方式做持久化,如果真是master和slaver都挂机,在启动时会自动加载快照文件,恢复大部分数据。
(3)恢复
利用快照进行数据备份会在redis目录下生成dump.rdp文件。当redisHA中的master挂掉,slaver会自动升级为master。再次启动原来的master会降级为slaver,同步master数据。
二:Storm策略
(1)介绍
Storm采用集群方式搭建:一个nimbus,多个supervisor。Storm是快速失败的设计模型,中间的组件不会保留数据,所以可以做到失败的组件从新创建立刻运行。
(2)备份
因为storm是快速失败的,不保留中间数据,当然也不存在备份的策略。所有的数据处理和保存都有用户自定义过程。
(3)恢复
storm集群有一个单点问题就是nimbus。当nimbus进程down掉后无法从新启动失败的supervisor,但是不影响正在使用的supervisor上面的程序。只需要从新启动nimbus进程即可。
三:Voltdb策略
(1)介绍
Voltdb数据库采用集群模式部署。利用snapshot和command log两大特性进行数据持久化到硬盘,利用k-safety特性保证数据冗余。防止出现节点失效导致的集群不能正常工作。
(2)备份
Voltdb数据库集群采用snapshot和command log两大特性进行内存数据持久化。通过修改deployment.xml文件设置snapshot的频率(比如1小时),保留数量(比如3份),设置日志记录为同步记录以及k-safety=1(保证数据冗余份数为1)。
(3)恢复
如果voltdb集群是单个节点失效(无论是硬件还是软件原因),可以使用命令voltdb rejoin如下:
$ voltdb rejoin host myclusternode5 \
deployment mydeployment.xml
把失效节点从新加入到集群中,需要指定一台集群中正常工作的节点和跟集群相同的配置文件。
如果voltdb集群是全部挂掉,可以使用命令voltdb recover 如下:
$ voltdb recover \
host voltsvr1 \
catalog mycatalog.jar \
deployment deployment.xml \
license /opt/voltdb/voltdb/license.xml
通过快照和日志进行数据的恢复。