最近公司用于线上openstack环境的设备已经到达,DELL R420两台做控制节点,DELL R620五台做计算节点,DELL MD3200做实例镜像的备份,由于采用的低端存储设备,所以直接把实例的镜像文件直接写入存储中,IO性能肯定达不到,该存储的作用只是用于备份,虚拟机实例镜像还是落在计算节点本地的,关于虚拟机实例的备份有以下三种方案:

1 每天在计算节点定时用rsync同步虚拟机实例的镜像文件,每台计算节点计划运行四个虚拟机实例,每个实例规划空间为150G。

2 在计算节点的虚拟机实例上启用chroot环境,让业务程序直接运行在虚拟机的chroot环境中,然后用国产神器sersync实时同步chroot的整个环境到后端MD3200存储上(排除一些不必要的系统运行目录)。

3 和方案2差不多,也是让业务运行于chroot环境中,不过不同步整个chroot环境,只是用sersync同步chroot环境中与业务有关的几个重点目录到后端存储上(排除一些不必要的系统运行目录)。

   至于方案的效率就要看sersync的效率和网络带宽了。还有一个是关于chroot环境的,由于公司DO未分离,而且chroot环境中并不是运行某些单一的任务,可能是多种业务,每台虚拟机实例可能都有自己的业务配置环境,这样chroot运行一段时间后,就可能和一个完整的小型系统一样,慢慢变得庞大起来,因此需要同步的内容也会变多。

以上三个方案的BUG:

   在方案1中,由于实例镜像过于庞大,rsync在同步文件时先扫描文件进行对比,然后同步不同的文件,这样会浪费计算节点的资源,而且同时同步四个实例的话,不知是否会影响业务带宽,经评测后决定只能在晚上定时同步,这样时效性就差了。openstack有个快照功能,不过150G的镜像文件在做快照时也会需要一段时间,而且业务会中断,如果是不能中断的业务就不好操作了。

   在方案2中,用sersync直接同步整个chroot环境,相当于在本地有一份内容,在后端存储也有一份内容,如果计算节点宕机,只要生成一台实例,把存储上的对应业务文件copy到新实例上即可运行,不过就如上面所说,由于同步的是整个chroot环境,chroot环境本身也可能会很大,其中相当大一部分数据可能并不需要同步,项目经常会产生大量的日志文件,动辄上百G的日志文件,应该是没有必要同步的。不过确实方便配置管理。

   在方案3种,也是同步chroot环境,不过只是同步一些和业务相关的重要目录,系统目录、业务日志之类的目录就可以被忽略,这样同步的内容就会大大减少,不过由于公司业务DO未分离,导致运营人员并未完全掌控生产环境,可能会导致个别重要目录被遗忘,由于公司架构关系,业务多达几十个,而只是由少数几个人维护,虽然在备份上提升了一点性能,但是在后期管理方面可能会相当复杂。