RabbitMQ是什么?

MQ(Mesee Qucue消息队列)是种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,
而无需专用链接来连接它们。消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用
通常是用于诸如远程过程调用的技术。排队指的是应用程序通过队列来通信。队列的使用除去了接收和发送应用程序同时执行的要求。

RabbitMQ是目前流行的开源消息队列系统,用Erlang语言开发。RabbitMQ是AMQP(高级消息队列协议)的标准实现。

实验环境

IP地址 主机名 用途
192.168.10.157 mq1 磁盘节点
192.168.10.178 mq2 内存节点
192.168.10.163 mq3 内存节点

RabbitMQ集群配置

实现步骤

1、配置三个节点的hosts文件,将如下内容分别加入到三台服务器上
vim /etc/hosts

192.168.10.157 mq1
192.168.10.178 mq2
192.168.10.163 mq3        
#修改完需重启:init 6

RabbitMQ集群_第1张图片

2、三个节点配置yum软件源,安装rabbitmq软件
yum install epel-release -y      //安装源
yum install -y rabbitmq-server     //安装服务
3、分别查看三个节点并添加管理任务,最后启动rabbitmq服务
/usr/lib/rabbitmq/bin/rabbitmq-plugins list         //查看有哪些服务,插件安装情况

RabbitMQ集群_第2张图片

/usr/lib/rabbitmq/bin/rabbitmq-plugins enable rabbitmq_management       //启动管理服务

RabbitMQ集群_第3张图片

systemctl start rabbitmq-server.service        //开启rabbitmq服务
netstat -ntap | grep 5672        //查看端口,其中15672和55672都是rabbitmq的管理端口,5672则是和生产者、消费者通信的端口

ln -s /usr/lib/rabbitmq/bin/* /usr/bin/          //方便管理,建立软链接

RabbitMQ集群

4、查看rabbitmq状态,测试能否连接
rabbitmqctl cluster-status      //测试能否连接上

RabbitMQ集群_第4张图片

5、修改.erlang.cookie文件

Rabbitmq的集群是依赖于Erlang的集群来工作的,所以必须先构建起Erlang的集群环境。在Erlang的集群中,各节点是通过一个magic cookie来实现的,这个cookie存放在/var/lib/rabbitmq/.erlang.cookie中,文件是400的权限。所以必须保证各节点cookie保持一致,否则节点之间就无法通信

cd /var/lib/rabbitmq/ 
vim .erlang.cookie       
#.erlang.cookie是隐藏文件,使用ls -a查看,复制mq1的cookie,修改mq2,mq3与之相同
6、重启rabbitmq服务,关闭防火墙
systemctl restart rabbitmq-server.service     //重启   
systemctl stop firewalld.service 
setenforce 0           //关闭防火墙和安全功能
7、将mq2、mq3作为内存节点与mq1磁盘节点连接起来,在mq2、mq3上执行如下命令
rabbitmqctl stop_app       //停止rabbitmq应用
rabbitmqctl join_cluster --ram rabbit@mq1      //调用cluster命令,将mq2连接到mq1,-ram以内存节点形式添加
rabbitmqctl start_app           //开启rabbitmq应用

RabbitMQ集群_第5张图片

8、在mq1上查看状态
#mq1查看已连接
rabbitmqctl cluster_status

Cluster status of node rabbit@mq1 ...
[{nodes,[{disc,[rabbit@mq1]},{ram,[rabbit@mq3,rabbit@mq2]}]},
 {running_nodes,[rabbit@mq3,rabbit@mq2,rabbit@mq1]},
 {cluster_name,<<"rabbit@mq1">>},
 {partitions,[]}]
...done.

RabbitMQ集群_第6张图片

以上便完成了配置RabbitMQ默认集群模式