按照上一篇已经搭好两个rabbitmq单实例,下面把两台单实例组成集群
RabbitMQ集群是一个或几个节点的逻辑分组,每个节点共享用户,虚拟主机,队列,交换,绑定,运行时参数和其他分布式状态
bg:
两台实验机
关闭防火墙和selinux
node1 172.16.1.130 mycentos7
node2 172.16.1.79 wikbackup79
标识符
节点名称,集群中的唯一标识符,两部分组成,例如rabbit@mycentos7,rabbit默认的,mycentos7主机名,并且要能解析
分别在两台pc编辑hosts
Erlang Cookie
CLI工具如何对节点(以及彼此之间的节点)进行身份验证:Erlang Cookie
所以集群要保证/var/lib/rabbitmq/.erlang.cookie(默认)一致,把130的复制到79
开始创建集群
假设两个节点都已经启动
把node1和node2加入集群,在node2上操作
停止node2上的rabbitmq
$ rabbitmqctl stop_app
重置node2rabbitmq
$ rabbitmqctl reset
加入node1集群
$ rabbitmqctl join_cluster rabbit@mycentos7
启动node2上的rabbitmq
$ rabbitmqctl start_app
在任意节点查看集群
$ rabbitmqctl cluster_status
按照以上步骤可以随时添加新节点
有时需要删除节点,步骤很简单,两种方式
主动方式,在被删除节点操作
先停rabbitmq
$ rabbitmqctl stop_app
重置reset
$ rabbitmqctl reset
启动rabbitmq
$ rabbitmqctl start_app
此时就是一个干净的单实例rabbitmq
被动方式,远程操作,用于节点损坏无法响应
在活动节点,例如node1执行,前提是node2已经停止了rabbitmq(rabbitmqctl stop_app)
$ rabbitmqctl forget_cluster_node rabbit@wikbackup79
查看一下cluster status,发现去掉了node2
$ rabbitmqctl cluster_status
具有RAM节点的集群
RAM节点仅将元数据保留在内存中。由于RAM节点不必像磁盘节点那样多地写入磁盘,因此它们可以表现得更好。但是,请注意,由于持久队列数据始终存储在磁盘上,因此性能提高将仅影响资源管理(例如,添加/删除队列,交换或虚拟主机),而不会影响发布或消耗速度。
RAM节点是高级用例;在设置第一个集群时,您不应该使用它们。您应该有足够的磁盘节点来满足您的冗余要求,然后如有必要,添加其他RAM节点以进行扩展。
仅包含RAM节点的群集将非常易变。如果群集停止,您将无法再次启动它,并且 将丢失所有数据。RabbitMQ在许多情况下会阻止创建仅RAM节点的群集,但不能绝对阻止。
这里的示例显示了一个群集,其中包含一个磁盘和一个RAM节点,仅出于简化目的。这样的集群是一个糟糕的设计选择。
之前创建集群的命令加入--ram参数就是创建内存节点的命令
我们先在node2重置rabbitmq
$ rabbitmqctl stop_app
$ rabbitmqctl reset
创建一个内存节点
$ rabbitmqctl --ram join_cluster rabbit@mycentos7
$ rabbitmqctl start_app
$ rabbitmqctl cluster_status
如果不加--ram参数默认是disc节点
通常我们使用默认即可,现在把刚刚创建的内存节点转换成disc节点
$ rabbitmqctl stop_app (任何操作都要先停mq)
$ rabbitmqctl change_cluster_node_type disc
$ rabbitmqctl start_app
$ rabbitmqctl cluster_status
集群搭建完成
我们在node1和node2分新建一个队列testQueue,testmq
此时,我们把node2停掉,发现在node2上建的队列testmq丢失了
下一篇,测试一下高可用,镜像模式