RabbitMQ集群配置简单记录

1.配置集群

RabbitMQ通过ssh通道进行集群直接的链接,这里准备了两台服务器分别如下

192.168.0.1 主机名 RabbitMQ-1 
192.168.0.1 主机名 RabbitMQ-2 

首先我们需要在这两台机器上配置好互相的host可以通过主机名进行访问

vim /etc/hosts
内网地址 RabbitMQ-1
内网地址 RabbitMQ-2
service network restart
#在 RabbitMQ-1 能通:
ping RabbitMQ-2
#在 RabbitMQ-2 能通:
ping RabbitMQ-1

1.1 配置 Erlang Cookie

当我们可以ping通之后我们需要设置一下 Erlang Cookie 让两台机器保持同样的 Cookie 才能顺利的建立集群

先启动双方的RabbitMQ
复制 RabbitMQ-1 中 /var/lib/rabbitmq/.erlang.cookie 文件中的值
粘贴到 RabbitMQ-2 /var/lib/rabbitmq/.erlang.cookie中 使用:wq! 保存
重启RabbitMQ-2 RabbitMQ服务

1.2 join服务器建立关联

Cookie我们已经配置好了 接下来需要把两个集群关联起来

对 RabbitMQ-1 节点做如下操作

rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app

这个是用来在rabbitmq1上执行的,这个也可以不执行,直接在节点服务器执行下边的脚本,不过得保证这个rabbitmq服务是正常启动的.

RabbitMQ-2 节点服务配置脚本

rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster --ram rabbit@RabbitMQ-1
rabbitmqctl start_app

1.3 查看集群状态

可以通过 rabbitmqctl cluster_status 查看到如下状态证明集群已经配置成功

[root@Sunmi-RabbitMQ-1 ~]# rabbitmqctl cluster_status
Cluster status of node ‘rabbit@Sunmi-RabbitMQ-1’ …
[{nodes,[{disc,[‘rabbit@Sunmi-RabbitMQ-1’]},
         {ram,[‘rabbit@Sunmi-RabbitMQ-2’]}]},
 {running_nodes,[‘rabbit@Sunmi-RabbitMQ-2’,’rabbit@Sunmi-RabbitMQ-1’]},
 {cluster_name,<<“rabbit@Sunmi-RabbitMQ-1”>>},
 {partitions,[]},
 {alarms,[{‘rabbit@Sunmi-RabbitMQ-2’,[]},{‘rabbit@Sunmi-RabbitMQ-1’,[]}]}]

注意:建立好集群之后需要重新配置一下用户 配置的用户会影响整个集群

集群的各项模式

通常情况下,在集群中我们把每一个服务称之为一个节点,在 RabbitMQ 集群中,节点类型可以分为两种:

内存节点:元数据存放于内存中。为了重启后能同步数据,内存节点会将磁盘节点的地址存放于磁盘之中,除此之外,如果消息被持久化了也会存放于磁盘之中,因为内存节点读写速度快,一般客户端会连接内存节点。
磁盘节点:元数据存放于磁盘中(默认节点类型),需要保证至少一个磁盘节点,否则一旦宕机,无法恢复数据,从而也就无法达到集群的高可用目的。

PS:元数据,指的是包括队列名字属性、交换机的类型名字属性、绑定信息、vhost等基础信息,不包括队列中的消息数据。
RabbitMQ 中的集群主要有两种模式:普通集群模式和镜像队列模式。

配置镜像模式只需要在主节点运行如下命令:

  • p 之后加上你需要的Vhost
 rabbitmqctl set_policy -p / ha-all “^” ‘{“ha-mode”:”all”}’

附件:
使用docker
一、拉取镜像

docker pull rabbitmq:3.7-management

二、创建容器
1、新建目录

mkdir rabbitmq01 rabbitmq02 rabbitmq03

2、创建容器

docker run -d --hostname rabbitmq01 --name rabbitmqCluster01 -v /downloads/rabbitmq/rabbitmq01:/var/lib/rabbitmq -p 15672:15672 -p 5672:5672 -e RABBITMQ_ERLANG_COOKIE=‘rabbitmqCookie’ rabbitmq:3.7-management
docker run -d --hostname rabbitmq02 --name rabbitmqCluster02 -v /downloads/rabbitmq/rabbitmq02:/var/lib/rabbitmq -p 15673:15672 -p 5673:5672 -e RABBITMQ_ERLANG_COOKIE=‘rabbitmqCookie’ --link rabbitmqCluster01:rabbitmq01 rabbitmq:3.7-management
docker run -d --hostname rabbitmq03 --name rabbitmqCluster03 -v /downloads/rabbitmq/rabbitmq03:/var/lib/rabbitmq -p 15674:15672 -p 5674:5672 -e RABBITMQ_ERLANG_COOKIE=‘rabbitmqCookie’ --link rabbitmqCluster01:rabbitmq01 --link rabbitmqCluster02:rabbitmq02 rabbitmq:3.7-management

三、容器执行命令
容器一

docker exec -it rabbitmqCluster01 bash
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app
exit

容器二

docker exec -it rabbitmqCluster02 bash
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster --ram rabbit@rabbitmq01
rabbitmqctl start_app
exit

容器三

docker exec -it rabbitmqCluster03 bash
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster --ram rabbit@rabbitmq01
rabbitmqctl start_app
exit

回到容器一

docker exec -it rabbitmqCluster01 bash
rabbitmqctl set_policy -p / ha “^” ‘{“ha-mode”:“all”,“ha-sync-mode”:“automatic”}’

你可能感兴趣的:(RabbitMQ,java)