在CentOS7上部署Rabbitmq集群配置-八零岁月
记录所见
分享所感

在CentOS7上部署Rabbitmq集群配置

概述

RabbitMQ是目前流行的开源消息队列系统。MQ(消息队列)是一种应用程序对应用程序的通信方法。

RabbitMQ的结构图如图所示:

实现步骤

在一个集群里,有二台服务器,其中一台使用磁盘模式,另一台使用内存模式。内存模式的节点无疑速度更快,因此通过客户端连接访问它们。而磁盘模式的节点,由于磁盘IO相对较慢,因此仅作数据备份使用。也可以根据需要,增加节点。

注意:将二台服务器都连接上互联网并安装软件包。另外RabbitMQ集群节点必须在同一个网段里,如果是跨广域网,效果就会变差。

RabbitMQ集群配置信息如表所示表:

主机名IP地址操作系统防火墙和SELinux用途
node110.10.0.185Centos7 关闭内存节点
node210.10.0.186Centos7 关闭磁盘节点

实验步骤

1.配置各个节点的host文件,将以下内容分别加入到二台服务器上。

node1:
[root@localhost ~]# vim /etc/hostname
node1.localdomain

[root@localhost ~]# vim /etc/hosts
10.10.0.185 node1           #注意-主机名称也要更改
10.10.0.186 node2

node2:
[root@localhost ~]# vim /etc/hostname    
node2.localdomain

[root@localhost ~]# vim /etc/hosts
10.10.0.185 node1           #注意-主机名称也要更改
10.10.0.186 node2    

2.关闭服务器的防火墙并且重启虚拟机便于系统识别

[root@localhost ~]# systemctl stop firewalld.service 
[root@localhost ~]# setenforce 0
[root@localhost ~]# init 6       #重启

3.准备好YUM源之后,就可以直接使用yum命令安装rabbitmq到二台服务器上。

[root@node1 ~]# yum install epel-release -y
[root@node1 ~]# yum install rabbitmq-server -y
[root@node1 ~]# ln -s /usr/lib/rabbitmq/bin/* /usr/bin/ #做软连接

4.分别查看二个节点并添加管理服务

[root@node1 ~]# cd /usr/lib/rabbitmq/bin/
[root@node1 bin]# ls
rabbitmqctl       rabbitmq-env     rabbitmq-server
rabbitmq-defaults rabbitmq-plugins
[root@node1 bin]# rabbitmq-plugins list   #查看插件安装情况
[ ] amqp_client                       3.3.5
[ ] cowboy                           0.5.0-rmq3.3.5-git4b93c2d
[ ] eldap                             3.3.5-gite309de4
[ ] mochiweb                         2.7.0-rmq3.3.5-git680dba8
[ ] rabbitmq_amqp1_0                 3.3.5
[ ] rabbitmq_auth_backend_ldap       3.3.5
.......//省略

[root@node1 bin]# rabbitmq-plugins enable rabbitmq_management   #启用管理服务
The following plugins have been enabled:
mochiweb        
webmachine
rabbitmq_web_dispatch   #网络调度
amqp_client
rabbitmq_management_agent
rabbitmq_management
Plugin configuration has changed. Restart RabbitMQ for changes to take effect. #插件配置发生了变化。重新启动RabbitMQ以使更改生效。

5.启动rabbitmq服务,使用netstat -an | grep 5672进行查看,有如下三个端口开放说明正常。

[root@node1 bin]# systemctl start rabbitmq-server.service 
[root@node1 bin]# netstat -an | grep 5672
tcp       0     0 0.0.0.0:15672           0.0.0.0:*               LISTEN    
tcp       0     0 0.0.0.0:25672           0.0.0.0:*               LISTEN    
tcp6       0     0 :::5672        

参数注解:
15672和25672是rabbitmq的管理端口
5672是生产者、消费者通信的端口

6.检查二台集群状态

[root@node1 bin]# rabbitmqctl cluster_status
Cluster status of node rabbit@node1 ...     #目前相互独立,没有形成集群
[{nodes,[{disc,[rabbit@node1]}]},
{running_nodes,[rabbit@node1]},
{cluster_name,<<"rabbit@node1">>},
{partitions,[]}]
...done.

