美文网首页
Rabbitmq集群构建

Rabbitmq集群构建

作者: jan29 | 来源:发表于2020-12-25 22:54 被阅读0次

一、RabbitMQ简介

RabbitMQ是一个开源的消息代理和队列服务器,用来通过普通协议在不同的应用之间共享数据(跨平台跨语言)。RabbitMQ是使用Erlang语言编写,并且基于AMQP协议实现。

1、RabbitMQ的优势:

  • 可靠性(Reliablity):使用了一些机制来保证可靠性,比如持久化、传输确认、发布确认。
  • 灵活的路由(Flexible Routing):在消息进入队列之前,通过Exchange来路由消息。对于典型的路由功能,Rabbit已经提供了一些内置的Exchange来实现。针对更复杂的路由功能,可以将多个Exchange绑定在一起,也通过插件机制实现自己的Exchange。
  • 消息集群(Clustering):多个RabbitMQ服务器可以组成一个集群,形成一个逻辑Broker。
  • 高可用(Highly Avaliable Queues):队列可以在集群中的机器上进行镜像,使得在部分节点出问题的情况下队列仍然可用。
  • 多种协议(Multi-protocol):支持多种消息队列协议,如STOMP、MQTT等。
  • 多种语言客户端(Many Clients):几乎支持所有常用语言,比如Java、.NET、Ruby等。
  • 管理界面(Management UI):提供了易用的用户界面,使得用户可以监控和管理消息Broker的许多方面。
  • 跟踪机制(Tracing):如果消息异常,RabbitMQ提供了消息的跟踪机制,使用者可以找出发生了什么。
  • 插件机制(Plugin System):提供了许多插件,来从多方面进行扩展,也可以编辑自己的插件。

2、RabbitMQ的集群架构

rabbitmq集群架构.png
  • 生产者是投递消息的一方,首先连接到Server,建立一个连接,开启一个信道;然后生产者声明交换器和队列,设置相关属性,并通过路由键将交换器和队列进行绑定。同理,消费者也需要进行建立连接,开启信道等操作,便于接收消息。
  • 接着生产者就可以发送消息,发送到服务端中的虚拟主机,虚拟主机中的交换器根据路由键选择路由规则,然后发送到不同的消息队列中,这样订阅了消息队列的消费者就可以获取到消息,进行消费。

二、Rabbitmq集群搭建

实验环境
test1 192.168.100.23
test2 192.168.100.24

1、修改/etc/hosts文件

[root@test1 ~]# vi /etc/hosts
192.168.100.23 test1
192.168.100.24 test2
[root@test2 ~]# vi /etc/hosts
192.168.100.23 test1
192.168.100.24 test2

2、安装rabbitmq

[root@test1 ~]# yum -y install rabbitmq-server
[root@test2 ~]# yum -y install rabbitmq-server

3、启动rabbiqmq

[root@test1 ~]# systemctl start rabbitmq-server && systemctl enable rabbitmq-server
[root@test2 ~]# systemctl start rabbitmq-server && systemctl enable rabbitmq-server

4、同步cookie文件

[root@test1 ~]# scp /var/lib/rabbitmq/.erlang.cookie
test2:/var/lib/rabbitmq/.erlang.cookie
systemctl restart rabbitmq-server

5、加入集群

[root@test2 ~]# rabbitmqctl stop_app
Stopping node rabbit@test2 ...
...done.
[root@test2 ~]# rabbitmqctl join_cluster rabbit@test1
Clustering node rabbit@test2 with rabbit@test1 ...
...done.
[root@test2 ~]# rabbitmqctl start_app
Starting node rabbit@test2 ...
...done.

6、设置集群策略

[root@test1 ~]# rabbitmqctl set_policy ha-all '^(?!amq\.).*' '{"ha-mode":"all"}'

参数意思为:

  • ha-all:为策略名称。
  • ^:为匹配符,只有一个 ^ 代表匹配所有,^zlh为匹配名称为zlh的exchanges或者queue。
  • ha-mode:为匹配类型,他分为3种模式:
    all-所有(所有的queue)
    exctly-部分(需配置ha-params参数,此参数为int类型比如3,众多集群中的随机3台机器)
    nodes-指定(需配置ha-params参数,此参数为数组类型比如["3rabbit@F","rabbit@G"]这样指定为F与G这2台机器。)。

所有集群策略看下图

398358-20170311180957826-368967163.png

7、验证结果

[root@test1 ~]# rabbitmqctl cluster_status
Cluster status of node rabbit@test1 ...
[{nodes,[{disc,[rabbit@test1,rabbit@test2]}]},
 {running_nodes,[rabbit@test2,rabbit@test1]},
 {cluster_name,<<"rabbit@test1">>},
 {partitions,[]}]
...done

8、开启web界面

[root@test1 ~]# rabbitmqctl add_user admin 000000
Creating user "admin" ...
...done.
[root@test1 ~]# rabbitmqctl set_user_tags admin administrator
Setting tags for user "admin" to [administrator] ...
...done.
[root@test1 ~]# rabbitmq-plugins enable rabbitmq_management
[root@test1 ~]# netstat -ntulp | grep 5672
tcp        0      0 0.0.0.0:25672           0.0.0.0:*               LISTEN      1444/beam.smp       
tcp        0      0 0.0.0.0:15672           0.0.0.0:*               LISTEN      1444/beam.smp       
tcp6       0      0 :::5672                 :::*                    LISTEN  

9、验证

image.png

相关文章

网友评论

      本文标题:Rabbitmq集群构建

      本文链接:https://www.haomeiwen.com/subject/kliinktx.html