日期: 2017-05-05

分类: ['cloud-infra']

OpenStack自动化部署与高可用虚拟控制节点设计

为了大家的部署方便与维护着想,我决定把这俩东西再完善一下然后再把实现源码放出来,虽不能做到产品级但是也能对付很多场景了。

自动部署(类似mirantis但更友好) 0. livecd+独立配置分区 1. 环境配置 2. PXE安装 3. 自动化脚本

Hosted-crotroller(控制节点虚拟化) 1. etcd 2. 健康检查与评分 3. 脑裂防护 4. 使用Paxos写事务机制,如果时间差机制不工作的话。

下面给大家简单解释一Paxos和时间差机制的原理(解释的不够到位,有兴趣的看实现吧):

1. Paxos,原文可参考https://www.quora.com/Distributed-Systems-What-is-a-simple-explanation-of-the-Paxos-algorithm

此场景实用于一写多。

两人结婚,牧师问他俩,“你们愿意吗?”,“我愿意”,“我愿意”。 那么OK,就结了。

这时候假如有一对姐妹同时喜欢一个男的,牧师问他仨,“你们愿意吗”,“我愿意”,“我愿意”,“我愿意”。 如果这样,那么男的就能娶俩,如果任何一个没回答,那抱歉了一个都娶不成。

在实现时,主节点问下面节点,我要给你们都写个东西,你们都准备好没?“好了”,“好了”,“好了”,“没好”。 75%(>50%)(Quorum)的人都准备好了,那么我就写了,没准备好的那个我记住你了。

2. Paxos时间差机制(sanlock变种) 这个机制我设计成只针对这个场景的,要求时间同步至数秒级别(这要求已经极低了。。),多写一,也可以扩展。

控制节点要你们去存储上填个表格,你们现在都能写,对吧?“对”,“对”,“对”,“不能”。。 OK,不能的那个我记住你了,其他人都来写吧。

控制节点看看表,再看看这个地方之前记的时间,嗯,过去2分钟了,写一下,我在A身上跑着; 然后A看看表,再看看这个地方之前记的时间,嗯,还没过去2分钟,不写,之前体检合格,控制节点在我身上; 然后B看看表,再看看这个地方之前记的时间,嗯,过去2分钟了,签个到留个时间,体检优秀; 然后C看看表,再看看这个地方之前记的时间,嗯,过去2分钟了,签个到留个时间,体检合格;

然后控制节点每隔1分钟看一下,嗯,你们都很健康。 又过了3分钟,哎?那个C你没写啊,去跟D站一起。

忽然,大家在填表的时候发现,控制节点都过了3分钟没写了,B就启动一下控制节点。 A发现自己与外界失去联系,就把自己身上都控制节点关了,等待救援。

3. 基于etcd的时间差机制 上述的简化版,填的表格更少,时间差一致 大家一起写etcd的那个地方。“好”,“好”,“好”。 哎?C你没写,再见。 哎?控制节点呢?来A你检查一下启一下控制节点,B现在状态不佳。 由于控制节点之前在你A上,它现在不行了,扣A个10分,现在分没B高啊。 A你清理下现场让B去启动吧。

试图设计一个任何场景都能应对的功能。