一、环境准备

    假设有两台服务器:

centos7部署rabbitmq集群 3节点_erlang

    注意事项:

    1)所有服务器的Erlang及RabbitMQ版本必须一样。

    2)服务器名大小写敏感。

centos7部署rabbitmq集群 3节点_Erlang_02

centos7部署rabbitmq集群 3节点_Windows_03

    二、开始搭建

    2.1、设置hosts文件

    路径如下:C:\Windows\System32\drivers\etc

centos7部署rabbitmq集群 3节点_erlang_04

    在hosts文件中添加主机及备机的IP地址及计算机名。需要注意的是:主机及备机都要设。

centos7部署rabbitmq集群 3节点_Windows_05

    2.2、开启集群端口

    假如您的主机及备机都没有开启防火墙,2.2可以略过;若开启了防火墙,需要在开启了防火墙的服务器上的入站规则中添加以下3个端口:

15672是管理界面使用的端口;

    2)25672是集群之间使用的端口;

rlang进程epmd用来做node连接的端口。

    下面以建15672端口为例,其它的原理是一样的:

    2.2.1、控制面板\所有控制面板项\Windows 防火墙->高级设置->入站规则。

centos7部署rabbitmq集群 3节点_Erlang_06

    2.2.2、右键新建规则->选择端口->下一步。

centos7部署rabbitmq集群 3节点_Windows_07

    2.2.3、在特定本地端口中输入端口号15672->下一步。

centos7部署rabbitmq集群 3节点_erlang_08

    2.2.4、下一步。

centos7部署rabbitmq集群 3节点_Windows_09

    2.2.5、下一步。

centos7部署rabbitmq集群 3节点_Erlang_10

    2.2.6、输入名称,如15672->完成。

centos7部署rabbitmq集群 3节点_Windows_11

Cookie

    由于RabbitMQ的集群是依附于Erlang的集群来工作的,所以必须先构建起Erlang的集群镜像。Erlang的集群中各节点是经由过程一个magic cookie来实现的,这个cookie存放在C:\Users\管理员用户\.erlang.cookie中(如本机使用的是Administartor用户,存放的路径在于C:\Users\Administartor\.erlang.cookie中),另外在Windows系统中,在C:\Windows目录下也有一个.erlang.cookie(不同版本存放的路径略有不同,3.8.3版本存放的路径在于C:\Windows\System32\config\systemprofile下),两个是一样的,各个节点的这两个文件必须要保持一致。

    3.1、复制主机cx168下的.erlang.cookie文件,将备机cx165中的两个.erlang.cookie文件替换掉。

    3.2、主机及备机的RabbitMQ服务都分别重启一下。

centos7部署rabbitmq集群 3节点_Erlang_12

    4、加入集群

    在备机的RabbitMQ Command Prompt (sbin dir)中,执行以下命令:

rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster rabbit@cx168 --ram
rabbitmqctl start_app

    注:上面是将备机cx165添加到主机cx168集群中,备机是以ram节点的方式加入。假如想改成disc节点,可以使用以下命令修改:

rabbitmqctl stop_app
rabbitmqctl change_cluster_node_type --disc
rabbitmqctl start_app

    5、查看集群信息

    现在登录一下备机cx165的管理界面(如下图),可以看到:

    1)右上角的集群已经由cx165变成了cx168;

    2)节点Nodes出现了主机cx168及备机cx165;

    3)主机cx168上的信息已全部同步到备机cx165,如用户信息等。

centos7部署rabbitmq集群 3节点_erlang_13

    也可以使用命令查看集群信息:

rabbitmqctl cluster_status

    6、集群注意事项

    1)集群中至少要有一个disc类型的节点,这样关于集群的配置才是有效的;

    2)仅当集群中disc类型的节点处于运行状态时,对集群相关配置的修改才是有效的(disc代表磁盘节点,ram代表内存节点);

    3)集群在运行时,如果disc节点突然宕掉,此时其它的ram节点仍然能够继续提供服务,但若此时所有的ram节点也都宕掉,则在disc节点未启动的情况下,ram节点无法启动,因为所有的配置都保存在disc节点下面,启动时,需要从该类型节点读取对应的配置。

    4)RabbitMQ集群中,节点之间的exchange是在各个节点都有一份的,但是消息队列queue只存在对应的接收节点上面,其它节点不存储。如果该接收节点宕掉,那么接收到的消息队列可能会丢失。

    7、 集群其它命令

    7.1、退出集群

rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app