接上一篇:Centos7、Erlang-21.3、RabbitMQ-3.8.0 单机版安装
将各个节点安装完毕参考:Centos7、Erlang-21.3、RabbitMQ-3.8.0 单机版安装
修改Linux中的/etc/hosts文件加入,让各个节点都能互相识别对方的存在
192.168.184.138 node-1
192.168.184.139 node-2
修改完成之后,重启服务器。
RabbitMQ集群通信是建立在Erlang通信上的,Erlang通信是通过.erlang.cookie文件通信的,编辑 RabbitMQ的cookie 文件,以确保各个节点的cookie文件使用的是同一个值,cookie文件在$HOME目录下,cookie相当于密钥令牌,集群中的RbbitMQ节点需要通过交换密钥令牌以获得相互认证,如果节点的密钥令牌不一致,那么在配置节点时就会报错,报错如下
rabbitmqctl join_cluster rabbit@node-2
复制node-1或者node-2的都行,只要保证相同
scp -r /root/.erlang.cookie [email protected]:/root/
配置集群,使用 rabbitmqctl工具配置,启动这两个rabbitmq节点服务
rabbitmq-server -detached
这两个节点时独立的,rabbitmqctl cluster_status,查看各个节点的状态
接下来为了将2个节点组成一个集群,需要以node-1节点为基准,将node-2节点
加入 node-1节点的集群中。这2个节点是平等的,如果想调换彼此的加入顺序也可以。 将node-2节点加入node-1节点的集群中,需要如下步骤:
在node-2节点执行
[root@node-2 ~]# rabbitmqctl stop_app
Stopping rabbit application on node rabbit@node-2 ...
[root@node-2 ~]#
[root@node-2 ~]# rabbitmqctl reset
Resetting node rabbit@node-2 ...
[root@node-2 ~]#
[root@node-2 ~]# rabbitmqctl join_cluster rabbit@node-1 //rabbit@rabbitmq01为rabbitmq01集群的名字,在rabbitmq01上查看
Clustering node rabbit@node-2 with rabbit@node-1
[root@node-2 ~]#
[root@node-2 ~]# rabbitmqctl start_app
Starting node rabbit@node-2 ...
completed with 3 plugins.
[root@node-2 ~]#
然后使用:rabbitmqctl cluster_status查看状态为:
Web管理插件可看出成功了
到此rabbitmq集群搭建完成
RAM node:内存节点将所有的队列、交换机、绑定、用户、权限和 vhost 的元数据定义存储在内存中,好处是可以使得像交换机和队列声明等操作更加的快速。
Disk node:将元数据存储在磁盘中,单节点系统只允许磁盘类型的节点,防止重启 RabbitMQ 的时候,丢失系统的配置信息。
在使用rabbitmqctl cluster_status命令来查看节点类型:显示如图
目前来看集群中所有的节点都为磁盘节点,我们可以将node-1修改为内存节点,
rabbitmqctl stop_app
rabbitmqctl change_cluster_node_type ram
rabbitmqctl start_app
rabbitmqctl cluster_status
查看集群中node-1节点已经更改为ram类型
在RabbitMQ集群中,RabbitMQ规定必须要有一个disk节点,其他节点都可以为RAM节点,当节点加入或者离开集群时,它们必须将变更通知到至少一个磁盘节点。如果只有一个disk节点,而且改disk节点下线,那么集群可以继续发送或者接收消息,但是不能执行其他操作,直到该磁盘节点恢复前,你无法更改任何东西,所以说在建立集群的时候,我们确保应该有多个disk节点。
解释:
Erlang集群
rabbitmqctl首先会启动erlang节点,然后会从erlang分布式系统尝试连接RabbitMQ,而这时候需要erlang cookie和合适的节点名称,erlang节点通过交换作为秘密令牌的erlang cookie以获得认证,.erlang.cookie中存储的就是此令牌信息,所以集群所以erlang节点的erlang.cookie令牌信息必须一致
由于RabbitMQ的集群依赖erlang的集群,所以需要构建erlang集群,erlang集群之间是通过magic cookie实现的,这个cookie存放在$HOME/.erlang.cookie,随便选取一个节点的cookie复制到另外两个节点使三台保持一致
scp .erlang.cookie root@rabbitmq02:/root
设置好之后即可重启rabbitmq
如果需要将rabbitmq02作为内存节点与rabbitmq01连接起来,则在rabbitmq02上执行以下命令
其中--ram代表是内存节点,如果希望是磁盘节点则不用加--ram,在rabbitmq集群中,至少需要一个磁盘节点
然后可以使用ip:15672即可访问,可以查看到三台节点的信息
集群节点可以是两种类型: 磁盘节点(Disc Node) 或 内存节点(RAM Node).磁盘节点会在RAM和磁盘中复制数据, 通过冗余可以防止节点失效事件,并可从断电这种全局事件中进行恢复. RAM节点只在RAM中复制数据(除了队列的内容外,还依赖于队列是否是持久化的或者内容对于内存来说是否过大) ,并主要用于可伸缩性. RAM节点只有当管理资源(如,增加/删除队列,交换机,或绑定)的时候才具有更高的性能.一个集群必须至少有一个磁盘节点,通常来说还不止一个.
默认情况下,节点是磁盘节点.如果你想要创建内存节点,需要提供--ram 标志
rabbitmq命令详解参考
如果在加入集群的时候没有指定内存节点(RAM Node),可以使用命令将某个RabbitMQ节点修改为内存节点
修改节点为ram模式
退出集群
注意事项