10.0.0.150 mq-server1
10.0.0.160 mq-server2
10.0.0.170 mq-server3
普通模式:创建好 RabbitMQ 集群之后的默认模式。
镜像模式:把需要的队列做成镜像队列。
普通集群模式:queue 创建之后,如果没有其它 policy,消息实体只存在于其中一个节点,A、B 两个 Rabbitmq 节点仅有相同的元数据,即队列结构,但队列的数据仅保存有一份,即创建该队列的 rabbitmq 节点(A 节点),当消息进入 A 节点的 Queue 中后,consumer 从 B 节点拉取时,RabbitMQ 会临时在 A、B 间进行消息传输,把 A 中的消息实体取出并经过 B 发送给 consumer,所以 consumer 可以连接每一个节点,从中取消息,该模式存在一个问题就是当 A 节点故障后,B节点无法取到 A 节点中还未消费的消息实体。
镜像集群模式:
把需要的队列做成镜像队列,存在于多个节点,属于 RabbitMQ 的 HA 方案(镜像模式是在普通模式的基础上,增加一些镜像策略)该模式解决了普通模式中的数据丢失问题,其实质和普通模式不同之处在于,消息实体会主动在镜像节点间同步,而不是在 consumer 取数据时临时拉取,该模式带来的副作用也很明显,除了降低系统性能外,如果镜像队列数量过多,加之大量的消息进入,集群内部的网络带宽将会被这种同步通讯大大消耗掉,所以在对可靠性要求较高的场合中适用,一个队列想做成镜像队列,需要先设置 policy,然后客户端创建队列的时候,rabbitmq 集群根据“队列名称”自动设置是普通集群模式或镜像队列。
内存节点:只将数据保存到内存
磁盘节点:保存数据到内存和磁盘。内存节点虽然不写入磁盘,但是它执行比磁盘节点要好,集群中,只需要一个磁盘节点来保存数据就足够了如果集群中只有内存节点,那么不能全部停止它们,否则所有数据消息在服务器全部停机之后都会丢失。
[root@centos8 ~]
[root@centos8 ~]
[root@centos8 ~]
[root@centos8 ~]
[root@centos8 ~]
[root@centos8 ~]
[root@centos8 ~]
[root@centos8 ~]
[root@centos8 ~]
[root@mq-server1 ~]
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
10.0.0.150 mq-server1
10.0.0.160 mq-server2
10.0.0.170 mq-server3
[root@mq-server2 ~]
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
10.0.0.150 mq-server1
10.0.0.160 mq-server2
10.0.0.170 mq-server3
[root@mq-server3 ~]
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
10.0.0.150 mq-server1
10.0.0.160 mq-server2
10.0.0.170 mq-server3
Rabbitmq 的集群是依赖于 erlang 的集群来工作的,所以必须先构建起 erlang 的集群环境,而 Erlang 的集群中各节点是通过一个 magic cookie 来实现的,这个cookie 存放在 /var/lib/rabbitmq/.erlang.cookie 中,文件是 400 的权限,所以必须保证各节点 cookie 保持一致,否则节点之间就无法通信。
[root@mq-server1 ~]
[root@mq-server1 ~]
[root@mq-server1 ~]
[root@mq-server2 ~]
[root@mq-server3 ~]
[root@mq-server1 ~]
[root@mq-server2 ~]
[root@mq-server3 ~]
[root@mq-server2 ~]
Stopping rabbit application on node rabbit@mq-server2 ...
[root@mq-server2 ~]
Resetting node rabbit@mq-server2 ...
[root@mq-server2 ~]
Clustering node rabbit@mq-server2 with rabbit@mq-server1
[root@mq-server2 ~]
Starting node rabbit@mq-server2 ...
[root@mq-server1 ~]
Cluster status of node rabbit@mq-server1 ...
Basics
Cluster name: rabbit@mq-server1
Disk Nodes
rabbit@mq-server1
RAM Nodes
rabbit@mq-server2
rabbit@mq-server3
Running Nodes
rabbit@mq-server1
rabbit@mq-server2
rabbit@mq-server3
Versions
rabbit@mq-server1: RabbitMQ 3.10.7 on Erlang 25.0.4
rabbit@mq-server2: RabbitMQ 3.10.7 on Erlang 25.0.4
rabbit@mq-server3: RabbitMQ 3.10.7 on Erlang 25.0.4
Maintenance status
Node: rabbit@mq-server1, status: not under maintenance
Node: rabbit@mq-server2, status: not under maintenance
Node: rabbit@mq-server3, status: not under maintenance
Alarms
(none)
Network Partitions
(none)
Listeners
Node: rabbit@mq-server1, interface: [::], port: 25672, protocol: clustering, purpose: inter-node and CLI tool communication
Node: rabbit@mq-server1, interface: [::], port: 5672, protocol: amqp, purpose: AMQP 0-9-1 and AMQP 1.0
Node: rabbit@mq-server2, interface: [::], port: 25672, protocol: clustering, purpose: inter-node and CLI tool communication
Node: rabbit@mq-server2, interface: [::], port: 5672, protocol: amqp, purpose: AMQP 0-9-1 and AMQP 1.0
Node: rabbit@mq-server3, interface: [::], port: 25672, protocol: clustering, purpose: inter-node and CLI tool communication
Node: rabbit@mq-server3, interface: [::], port: 5672, protocol: amqp, purpose: AMQP 0-9-1 and AMQP 1.0
Feature flags
Flag: classic_mirrored_queue_version, state: enabled
Flag: implicit_default_bindings, state: enabled
Flag: maintenance_mode_status, state: enabled
Flag: quorum_queue, state: enabled
Flag: stream_queue, state: enabled
Flag: user_limits, state: enabled
Flag: virtual_host_metadata, state: enabled
[root@mq-server1 ~]
Setting policy "ha-all" for pattern "#" to "{"ha-mode":"all"}" with priority "0" for vhost "/" ...
[root@mq-server1 ~]
[root@mq-server2 ~]
[root@mq-server3 ~]
[root@mq-server1 ~]
{loopback_users, [<<"">>]},
[root@mq-server1 ~]
Listing users ...
user tags
guest [administrator]
[root@mq-server1 ~]
Adding user "admin" ...
Done. Don't forget to grant the user permissions to some virtual hosts! See 'rabbitmqctl help set_permissions' to learn more.
[root@mq-server1 ~]#rabbitmqctl set_user_tags admin administrator
Setting tags for user "admin" to [administrator] ...
[root@mq-server1 ~]#rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*"
Setting permissions for user "admin" in vhost "/" ...
#10.这样就可以通过admin/123456账户登录没有修改配置文件的地址来访问rabbitmq界面了。

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具