Rabbitmq集群构建
2020-12-25 本文已影响0人
jan29
一、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