C# RabbitMQ学习笔记三:搭建集群
一、环境准备
假设有两台服务器:
注意事项:
1)所有服务器的Erlang及RabbitMQ版本必须一样。
2)服务器名大小写敏感。
二、开始搭建
2.1、设置hosts文件
路径如下:C:\Windows\System32\drivers\etc
在hosts文件中添加主机及备机的IP地址及计算机名。需要注意的是:主机及备机都要设。
2.2、开启集群端口
假如您的主机及备机都没有开启防火墙,2.2可以略过;若开启了防火墙,需要在开启了防火墙的服务器上的入站规则中添加以下3个端口:
1)15672是管理界面使用的端口;
2)25672是集群之间使用的端口;
3)4369是Erlang进程epmd用来做node连接的端口。
下面以建15672端口为例,其它的原理是一样的:
2.2.1、控制面板\所有控制面板项\Windows 防火墙->高级设置->入站规则。
2.2.2、右键新建规则->选择端口->下一步。
2.2.3、在特定本地端口中输入端口号15672->下一步。
2.2.4、下一步。
2.2.5、下一步。
2.2.6、输入名称,如15672->完成。
3、设置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服务都分别重启一下。
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,如用户信息等。
也可以使用命令查看集群信息:
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