本文共 1838 字,大约阅读时间需要 6 分钟。
在 RabbitMQ 的普通集群模式中,所有节点具有完全的一致性,元数据(如交换机、队列、绑定等)在所有节点上保持一致。以下是该模式的核心特点:
元数据一致性:只要有任意一个节点新增交换机、队列或绑定,其他节点会自动复制这些元数据。
消息存储特点:队列中的消息只保存在创建它的节点上。其他节点仅保存队列的元数据和指针(指向消息来源节点)。
消息传输机制:
启动容器:
docker run -d --name mq --restart=always \ -e RABBITMQ_DEFAULT_USER=root \ -e RABBITMQ_DEFAULT_PASS=1111 \ -p 15672:15672 \ -p 5672:5672 \ rabbitmq:3.8-management
配置共享密钥:
配置文件:
~/.erlang.cookie 并设置密钥值: echo "FQXBTQJMJLRUGFPIECYG" > ~/.erlang.cookiechmod 600 ~/.erlang.cookie
rabbitmq.conf 并配置集群参数: touch rabbitmq.conf
配置示例:
listener.tcp.default = 5672cluster_formation.peer_discovery_backend = rabbit_peer_discovery_classic_configcluster_formation.classic_config.nodes.1 = rabbit@mq1cluster_formation.classic_config.nodes.2 = rabbit@mq2cluster_formation.classic_config.nodes.3 = rabbit@mq3
节点文件结构:
mkdir -p ~/mq_cluster/mq1 ~/mq_cluster/mq2 ~/mq_cluster/mq3
cp rabbitmq.conf ~/mq_cluster/mq1 ~/mq_cluster/mq2 ~/mq_cluster/mq3cp ~/.erlang.cookie ~/mq_cluster/mq1 ~/mq_cluster/mq2 ~/mq_cluster/mq3
启动节点:
docker run -d --net mq-net \ -v ~/mq_cluster/mq1/rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf \ -v ~/mq_cluster/mq1/.erlang.cookie:/var/lib/rabbitmq/.erlang.cookie \ -e RABBITMQ_DEFAULT_USER=root \ -e RABBITMQ_DEFAULT_PASS=1111 \ --name mq1 --hostname mq1 -p 5672:5672 -p 15672:15672 rabbitmq:3.8-management
类似地启动 mq2 和 mq3。
验证集群:
在节点宕机时,消息丢失的情况如下:
非持久化队列:
持久化队列:
注意事项:
通过以上步骤,可以实现一个高可用性的 RabbitMQ 集群,确保消息的安全存储和传输。
转载地址:http://witfk.baihongyu.com/