在今年 OpenStack 巴塞罗那峰会上,OPNFV 在 Keynote 上现场表演了剪线后迅速恢复的高可用演示,在现场获得了众人的关注,根据 Keynote 上 Slides 所述,高可用技术主要来自两大组织的五个项目:
• OpenStack
• Aodh
• Congress
• Nova
• Vitrage
• OPNFV
• Doctor
图为现场演示剪断线路
其中 Nova 是 OpenStack 从业者无人不知的,Aodh 为从 Liberty 版逐渐进入用户视野的报警服务,Congress 进入 OpenStack 已经比较久了,可以提供相当复杂的策略服务,但目前应用还比较少,Vitrage 曾经在之前有云的文章中有过介绍,而 Doctor 目前在业界中声音一直比较小,这里介绍下。
OPNFV 类似于 OpenStack 的项目组织,由社区自行提交项目,OPNFV 目前最新版本为 Colorado,今年 9 月底发布的的一个版本,是 OPNFV 的第三个正式大版本。Doctor 是 OPNFV 比较早期的项目,从第一个版本就进入社区,并且是社区几个大规模在宣传的项目之一。
Doctor 的源代码可以从 https://gerrit.opnfv.org/gerrit/doctor 下载,其目录结构如下(由于图片比较多,因此排除掉):
可以看到 Doctor 大部分文件都是文档,只有五个 Python 源码文件和一个 Shell 脚本!这是怎么回事呢?其实,Doctor 项目看似是一个独立项目,但需要和很多 OpenStack 项目集成,所有 Doctor 的开发者大量 BP 是在其他 OpenStack 项目中完成的,下面表格是今年 OPNFV Summit 中介绍 Doctor 的进展制作的表格,可以看到开发者在 Ceilometer、Aodh、Nova、Congress 中都有贡献。
Doctor 的工作原理比较简单,下面这两张图可以说明大概,第一张图表示工作的原理,管理员设置报警信息,报警由 Aodh 控制,如果 Monitor 检测到异常数据,由 Congress、Vitrage 来分析或者聚合,根据受影响资源来控制 Nova、Neutron、Cinder 等服务的状态,然后发送到 Ceilometer、Aodh,后者发送报警到 Manager,再由 Manager 出发动作,疏散或恢复相应资源。
举个服务器宕机的例子,用户开/关虚拟机,不关心服务器的状态,管理员(这里的管理员也可能是服务)监控虚拟机、物理服务器状态,一旦服务器有异常,迅速关闭(Force Down)服务器,并执行疏散迁移。
这里边很多东西都是 OPNFV 提交到 OpenStack 社区后才实现的 API,例如 Nova 的强制标记服务器为 Down 状态,给虚拟机添加 host state 字段,Ceilometer 里的迅速通知的时间类型等,虽不在 Doctor 仓库,但也是 Doctor 社区的贡献。
Doctor 本身的代码要简单很多,Monitor 就是一个一个不断发送 ping 指令的循环,默认的超时非常的小,inspector 可以设置为 Congress 或 Sample,in-tree 的 sample inspector 是一个 flask app,用来执行 Nova 的 host down API 接口,consumer.py 也是一个 flask app,在运行 run.sh 坐 demo 时 ceilomter 如果受到相应类型事件会执行 consumer.py,consumer 则会打印相应数据,前面图中的 Manager。
总之,Doctor 项目是一个很特别的项目,其目录内的代码更多的是一个演示,其更大的价值在于提供实现一个高可用服务的可能和演示、搭齐需要的环境和 API,更具体和细节的工作则需要厂商来完成,例如如何确保监控准确性、如何提升高可用服务本身可用性、如何避免脑裂和误判等等,还有很多事情需要厂商来完成。
最后,将在北京举行的 OPNFV 2017 Summit 已经开放注册,目前可以注册早鸟票,感兴趣的同学不妨注册一下:http://events.linuxfoundation.org/events/opnfv-summit/attend/registration(作者:王为,UnitedStack有云)