OpenStack heat HA

2024-03-16 10:32
文章标签 openstack ha heat

本文主要是介绍OpenStack heat HA,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

如需转载,请标明原文出处以及作者

陈锐 Rui Chen @kiwik

*2014/3/22 12:47:38 *


记得还在去年的时候,大家讨论OpenStack总离不了这样的一个问题:“OpenStack为什么不支持虚拟机的HA?

当时也很奇怪,对于HA这样一个很基本的可靠性特性有缺失,又怎么在实际场景中使用OpenStack呢?

当时社区讨论的结果是:“由OpenStack上层组件实现HA,OpenStack核心模块仅提供基本的操作。

那么这个所谓的上层组件指的是谁呢?就是Heat。如今Heat已经是OpenStack的核心模块,也就是说OpenStack已经具备的HA的能力。

超出期望

以前我们总是说虚拟机HA,似乎所有的功能都是围绕着虚拟机设计,已虚拟机为核心。但是从Heat的文档里来看,Heat认为虚拟机之上的服务(Service)才是最终要的,对于Heat HA的设计,也扩展到了服务的层面,可以实现三个层次的HA:

  • service
  • instance
  • stack

例如:当虚拟机上的数据库进程down了,首先通过重启数据库进程尝试解决,如果解决不了,重启或者重建虚拟机,如果还是解决不了,重建整个stack。从这一点上来看Heat HA的功能要比单纯的虚拟机HA的功能强大很多。

实现

Heat的HA特性是OpenStack多模块配合实现的,其中涉及到Nova,Ceilometer,Heat-cfn-api,Heat-cloudwatch,Heat-cfntools等。

»Heat-cfntools

Heat-cfntools包括了一些和Heat配合使用的小工具,它们运行在虚拟机内部,在制作虚拟机镜像的时候,需要将cfntools打包到镜像当中,Heat的开发者文档中,介绍了将cfntools打包进镜像中的方法。这里

Heat的HA功能就是用到了cfn-push-stats对虚拟机或者服务的状态进行上报。

  • cfn-init -> 配置虚拟机,简化user_data脚本
  • cfn-hub -> 定期检测instance metadata是否有变化,根据变化触发用户定义的hooks
  • cfn-signal -> 发送执行命令成功或失败的信号
  • cfn-push-stats -> 上报服务或虚拟机状态
  • cfn-get-metadata -> 获取instance metadata

有兴趣的同学可以直接git clone一份cfn-tools的代码看看。

https://github.com/openstack/heat-cfntools.git

»Heat-template

我们从Heat的HA模板入手,来分析一下怎么通过配置模板实现Heat的HA。

以github上的Heat模板WordPress_Single_Instance_With_IHA.template为例。

