OpenStack虚拟机高可用

公有云依赖于应用程序自身的高可用,在一定程度上容忍物理机的宕机,私有云依赖于服务器的高可用

由于OpenStack的初衷是面向公有云,因此OpenStack在“基因”里便缺乏虚机高可用设计,这也是到目前为止OpenStack的计算服务Nova一直没有完善的虚机高可用功能的原因。在公有云环境中,用户业务系统的高可用性应该更多地依赖于分布在集群中的应用程序本身,即公有云上运行的应用程序有自己的集群和负载均衡系统,能在一定程度上容忍物理计算节点宕机所带来的虚机不可用,并能通过负载均衡系统实现故障计算节点上的负载自动转移。随着越来越多传统IT架构下的用户转入云计算,OpenStack的私有云用户不断增加,由于传统集中式应用系统的非中断运行几乎完全依赖于服务器的高可用性,因此在私有云环境下,OpenStack Nova服务的虚拟机高可用性变得极为迫切(如果虚机是主备的,倒没有那么迫切,如果是负荷分担或者应用本身没有高可用再或者实现虚拟机层面的高可用会减少宕机时间),也是众多OpenStack私有云用户所急需的功能。

为了兼顾和确保传统应用系统向云计算平滑过渡,虽然OpenStack社区并没有提供完整的虚机高可用解决方案,但也提供了部分配合外部监控服务的工作机制让用户可以自己实现虚机高可用。此外,在Liberty版本中,OpenStack实现并改进了相关的NovaAPI接口,以便更好地配合外部高可用系统对Nova服务状态改变的监控和对虚机故障转移。例如红帽的RDO便实现了基于Pacemaker-remote的虚机高可用,同时社区也有基于Zookeeper对nova-compute服务进行监控以实现虚机高可用。

虚机高可用概述

在OpenStack中,所谓虚机高可用,指在物理计算节点发生硬件故障时(如磁盘损坏、CPU或内存故障导致宕机、物理网络故障和电源故障),自动将该节点关闭,该节点上的虚机在集群中其它健康的计算节点上重启,如果能实现虚机的动态迁移,便是最佳的高可用方案。在实现OpenStack虚机高可用方案中,虽然所使用的软件不同,但通常都是基于三个步骤来实现:监控(Monitoring)、隔离(Fencing)和恢复(Recovery)

1) 监控的目的在于判断Hypervisor是否故障,并为隔离操作提供执行依据监控功能由两部分构成,一是检测主机故障情况,二是触发主机故障后的自动响应任务(隔离和恢复)。关于监控功能是否应该集成到Nova中,社区一直存在争论:认为计算节点服务的监控应该集成到Nova项目中,主要是基于Nova服务一定程度上已获取其自身运行所依赖基础架构的健康状况,或者说Nova本身已经可以跟踪活动的计算节点。但Nova对计算节点的跟踪监控只能探测Nova-compute服务的故障与否,而Nova-compute服务的故障并不意味着虚拟机也出现故障,即计算节点Nova-compute服务正常与否和该节点上虚机故障与否并无必然联系。社区也有将监控功能集成到Heat项目的建议,但是此方案需要OpenStack终端用户在虚机故障时使用Heat模板来重启虚机(但这应该是云管理员的任务,而不是要求用户来执行)。当前的OpenStack高可用环境中,Pacemaker结合Corosync是使用最多的服务高可用监控工具,但是由于历史原因,Corosync对计算节点的支持数目有限,不过Redhat提出的Pacemaker_remote解决了这种限制

2) 隔离在高可用集群中是个非常关键的操作,所谓的集群“脑裂”通常是由不完善的隔离操作引起的。在OpenStack集群的Nova服务高可用中,隔离就是将故障计算节点与集群完全隔离,使其成为孤立节点。在实例高可用环境中,计算节点可能因各种原因出现故障情况,在其他健康节点上重启故障计算节点的虚机之前,必须确保此虚机确实已经不存在,否则可能在一个OpenStack集群中同时出现两个相同虚机的情况。更糟糕的是,如果虚机部署在共享存储上,则会出现两个相同虚机同时运行的情况,两个虚机同写一份数据通常会导致数据损坏,而且还会导致同一网络中出现两个相同的IP地址。因此,在高可用软件对故障虚机进行恢复之前,监控程序必须对有故障的计算节点进行隔离,否则必然会对虚机造成各种破坏。Pacemaker提供了对集群节点的隔离功能,如果采用其他集群工具,则需要自己实现隔离功能。

3) 监控到计算节点故障之后,对该节点进行隔离完成之后,便可对用户的虚机进行恢复。在Nova中,实现虚机恢复的功能主要是Nova提供的Evacuate命令。当Evacuate被调用时,故障计算节点上的虚机会被自动撤离,并在新的节点上恢复虚机。为了完成虚机的恢复,虚机应该创建在共享存储上,作为替代方案,也可以将虚机创建在Cinder提供的Volume上(SAN BOOT)。不过,共享存储或者Volume并非Evacuate执行成功的前提,如果未采用上述两种方案创建虚机,Evacuate也会在其他节点上恢复虚机,但这是一种有损恢复(因为Evacuate仅是采用原虚机相同的基础镜像在其他节点上重新创建一个相同的虚机,但是原虚机中相对基础镜像做过变更的数据却不能恢复)。

目前,OpenStack没有一套完成的监控、隔离和恢复方案,因此,用户必须自己实现服务监控和节点隔离,同时触发故障计算节点上的Evacuate操作。如果使用Pacemaker集群资源管理器,则需要在计算节点上实现一个Evacuate的资源代理,从而允许Pacemaker触发节点上的Evacuate操作。

