天天看点

OpenStack搭建高可用RabbitMQ集群

OpenStack有非常良好的结构设计,各模块之间相互独立,通过API和消息队列来传递信息,这种结构能够很方便的实现规模和功能的扩展,这是云计算平台功能设计的基本出发点。

消息队列是OpenStack体系结构重要的组成部分,承载了各模块之间通信的重要功能,OpenStack默认选用的消息队列是基于erlang的RabbitMQ,RabbitMQ实现了AMQP协议,提供消息的持久化存储,支持镜像队列(Mirrored Queue)等特性。本文介绍如何利用RabbitMQ镜像队列模式以及HAProxy搭建高可用消息队列集群。

对于典型的私有云部署规模:50台物理服务器,500台虚机。消息队列的主要负载来自于OpenStack各模块之间传递的信息,负载不算很大,因此单节点的RabbitMQ即可以搞定。而G版本发布之后,OpenStack引入了Ceilometer模块来负责提供云平台的监控功能,此模块使用消息队列进行监控数据的传递,下图展示了消息队列Ceilometer中的位置。

在Ceilometer模块中,Compute Agent负责采集虚拟机实例的监控信息(Sample),经过转换(Transform)之后发布(Publish)到消息队列,Central Agent负责将服务相关的信息包装、转换并发布到消息队列,扮演了生产者的角色。而在消息队列的另一侧,作为消费者的Collector负责将相关监控信息以及各服务的通知信息(Notification)收集起来并持久化存储在数据库中。

由于业务需要,我们对Ceilometer模块做了功能扩展,将物理服务器运行的监控信息以及底层共享存储(GlusterFS)产生的监控信息也一并通过Compute Agent发布到消息总线上。为了达到细粒度的监控效果,我们将ceilometer监控的轮询间隔时间设置为10秒。假设在刚刚列举的典型私有云部署环境中,约有50台左右的物理服务器,日常活跃虚拟机约为500台,共享一个10个节点的GlusterFS集群。

每次监控任务轮询,总共大约会产生10000条左右的监控数据,这些监控数据形式各不相同,但基本都封装了监控项名称、监控值、时间等要素以及实例id、ip地址等元信息,如果一个集群每10秒都有这么多的数据产生并发布到消息队列,可想而知会对消息队列产生巨大的压力。同时,由于前端horizon等模块接收的用户操作也需要在消息队列上流转,这样的话一旦监控系统产生的数据阻塞了消息队列,则会对整个云平台造成毁灭性的打击。

由于云平台处在运行阶段,直接调整RabbitMQ的配置并不是一个很好的选择。于是我们折衷了一下,原有的RabbitMQ依旧运行,转而为Ceilometer另外搭建一套高可用的RabbitMQ集群,使用HAProxy做负载均衡。

RabbitMQ节点

IP地址

工作模式

操作系统

rabbitmq-1

192.168.64.87

RAM

Ubuntu-12.04-x86_64

rabbitmq-2

192.168.64.88

rabbitmq-3

192.168.64.89

DISK

集群共三台机器,其中两台为RAM模式运行,最后一台为DISK模式。

为了简化安装过程,我们并没有采取编译安装的方式,而是直接使用apt-get进行安装,为了安装最新的RabbitMQ-3.3.0版本,需要修改apt-get的源。首先在每一台机器都执行以下步骤:

经过这个过程,就会将erlang以及RabbitMQ完整安装到所有机器中了。

安装完毕之后, <code>需要在每台执行</code> :

执行完以上的步骤集群中各个节点基本配置完毕了,现在要做的是添加用户和设置权限, <code>请在主节点上执行</code> :

为了使用HAProxy做负载均衡,必须将整个RabbitMQ集群的状态设置为镜像模式,具体方式是通过以下命令,注意策略的设置也是在3.x版本中添加的功能,2.x版本是没有的。

至此,RabbitMQ的安装配置部分结束,可以访问http://192.168.64.87:15672,用户名web_admin,密码xxxx进行访问。接下来是设置HAProxy。

将RabbitMQ集群设置为镜像模式之后,需要用负载均衡服务将访问压力分散于集群中的每个节点,在此我们选择了HAProxy,它的特点在于配置简单,并且功能十分强大,配置过程归纳起来也就是安装、设置配置文件、启动服务这三步这么简单。选择一个节点运行负载均衡服务即可,也可以单独拿一台机器运行,根据实际情况进行调整。本例中我们使用rabbitmq-1运行负载均衡服务。

设置/etc/haproxy/haproxy.cfg,下面我给出一个设置模板:

至此,HAProxy设置完毕,可以通过http://192.168.64.87:8888/haproxy_stats, admin:admin访问haproxy的web管理端。还有需要注意的是在ceilometer的配置文件/etc/ceilometer/ceilometer.conf中需要指明负载均衡服务器的地址,如果端口号不是5672请指明。

本文转自    OpenStack2015 博客,原文链接: http://blog.51cto.com/andyliu/1900996       如需转载请自行联系原作者

<a href="http://blog.51cto.com/search/result?q=linux+openstack+dock" target="_blank">linux openstack dock</a>

继续阅读