Openstack云平台脚本部署之RabbitMQ高可用集群部署(三)

发布于:2022-11-05 ⋅ 阅读:(427) ⋅ 点赞:(0)

目录

一、消息中间件简介

二、Rabbitmq集群部署

三、参考文档

四、系列文章


一、消息中间件简介

消息中间件大量应用于分布式系统的数据通信,通过提供消息传递和消息排队模型,能够实现系统松耦合、异步和并行处理,从而提高了系统的可扩展性、易维护性和吞吐性。

在消息中间件中,常见的角色大致包括Producer(生产者)、Consumer(消费者)、Broker(中转角色),典型的应用模型如下图所示:

消息中间件的产品有很多,常见的有RabbitMQ、Kafka和RocketMQ。

  • 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

三、参考文档

queues.io

Home | AMQP

RabbitMQ · GitHub

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云平台脚本部署”系列文章目录如下:

Openstack云平台脚本部署之概述(零)

Openstack云平台脚本部署之基础环境配置(一)

Openstack云平台脚本部署之Galera高可用集群配置(二)

Openstack云平台脚本部署之RabbitMQ高可用集群部署(三)

Openstack云平台脚本部署之MongoDB配置(四)

Openstack云平台脚本部署之Memcached配置(五)

Openstack云平台脚本部署之Keystone认证服务配置(六)

Openstack云平台脚本部署之Glance镜像服务配置(七)

Openstack云平台脚本部署之Nova计算服务配置(八)

Openstack云平台脚本部署之Neutron网络服务配置(九)

Openstack云平台脚本部署之Dashboard配置(十)

Openstack云平台脚本部署之Cinder块存储服务配置(十一)

Openstack云平台脚本部署之Ceilometer数据收集服务配置(十二)

Openstack云平台脚本部署之Aodh告警服务配置(十三)

Openstack云平台脚本部署之Ceph存储集群配置(十四)

Openstack云平台脚本部署之计算节点服务配置(十五)

Openstack云平台脚本部署之增加计算节点配置(十六)

Openstack云平台脚本部署之测试验证(十七)

Openstack云平台脚本部署之Ganglia监控(十八)

Openstack云平台脚本部署之Nagios监控(十九)


网站公告

今日签到

点亮在社区的每一天
去签到