虚拟机高可用之Evacuate/Rebuild

Nova提供了Evacuate API来恢复故障计算节点上的虚机,这是实现计算节点虚机高可用的基础。在监控到计算节点故障并将其隔离之后,便可触发Evacuate操作以对该节点上的虚机进行恢复。本质上来说,Evacuate是对Rebuild功能的扩展,或者说基于虚机HA的需求对Rebuild功能进行了扩展,而Rebuild功能仍然具有其实用性。Rebuild与Evacuate的区别主要在于:Rebuild会刷新虚拟机镜像磁盘,即使用新的镜像重新创建具有相同ID的虚机,因此Rebuild无须共享存储,其功能更像是相同的硬件重新安装另外的操作系统(如windows系统换成Linux系统);而Evacuate是真正的原样复原,包括系统和用户数据。此外,Evacuate和Rebuild仅支持Active和Stopped状态的虚机,而不支持Paused、Suspend和Shut down等状态的虚机。

Evacuate的具体操作过程取决于虚机的配置和底层存储架构如果虚机基于计算节点本地文件系统的“临时(ephemeral)”存储,则Evacuate操作采用与原虚机相同的镜像在其他节点创建,新老虚机具有相同的配置,如相同的实例ID、镜像ID、Attached Volumes 、Flavor、IP等。如果虚机位于共享存储上,则Evacuate将在其他节点上基于相同的虚机文件重启虚机,并保持虚机的配置不变。如果虚机是基于Volume后端的,则Evacuate将重建虚机并从相同的Volume上启动。因此,基于共享存储和Volume后端的虚机可以原样恢复,而基于本地临时存储的虚机不能恢复用户数据(位于临时存储上的数据)

1.Rebuild操作验证

1)Rebuild前查看虚机信息(nova show  vmid)。记录UUID、IP地址、主机名和Volume挂载情况。

2)执行Rebuild操作。这里仍然使用原镜像cirros-image-name对vm-name进行Rebuild操作,用户可以选择任意其他镜像进行Rebuild操作。nova  rebuild  vm_name cirros-image-name

3)Rebuild之后检查虚机信息(nova show  vmid)。注意观察主机名、UUID、IP地址和Volume挂载情况是否改变,正常情况下Rebuild后这些参数应该保持不变。

2.Evacuate操作

1)Evacuate之前在虚机操作系统中保存用户数据,以备Evacuate后验证。

[root@nfs-server ~]#  echo "This data should be recovery after evacuate">  /root/test.txt

2)Evacuate之前检查虚机信息(nova show  vmid)。核实虚机的宿主机并确认Evacuate操作的目标主机,Evacuate要求使用共享存储或者基于Volume的虚机,此处的nfs-server为基于NFS共享存储的虚机。nova  hypervisor-servers compute2

3)计算节点正常运行时执行Evacuate操作。Evacuate操作要求虚机所在宿主机的计算服务不能处于Active状态,否则不允许执行。//compute1节点正常运行,不允许执行Evacuate

[root@controller1~]# nova evacuate nfs_server compute2

ERROR  (BadRequest):  Compute  service  of  compute1  is  still  in  use.  (HTTP  400)

4)计算节点故障时执行Evacuate操作。通过shut down计算节点compute1来模拟节点故障,注意观察Evacuate执行过程中虚机状态的变化。

//shutdown compute1节点

[root@compute1~]# poweroff

//执行evacuate,目标节点为compute2

[root@controller1~]# nova evacuate nfs_server compute2

5)Evacuate之后查看虚机的变化情况(nova show vmid)。虚机所在宿主机应该由compute1漂移到compute2。

6)验证Evacuate之后用户数据是否可用。有两个方法可以验证:Evacuate前更改过虚机root用户密码,现在检查root密码是否仍然可用;Evacuate前在/root/test.txt中保存有用户数据,现在检查数据是否仍然存在。

[root@nfs-server ~]#  more /root/test.txt

This data should be recovery after evacuate

7)启动compute1节点,检查compute1节点上的虚机是否还会自动恢复。正常情况下,执行Evacuate操作的虚机不会在原计算节点上被恢复,在原计算节点恢复过程中会自动清除虚机相关信息。

总结

公有云依赖于应用程序自身的高可用,在一定程度上容忍物理机的宕机,私有云依赖于服务器的高可用。为了兼顾和确保传统应用系统向云计算平滑过渡,提供了部分配合外部监控服务的工作机制让用户可以自己实现虚机高可用。虚机高可用通常是基于三个步骤来实现:监控(Monitoring)、隔离(Fencing)和恢复(Recovery)。Nova对计算节点的跟踪监控通过探测Nova-compute服务的故障与否来进行隔离,Pacemaker提供了对集群节点的隔离功能,需要在计算节点上实现一个Evacuate的资源代理,从而允许Pacemaker触发节点上的Evacuate恢复操作。Pacemaker和Corosync是使用最多的服务高可用监控工具,但Corosync对计算节点的支持数目有限,另外Redhat提出的Pacemaker_remote解决了这种限制,要知如何解决请下回分解。

笔记整理来自山金孝的《OpenStack高可用集群(上册):原理与架构》8.8.1和8.8.2章节,如有侵权请通知删除

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,478评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,825评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,482评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,726评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,633评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,018评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,513评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,168评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,320评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,264评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,288评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,995评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,587评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,667评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,909评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,284评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,862评论 2 339

推荐阅读更多精彩内容