7.停止二台服务器的rabbitmq服务

[root@node1 bin]# systemctl stop rabbitmq-server.service 

8.在二台服务器上构建Erlang的集群环境

[root@node1 bin]# vim /var/lib/rabbitmq/.erlang.cookie 
GYIIPFNYPZITHCELVPZU     #cookie内容    
注意:
在Erlang的集群中,各节点是通过一个magic cookie来实现的,这个coolie存放在/var/lib/rabbitmq/.erlang.cookie中,文件是400的权限。所以必须保证各节cookie保持一致,否则节点间就无法通信!

9.开启rabbitmq服务

[root@node1 bin]# systemctl start rabbitmq-server.service 

10.将node1作为内存节点与node2磁盘节点连接起来。

node1:
[root@node1 bin]# rabbitmqctl stop_app   #停止rabbitmq
[root@node1 bin]# rabbitmqctl join_cluster --ram rabbit@node2 #将node1连接到node2,成为一个集群
Clustering node rabbit@node1 with rabbit@node2 ...
...done.
[root@node1 bin]# rabbitmqctl start_app   #开启rabbitmq
[root@node1 bin]# rabbitmqctl cluster_status   #验证群集状态
Cluster status of node rabbit@node1 ...
[{nodes,[{disc,[rabbit@node2]},{ram,[rabbit@node1]}]},      
{running_nodes,[rabbit@node1,rabbit@node2]},
{cluster_name,<<"rabbit@node1">>},
{partitions,[]}]
...done.

11.打开浏览器访问http://10.10.0.185:15672/#/默认用户名:guest 密码:guest

策略创建、查看、添加队列

1).点击右边的policies按钮,创建策略。

参数注释:
Name:策略名称
pattern:匹配的规则
Definition:使用ha-mode模式中的all,也就是同步所以匹配的队列。‘?’类型与帮助文档
Priority:优先级,默认为0,值越大优先级越大。

2)在任意一台节点上添加一个Queues队列,点击Queues按钮,输入name、Arguments的值,别的值按其默认就好,如图所示:

参数注解:
Name:队列的名称
Durability:队列是否持久化(Durable持久化)
Node:消息队列的节点
Auto delete:自动删除
Arguments:使用的策略类型

3)再创建一个队列,分别在两个队列里创建一条消息。点击aa、ht队列按钮,选择Publish Message创建消息。

参数注解:
2-Persistent:持久化,反之上面显示非持久化
Headers:随意填写即可
Properties:点击问号,选择一个消息ID

4)进行破坏性测试看看群集效果是否成功。

将node2节点关闭,再通过node1查看消息记录是否还存在。

[root@mq02 ~]# systemctl stop rabbitmq-server.service 

如图所示:

aa队列已经从之前的+1消失了,而且消息还是存在的。

将node2节点的服务启动,看到aa队列后面的+1变成粉色,鼠标指上去显示镜像无法同步。如果这个时候将node1节点的服务停止,那么队列里的消息将会丢失。

在node2节点服务器上执行rabbitmqctl sync_queue aa,同步完成后+1变成蓝色。如图所示:

[root@node2 ~]# rabbitmqctl sync_queue aa

5)查看队列在服务器上的位置,如图所示,一个目录对应的就是一个队列,里面就是该队列本身的消息。注意如果内存节点故障,队列就会丢失;如果是磁盘节点故障,队列还会存在。但如果是创建队列时指定了ha参数,带修复磁盘节点故障后,再启动磁盘节点的rabbitmq服务,未消费的队列及消息会不存在,需要手动执行同步队列命令。

rabbitmq集群的破坏性测试成功,说明集群配置成功。

注意:
消息节点一般都是程序直接调用,去创建队列、消息等等。程序里面如果想使用消息高可用集群配置,那么代码需要指定ha参数,如果不指定x-ha-prolicy的话将无法复制。

文章转载请说明出处:八零岁月 » 在CentOS7上部署Rabbitmq集群配置

分享到:更多 ()

吐槽集中营 抢沙发

评论前必须登录!