问题说明: RabbitMQ要求在集群中至少有一个磁盘节点, 其他所有节点可以是内存节点, 当节点加入或者离开集群时, 必须要将该变更通知到至少一个磁盘节点. 如果集群中唯一的一个磁盘节点崩溃的话, 集群仍然可以保持运行, 但是无法进行其他操作(增删改查), 直到节点回复.
解决方案: 设置两个磁盘节点, 至少有一个是可用的, 可以保存元数据的更改.
Erlang Cookie是保证不同节点可以互相通信的密钥, 要保证集群中的不同节点相互通信必须共享相同的Erlang Cookie, 具体的目录存放在/var/lib/rabbitmq/.erlang.cookie
.
说明: 这就要从rabbitmqctl命令的工作原理说起, RabbitMQ底层是通过Erlang架构来实现的, 所以rabbitmqctl会启动Erlang节点, 并基于Erlang节点来使用Erlang系统连接RabbitMQ节点, 在连接过程中需要正确的Erlang Cookie和节点名称, Erlang节点通过交换Erlang Cookie来获得认证.
RabbitMQ的Cluster集群一般分为两种, 普通模式和镜像模式.
下面表示在集群配置下的不同节点创建队列的情况
下图表示在集群配置下的不同节点创建交换器和队列的绑定的情况