A. 默认集群模式搭建
首先需要配置一下hosts文件,因为RabbitMQ集群节点名称是读取hosts文件得到的;
一,我们搭建3个节点,它们的名称分别如下 :
rabbit128
rabbit130
rabbit131
配置hosts文件如下:
vim /etc/hosts
192.168.10.128 rabbit128
192.168.10.130 rabbit130
192.168.10.131 rabbit131
二,搭建集群时,要关闭防火墙, 让三台机器互联
systemctl status firewalld
systemctl stop firewalld --关闭防火墙
systemctl disable firewalld --开机不启动防火墙
三,将各个节点的 .erlang.cookie文件内容保持一致,就以某个机器上的文件为准,复制到另外机器上即可,
复制后记得重启MQ
同时保证文件的权限是600;
该文件是一个隐藏文件,需要使用 ll -a 命令展示出来;
erlang.cookie是erlang实现分布式的必要文件,
erlang分布式的每个节点上要保持相同的.erlang.cookie文件
.erlang.cookie一般会存在下面这两个位置: 解压缩方式安装的RabbitMQ,那么是${用户名}/.erlang.cookie;
rpm安装包方式进行安装,那么是/var/lib/rabbitmq目录下;
修改后重启,读取配置的节点 和 erlang.cookie
reboot
四,建立集群关系
-
把128、130、131三台机器上都安装好erlang和rabbitmq;
-
分别启动三台linux上的rabbitmq;
-
先让rabbitmq130 加入rabbitmq128与它构成一个集群;在rabbitmq130机器上执行命令:
./rabbitmqctl stop_app ./rabbitmqctl join_cluster rabbit@rabbit128 --ram ./rabbitmqctl start_app
- -ram 参数表示让rabbitmq130成为一个内存节点,如果不带参数默认为disk磁盘节点;
-
再让rabbitmq131 加入rabbitmq128与它构成一个集群;在rabbitmq131机器上执行命令:
./rabbitmqctl stop_app ./rabbitmqctl join_cluster rabbit@rabbit128 --ram ./rabbitmqctl start_app
当执行完操作以后我们在浏览器访问web管控台来看看效果;
也可以使用 ./rabbitmqctl cluster_status 查看集群状态;
有关集群的其他命令:
./rabbitmqctl start_app 启动RabbitMQ应用,而不是节点;
./rabbitmqctl stop_app 停止RabbitMQ应用,而不是节点;
./rabbitmqctl cluster_status 查看集群状态
./rabbitmqctl status 查当前单机节点的详细状态
B.镜像集群模式
镜像模式是基于默认集群模式加上一定的配置得来的;
在默认模式下的RabbitMQ集群,它会把所有节点的交换机、绑定、队列的元数据进行复制确保所有节点都有一份相同的元数据信息,但是队列数据分为两种:一种是队列的元数据信息(比如队列的最大容量,队列的名称等配置信息),另一种是队列里面的消息;
镜像模式,则是把所有的队列数据完全同步,包括元数据信息和消息数据信息,当然这对性能肯定会有一定影响,当对数据可靠性要求较高时,可以使用镜像模式;
所有名字开头为policy_的队列进行镜像,镜像数量为2,那么命令如下(在任意节点执行如下命令):
./rabbitmqctl set_policy ha_policy "^policy_" '{"ha-mode":"exactly","ha-params":2,"ha-sync-mode":"automatic"}'
如果要在所有节点所有队列上进行镜像,则(在任意节点执行如下命令):
./rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'