在OpenStack中运行RabbitMQ的最佳实践

Posted 开源云中文社区

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在OpenStack中运行RabbitMQ的最佳实践相关的知识,希望对你有一定的参考价值。

OpenStack依赖于消息队列,所以关键是有最好的设置。大多数部署包括RabbitMQ,所以让我们花几分钟时间查看一些最佳实践,使其尽可能高效地运行。


在专用节点上部署RabbitMQ


使用专用节点,RabbitMQ与其他CPU占用高的进程隔离,因此可以承受更多的压力。


HiPE运行RabbitMQ


HiPE代表High Performance Erlang。当HiPE被启用时,Erlang应用程序在被执行之前被预编译为机器码。我们的基准显示,这使RabbitMQ的性能提升高达30%(如果你有这样的事情要处理,你可以在https://github.com/binarin/rabbit-simple-benchmark/blob/master/README.md找到基准的细节,https://github.com/binarin/rabbit-simple-benchmark/blob/master/report.md看到结果)


这样做的缺点是,Erlang应用程序编译的时候,应用程序启动时间大大增加。使用HiPE,第一个RabbitMQ启动大约需要2分钟。


我们发现的另一个微妙的缺点是,如果启用HiPE,调试RabbitMQ可能很难,因为HiPE可以破坏错误回溯,使它们不可读。


不要对RPC队列使用队列镜像


我们的研究表明,在3节点集群上启用队列镜像会使消息吞吐量下降两倍。可以在Mirantis Scale团队生成的公开数据中看到此效果http://docs.openstack.org/developer/performance-docs/test_results/mq_ha/index.html


另一方面,RPC消息变得很快就过时1分钟),如果消息丢失,它只导致当前正在进行的操作失败,因此整体来看没有镜像的RPC队列似乎是一个很好的权衡。


Mirantis,通常只对Ceilometer队列启用队列镜像,其中必须保留消息。可以在https://github.com/openstack/fuel-library/blob/master/files/fuel-ha-utils/policy/set_rabbitmq_policy#L28看到我们如何定义这样的RabbitMQ策略。


Ceilometer使用单独的RabbitMQ集群


一般来说,Ceilometer不通过RabbitMQ发送很多消息。但如果Ceilometer卡住,它的队列溢出。这导致RabbitMQ崩溃,反过来导致其他OpenStack服务的中断。


使用单独的RabbitMQ集群进行通知的能力从OpenStack Mitaka(MOS 9.0)开始提供,并且在开箱即用的MOS中不支持。该功能尚未记录,但可以在https://review.openstack.org/#/c/249508找到实现。


降低Ceilometer指标数量


OpenStack下运行RabbitMQ的另一个最佳实践是减少发送的指标数量和/或其频率。显然,这不仅减少RabbitMQ,Ceilometer和MongoDB的压力,减少了如果Ceilometer / MongoDB无法应付太多的消息时,消息在RabbitMQ堆积的机会反过来,在队列中堆积的消息降低了整体RabbitMQ性能。


你也可以通过使用RabbitMQ的延迟队列功能(从RabbitMQ 3.6.0开始可用)来缓解堆积消息的影响,但是在写这篇文章时,MOS不使用延迟队列。


(仔细)考虑禁用Ceilometer队列的队列镜像


Mirantis OpenStack架构中,队列镜像是唯一使用的“持久性”度量。我们不使用持久队列,因此如果丢失Ceilometer通知会带来伤害,请不要禁用队列镜像。例如,如果通知数据用于结算,就不能丢失这些通知。



编译:Jonathan Zhang

来源:https://www.mirantis.com/blog/best-practices-rabbitmq-openstack/

投稿邮箱:openstackcn@sina.cn



以上是关于在OpenStack中运行RabbitMQ的最佳实践的主要内容,如果未能解决你的问题,请参考以下文章

openstack第六章-配置MQ

深度分析RabbitMQ在OpenStack中的实现

如何在 OpenStack 中捕获对应于 RPC.call Request 消息的回复 rabbitmq 消息?

RabbitMQ集群搭建

openstack详解——openstack rabbitmq安装与启动

深度解析RabbitMQ集群——超大规模高可用OpenStack平台核心技术深入解析系列高级篇