..."WebServerRestartPolicy" : {"Type" : "OS::Heat::HARestarter","Properties" : {"InstanceId" : { "Ref" : "WikiDatabase" }}
},
"HeartbeatFailureAlarm": {"Type": "AWS::CloudWatch::Alarm","DependsOn" : "WaitCondition","Properties": {"AlarmDescription": "Restart the WikiDatabase if we miss a heartbeat","MetricName": "Heartbeat","Namespace": "system/linux","Statistic": "SampleCount","Period": "60","EvaluationPeriods": "1","Threshold": "1","AlarmActions": [ { "Ref": "WebServerRestartPolicy" } ],"ComparisonOperator": "LessThanThreshold"}
},
"WikiDatabase": {"Type": "AWS::EC2::Instance","Metadata" : {..."/tmp/cfn-hup-crontab.txt" : {
"content" : { "Fn::Join" : ["", [
"MAIL=\"\"\n",
"\n",
"* * * * * /opt/aws/bin/cfn-hup -f\n",
"* * * * * /opt/aws/bin/cfn-push-stats ",
" --watch ", { "Ref" : "HeartbeatFailureAlarm" },
" --heartbeat\n"
]]},
"mode"    : "000600",
"owner"   : "root",
"group"   : "root"
},

我们先来看/tmp/cfn-hup-crontab.txt,其实就是一个crontab的配置文件,在boot instance WikiDatabase 的时候,因为配置了UserData,所以UserData脚本执行的时候会调用cfn-init命令,cfn-init的作用就是根据AWS::CloudFormation::Init段的配置,生成文件,安装软件,执行脚本等等,在UserData脚本的最后cfn-hup的crontab被启用。

cfn-push-stats会每分钟向heat-api-cloudwatch发送一个watch为HeartbeatFailureAlarm类型的心跳请求。HeartbeatFailureAlarm其实是一个Ceilometer的Alarm。

根据HeartbeatFailureAlarm的配置,如果60秒没有收到instance WikiDatabase的心跳请求,就会触发AlarmActionsOS::Heat::HARestarter,根据Heat对于资源OS::Heat::HARestarter的定义,Heat会删除原先的虚拟机WikiDatabase,然后重新创建一个虚拟机。

对于服务的监控大家可以参考另一个Heat模板WordPress_Single_Instance_With_HA.template

后续思考

对于普通的Web无状态应用,通过OS::Heat::HARestarter删除原有虚拟机,然后重新创建也许适合的,但是如果是数据库之类的有状态应用呢?怎么保证原有数据库中数据的不丢失,后端卷虚拟机?那又怎么保证使用原来的fixed-ip?Heat的HA的基本的思路已经很通畅了,但是在使用的过程中,还是可能遇到种种实践中的问题,需要多多尝试和改进。

参考文献

https://wiki.openstack.org/wiki/Heat/HA

https://wiki.openstack.org/wiki/Heat/Using-HA



id="dsq-2" data-disqus-uid="2" allowtransparency="true" frameborder="0" scrolling="no" tabindex="0" title="Disqus" width="100%" src="http://disqus.com/embed/comments/?base=default&version=b60e9ad30d63ba8f0b162798bcd6d55e&f=kiwik&t_u=http%3A%2F%2Fkiwik.github.io%2Fopenstack%2F2014%2F03%2F22%2FHeat-HA%2F&t_d=Heat%20Ha%20-%20kiwik%27s%20blog&t_t=Heat%20Ha%20-%20kiwik%27s%20blog&s_o=default#2" horizontalscrolling="no" verticalscrolling="no" style="width: 770px; border-style: none !important; overflow: hidden !important; height: 604px !important;">

这篇关于OpenStack heat HA的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/815190

相关文章

VMware8实现高可用(HA)集群

陈科肇 =========== 操作系统:中标麒麟高级操作系统V6 x86-64 实现软件:中标麒麟高可用集群软件 ======================== 1.环境的规划与配置 硬件要求 服务器服务器至少需要 2 台,每台服务器至少需要 2 块网卡以做心跳与连接公网使用存储环境 建议使用一台 SAN/NAS/ISCSI 存储作为数据共享存储空间 软

OpenStack离线Train版安装系列—3控制节点-Keystone认证服务组件

本系列文章包含从OpenStack离线源制作到完成OpenStack安装的全部过程。 在本系列教程中使用的OpenStack的安装版本为第20个版本Train(简称T版本),2020年5月13日,OpenStack社区发布了第21个版本Ussuri(简称U版本)。 OpenStack部署系列文章 OpenStack Victoria版 安装部署系列教程 OpenStack Ussuri版

OpenStack离线Train版安装系列—2计算节点-环境准备

本系列文章包含从OpenStack离线源制作到完成OpenStack安装的全部过程。 在本系列教程中使用的OpenStack的安装版本为第20个版本Train(简称T版本),2020年5月13日,OpenStack社区发布了第21个版本Ussuri(简称U版本)。 OpenStack部署系列文章 OpenStack Victoria版 安装部署系列教程 OpenStack Ussuri版

OpenStack离线Train版安装系列—1控制节点-环境准备

本系列文章包含从OpenStack离线源制作到完成OpenStack安装的全部过程。 在本系列教程中使用的OpenStack的安装版本为第20个版本Train(简称T版本),2020年5月13日,OpenStack社区发布了第21个版本Ussuri(简称U版本)。 OpenStack部署系列文章 OpenStack Victoria版 安装部署系列教程 OpenStack Ussuri版

OpenStack离线Train版安装系列—0制作yum源

本系列文章包含从OpenStack离线源制作到完成OpenStack安装的全部过程。 在本系列教程中使用的OpenStack的安装版本为第20个版本Train(简称T版本),2020年5月13日,OpenStack社区发布了第21个版本Ussuri(简称U版本)。 OpenStack部署系列文章 OpenStack Victoria版 安装部署系列教程 OpenStack Ussuri版

OpenStack镜像制作系列5—Linux镜像

本系列文章主要对如何制作OpenStack镜像的过程进行描述记录 CSDN:OpenStack镜像制作教程指导(全) OpenStack镜像制作系列1—环境准备 OpenStack镜像制作系列2—Windows7镜像 OpenStack镜像制作系列3—Windows10镜像 OpenStack镜像制作系列4—Windows Server2019镜像 OpenStack镜像制作

OpenStack镜像制作系列4—Windows Server2019镜像

本系列文章主要对如何制作OpenStack镜像的过程进行描述记录  CSDN:OpenStack镜像制作教程指导(全) OpenStack镜像制作系列1—环境准备 OpenStack镜像制作系列2—Windows7镜像 OpenStack镜像制作系列3—Windows10镜像 OpenStack镜像制作系列4—Windows Server2019镜像 OpenStack镜像制作系

OpenStack镜像制作系列2—Windows7镜像

本系列文章主要对如何制作OpenStack镜像的过程进行描述记录 CSDN:OpenStack镜像制作教程指导(全) OpenStack镜像制作系列1—环境准备 OpenStack镜像制作系列2—Windows7镜像 OpenStack镜像制作系列3—Windows10镜像 OpenStack镜像制作系列4—Windows Server2019镜像 OpenStack镜像制作系列

OpenStack镜像制作系列1—环境准备

本系列文章主要对如何制作OpenStack镜像的过程进行描述记录 CSDN:OpenStack镜像制作教程指导(全) OpenStack镜像制作系列1—环境准备 OpenStack镜像制作系列2—Windows7镜像 OpenStack镜像制作系列3—Windows10镜像 OpenStack镜像制作系列4—Windows Server2019镜像 OpenStack镜像制作

OpenStack离线Train版安装系列—10.控制节点-Heat服务组件

本系列文章包含从OpenStack离线源制作到完成OpenStack安装的全部过程。 在本系列教程中使用的OpenStack的安装版本为第20个版本Train(简称T版本),2020年5月13日,OpenStack社区发布了第21个版本Ussuri(简称U版本)。 OpenStack部署系列文章 OpenStack Victoria版 安装部署系列教程 OpenStack Ussuri版