一、消息中间件简介
- Kafka是LinkedIn开源的分布式发布-订阅消息系统,目前归属于Apache顶级项目。Kafka主要特点是基于Pull的模式来处理消息消费,追求高吞吐量,一开始的目的就是用于日志收集和传输。0.8版本开始支持复制,不支持事务,对消息的重复、丢失、错误没有严格要求,适合产生大量数据的互联网服务的数据收集业务。
- RabbitMQ是使用Erlang语言开发的开源消息队列系统,基于AMQP协议来实现。AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。AMQP协议更多用在企业系统内,对数据一致性、稳定性和可靠性要求很高的场景,对性能和吞吐量的要求还在其次。
- RocketMQ是阿里开源的消息中间件,它是纯Java开发,具有高吞吐量、高可用性、适合大规模分布式系统应用的特点。RocketMQ思路起源于Kafka,但并不是Kafka的一个Copy,它对消息的可靠传输及事务性做了优化,目前在阿里集团被广泛应用于交易、充值、流计算、消息推送、日志流式处理、binglog分发等场景。
阿里中间件团队对三者做过一个测试,性能对比结果如下:
二、Rabbitmq集群部署
Openstack中高可用消息队列服务借助Rabbitmq消息队列集群实现,分别在三个控制节点安装Rabbitmq,并构建cluster,然后设置HA模式,部署脚本install-configure-rabbitmq.sh如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
#!/bin/sh . ../0-set-config.sh ./style/print-split.sh "RabbitMQ Installation" ./pssh-exe C "yum install -y rabbitmq-server && systemctl start rabbitmq-server.service" ./pssh-exe C "rabbitmqctl add_user openstack $passsword_rabbitmq" ./pssh-exe C "rabbitmqctl set_permissions openstack \".*\" \".*\" \".*\"" ./pssh-exe C "systemctl stop rabbitmq-server.service" ### [controlloer01] 拷贝cookie文件到其他节点 systemctl start rabbitmq-server; systemctl stop rabbitmq-server; ./scp-exe C "/var/lib/rabbitmq/.erlang.cookie" "/var/lib/rabbitmq/.erlang.cookie" ### [所有控制节点] 修改cookie文件的权限 ./pssh-exe C "chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie" ./pssh-exe C "chmod 400 /var/lib/rabbitmq/.erlang.cookie" ### [所有控制节点] 配置rabbitmq-server服务 ./pssh-exe C "systemctl enable rabbitmq-server.service && systemctl start rabbitmq-server.service" ./pssh-exe C "rabbitmqctl cluster_status" ### [controller01以外的节点] 加入集群 for ((i=0; i<${#controller_map[@]}; i+=1)); do name=${controller_name[$i]}; ip=${controller_map[$name]}; if [ $name = "controller01" ];then echo "controller01" else ssh root@$ip rabbitmqctl stop_app; ssh root@$ip rabbitmqctl join_cluster --ram rabbit@controller01; ssh root@$ip rabbitmqctl start_app; fi done; ### [controlloer01] 设置ha-mode rabbitmqctl cluster_status; rabbitmqctl set_policy ha-all '^(?!amq\.).*' '{"ha-mode": "all"}'; |
配置openstack其他组件时,直接使用Rabbitmq节点及端口,并配置重试等选项,设置HA模式,如下:
1 2 3 4 5 6 7 8 9 |
[oslo_messaging_rabbit] rabbit_hosts = controller01:5672,controller02:5672,controller03:5672 rabbit_ha_queues = true rabbit_retry_interval = 1 rabbit_retry_backoff = 2 rabbit_max_retries = 0 rabbit_durable_queues = true rabbit_userid = openstack rabbit_password = 9b15318364bb66e1 |
三、参考文档
https://www.rabbitmq.com/install-rpm.html
https://docs.openstack.org/ha-guide/shared-messaging.html
http://jm.taobao.org/2016/04/01/kafka-vs-rabbitmq-vs-rocketmq-message-send-performance/
四、系列文章
Openstack云平台脚本部署之Galera高可用集群配置(二)
Openstack云平台脚本部署之RabbitMQ高可用集群部署(三)
Openstack云平台脚本部署之Memcached配置(五)
Openstack云平台脚本部署之Keystone认证服务配置(六)
Openstack云平台脚本部署之Glance镜像服务配置(七)
Openstack云平台脚本部署之Nova计算服务配置(八)
Openstack云平台脚本部署之Neutron网络服务配置(九)
Openstack云平台脚本部署之Dashboard配置(十)
Openstack云平台脚本部署之Cinder块存储服务配置(十一)
Openstack云平台脚本部署之Ceilometer数据收集服务配置(十二)
Openstack云平台脚本部署之Aodh告警服务配置(十三)
code
more code
~~~~