下面以三台虚拟机为例,搭建RabbitMQ集群

centos搭建rabbitmq集群 rabbitmq配置集群_rabbitmq

首先在第一台上面安装完成RabbitMQ,然后克隆三台。

接下来修改主机名称,分别修改为node1,node2,node3

vim /etc/hostname

centos搭建rabbitmq集群 rabbitmq配置集群_centos搭建rabbitmq集群_02

其余两台也按上面命令对应修改。

然后重启虚拟机,使其生效。

centos搭建rabbitmq集群 rabbitmq配置集群_erlang_03


接下来配置各个节点的 hosts 文件,让各个节点都能互相识别对方


vim /etc/hosts


centos搭建rabbitmq集群 rabbitmq配置集群_erlang_04

 配置node1 2 3三个节点的ip,每一台都要。 

接下来,确保各个节点的 cookie 文件使用的是同一个值,在node1执行如下命令

scp /root/.erlang.cookie root@node2:/root/.erlang.cookie

scp /root/.erlang.cookie root@node3:/root/.erlang.cookie

由于安装mq的方式不同,使用.erlang.cookie的位置可能会不同。官方介绍集群的文档介绍如下: .erlang.cookie一般会存在于两个地方,第一个是:$HOME/.erlang.cookie;第二个是:/var/lib/rabbitmq/.erlang.cookie。

如果我们使用解压缩安装方式(二进制安装或者编译安装),那么该文件存在位置为$HOME目录下。即$HOME/.erlang.cookie。如果我们使用root安装,则位置为:/root/.erlang.cookie,其他用户为/home/用户名/.erlang.cookie。

如果我们使用rpm包方式安装,那么这个文件会存在于/var/lib/rabbitmq目录下。

根据自身情况修改路径。


启动 RabbitMQ 服务 , 顺带启动 Erlang 虚拟机和 RbbitMQ 应用服务 ( 在三台节点上分别执行以下命令)


rabbitmq-server -detached

将node2加入到node1里面去,在node2执行

rabbitmqctl stop_app


(rabbitmqctl stop 会将 Erlang 虚拟机关闭, rabbitmqctl stop_app 只关闭 RabbitMQ 服务 )



rabbitmqctl reset    // 重置mq

rabbitmqctl join_cluster rabbit@node1 // 加入node1

rabbitmqctl start_app   //只启动应用服务

此时node2就连接到了node1,然后在node3里面执行 

rabbitmqctl stop_app

rabbitmqctl reset

rabbitmqctl join_cluster rabbit@node2

rabbitmqctl start_app

连接到node2,这样如果node2挂掉,node3会自动顶替上去

centos搭建rabbitmq集群 rabbitmq配置集群_java_05

查看集群状态

rabbitmqctl cluster_status

 

centos搭建rabbitmq集群 rabbitmq配置集群_erlang_06

然后重新设置用户

创建账号

rabbitmqctl add_user admin 123

设置用户角色

rabbitmqctl set_user_tags admin administrator

设置用户权限

rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*"

登录mq后台查看 

centos搭建rabbitmq集群 rabbitmq配置集群_centos搭建rabbitmq集群_07

可以看到三个节点非常健康的在运行

如果想接触集群的话,假如接除node2,那么在node2执行以下代码

rabbitmqctl stop_app

rabbitmqctl reset

rabbitmqctl start_app

rabbitmqctl cluster_status

然后在node1主节点执行

rabbitmqctl forget_cluster_node rabbit@node2


这样就解除了node2。



镜像队列


镜像队列(Mirror Queue):如果集群中的一个节点失效了,队列能自动地切换到镜像中的另一个节点上以保证服务的可用性。



因为我们如果在单一节点创建队列的话,队列并不会三台都创建,这样跟我们的预期是不符合的,因此,我们要创建镜像队列。



接下来我们来创建镜像进行数据备份,确保数据不会丢失,当然可以多个镜像备份数据,但是会造成资源浪费,所以我们只创建一个。



随便打开一个节点的mq,然后添加一个策略




centos搭建rabbitmq集群 rabbitmq配置集群_java-rabbitmq_08


name: 任意名称

pattern: ^mirror  备份以mirror为前缀的队列 

ha-mode: 备份模式

 exactly:指定对应模式

ha-params:指定备份几份

ha-sync-mode:同步模式 automatic:自动备份

记得去掉//以及后面内容还有空格再添加策略

centos搭建rabbitmq集群 rabbitmq配置集群_centos搭建rabbitmq集群_09

centos搭建rabbitmq集群 rabbitmq配置集群_java_10

 

添加成功 

代码验证

centos搭建rabbitmq集群 rabbitmq配置集群_rabbitmq_11

修改之前代码的队列名称,启动服务 

centos搭建rabbitmq集群 rabbitmq配置集群_java_12

可以看到一个+1 ,点进去查看

centos搭建rabbitmq集群 rabbitmq配置集群_java_13

可以看到在3节点备份了一个