■ 公安部第一研究所 吕始胜
关键字:OpenStack 高可用 集群 部署
高可用性(High Availability,HA)是指系统在某个软硬件模块出现计划内停止运行或非计划内故障(这种故障是随机的,可能是业务流程、物理设施或者IT软/硬件的故障)的情况下,仍能继续提供服务的能力,它是确保企业重要业务系统持续性和非中断性运行的关键。
在传统IT领域,高可用设计主要包含硬件和软件两个层面的设计:在硬件层面,通常使用主备模式、双活模式或集群模式等硬件冗余设计保证应用基础架构和应用数据的高可用;在软件层面,通过监控应用程序栈的健康状况,加速应用程序的切换和恢复进行故障转移,从而保证应用运行状态的高可用。但是传统应用级集群解决方案成本高昂,而且难于实施和管理。
云计算的核心是如何呈现和利用云服务,云架构被设计成资源抽象、多租户、高可扩展的架构,这种架构更趋向于采用一组横向逻辑服务层,它们彼此交织,形成了构成应用程序的组建网。这些横向层并不是硬件设备的集合,而是由云基础设施提供的服务区域,横向层可以是UI层、API层、业务逻辑层等。这种横向服务结构为基于云的应用程序提供了近乎无限的可伸缩性、按需服务、性能和成本效益。然而,它也极大地改变了应用程序中发生的故障类型。基于云的架构中的故障通常涉及一个或多个横向结构,而不是纵向硬件节点的故障。再多的硬件冗余设计也无法避免这种类型的故障,所以云架构需要采用不同的方法来进行容错设计。
OpenStack目前已经成为了开源云计算的事实标准,几乎全部的IT厂商都在积极拥抱OpenStack,使用OpenStack的节点功能组件和服务功能组件可以设计出合理的高可用集群部署方案。
OpenStack高可用集群是由具有特定集的节点组成的集群,这些节点按照功能划分为不同的节点子集群,每一个功能子集群可以是单一服务器节点,也可以是多个服务器节点。从更抽象的层次来描述OpenStack集群,可以将集群划分为组成各个功能集的服务器节点和连接服务器节点以传输不同数据和指令的网络。
控制器节点主要运行API服务、规划调度(Scheduler)服务、数据库服务、对象缓存服务、消息队列服务等,负责管理集群组件之间的全部活动,并响应用户指令进行资源调度,是OpenStack集群的核心大脑。
计算节点是运行各种虚拟化管理软件、真正提供计算能力的节点,负责为虚拟机实例(Instance)运行提供所需要的CPU、内存、网络等资源。
存储节点是用来提供存储服务的节点,OpenStack集群中提供存储服务的主要是块存储组件Cinder、对象存储组件Swift以及同时提供文件系统、块存储、对象存储服务的Ceph集群。
网络节点为租户提供了基于用户自定义的虚拟网络服务,这些服务包括虚拟网桥、虚拟交换机、DHCP服务器、L3虚拟路由等。
负载均衡器(LoadBalancer)是常见的应用程序高可用组件,主要作用是对相关服务的访问请求均衡到两个或多个后端服务节点,从而使节点上相同服务组件彼此组成Active/Active或者Active/Passive高可用服务模式。
HAProxy是一个使用C语言编写的自由及开放源代码软件,其提供高可用性、负载均衡,以及基于TCP和HTTP的应用程序代理,并支持多种负载均衡模式。
Corosync用于高可用环境中提供通讯服务,它位于高可用集群架构中的底层(Message Layer),扮演着为各节点(node)之间提供心跳信息传递这样的一个角色。
Pacemaker是一个集群资源管理器,它利用集群基础构件(OpenAIS 、heartbeat或corosync)提供的消息和成员管理能力来探测并从节点或资源级别的故障中恢复,以实现群集服务(亦称资源)的最大可用性。
Galera是一套在 MySQL InnoDB 存储引擎上实现Multi-master及数据实时同步的系统架构。
目前,Redhat和Mirantis均是OpenStack社区代码贡献最为强劲的两家厂商,同时各自都有自己基于OpenStack的产品线,并且这些产品在OpenStack个人和企业部署市场上占有较大份额。他们所提供的高可用集群设计模式相差并不大,主要是基于以上技术形成的部署方案,具体设计如下:
在OpenStack高可用集群部署时,首先必须实现控制器节点的冗余来保证服务的高可用,同时由于通过Galera实现高可用的MySQL数据库也运行在控制器节点上,因此控制器节点理论上需要至少3台服务器组成集群(使用两个控制器节点也是可行的,但是集群服务可用性会有所降低)。每个控制器节点上均运行HAProxy程序,HAProxy负责向外部客户端提供单一高可用的服务访问IP地址(VIP),并将客户端对该IP地址的访问以负载均衡的形式转发到后端对应的OpenStack API、数据库、消息队列等服务上进行最终的处理。
计算节点是基础设施服务的基础,用户的虚拟机和应用最终都运行在计算节点上,计算节点在运行过程中也是通过访问控制器节点上HAProxy对外提供的VIP实现对控制器节点服务的访问。
存储节点上可以部署使用Cinder、Swift或者Ceph来作为OpenStack集群的存储服务,从集群共享存储和高可用角度考虑,建议部署Ceph服务,但需要保证足够的控制器节点数目以确保运行在控制器节点上的Ceph监控服务程序能够实现Quorum机制,同时需要部署足够的OSD节点以满足Ceph数据的多份复制从而实现Ceph集群数据的冗余高可用。
该方案的多节点部署拓扑如图1所示。
借鉴OpenStack高可用集群成熟设计方案,结合现有硬件设施及网络资源,我们基于Pike版本部署完成了一套OpenStack高可用集群,采用架构如图2所示。
具体安装部署过程参考OpenStack相关文档,不再赘述。
图1 高可用集群多节点部署拓扑
图2 高可用集群架构图
图3 虚拟机实例
部署完成后,在仪表盘(Dashboard)上,就可以进行管理计算、卷、网络资源,并按照规划进行虚拟机、虚拟硬盘、网络设置,如图3所示。
管理卷、备份、快照等存储资源,如图4所示。
网络设置好后,可以使用网络拓扑查看当前虚拟机实例的网络拓扑图,如图5所示。
图4 卷管理
图5 虚拟机网络拓扑
OpenStack的高可用,主要是确保控制器节点和网络节点的高可用。从功能服务的维度上,就是确保基础服务(数据库和消息队列)高可用,计算、存储、网络的接入与调度高可用以及虚拟网络设施的高可用。
根据成熟方案部署完成的OpenStack高可用集群,不但可以满足企业内部开发、测试的需要,也能够为业务迁移到云上提供良好基础。