RabbitMQ 单机及集群部署
一、Linux单机部署
二、Linux集群部署
简介:RabbitMQ集群的元数据(队列、交换机、绑定、vhost四种)信息在所有节点上是一致的,而存放消息的队列的完整数据则只会存在与它所创建的那个节点上,其他节点只知道这个队列和元信息及一个指向队列的节点指针,当客户端连接的是非队列数据所在节点,该节点会通过指针进行路由转发。
1. 注意事项
A. RabbitMQ节点cookie文件的值必须是一致的,因为节点通过cookie值来确定相互是否可通信,该路径为/var/lib/rabbitmq/.erlang.cookie或者$HOME/.erlang.cookie;
B. 集群节点最低需要三个,符合奇数点部署,千万不要搭建两个节点的集群,因为两个节点失联时,集群不可用;
C. 集群加入可以通过rabbitmq.conf配置文件或者rabbitmqctl命令来实现,还有另外服务发现机制实现;
D. 通过rabbitmqctl stop_app关闭全部节点,第一个启动节点需要是最后一个关闭的节点,其他节点启动都会等待它启动成功,超时会报错;
E. 集群中至少保证2到3个磁盘节点,其他可以是内存节点,因为磁盘节点挂了将不能添加元数据信息,内存节点可以提供更高的性能,而磁盘节点提供可靠性;
F. RabbitMQ节点是指RabbitMQ应用程序和其所在的Erlang节点;
G. 服务器断电关机后,依然需要重启插件,比如MQTT、Prometheus等;
三、Docker单机部署
1. stack.yml配置文件
# rabbitmq消息 rabbitmq: image: rabbitmq:3.8-management ports: - 4369:4369 - 5671:5671 - 25672:25672 - 5672:5672 - 15672:15672 environment: TZ: Asia/Shanghai RABBITMQ_DEFAULT_USER: guest RABBITMQ_DEFAULT_PASS: guest
2. 执行stack.yml文件:docker stack deploy -c stack.yml rabbitmq;
3. 访问管理界面:打开http://localhost:15672页面,输入正确的用户名和密码也无法登录时,可尝试Ctrl + F5强制刷新一下,因为可能与cookie有关系。
四、Linux Docker集群部署
1. stack.yml配置文件
# RabbitMQ消息队列集群 rabbitmq-1: image: rabbitmq/rabbitmq:3.8-with-plugins-alpine hostname: rabbitmq-1 deploy: mode: global placement: constraints: - node.labels.rabbitmq-1 == true networks: - rws-mp volumes: - /etc/localtime:/etc/localtime - rabbitmq:/etc/rabbitmq - rabbitmq-1-data:/var/lib/rabbitmq environment: RABBITMQ_ERLANG_COOKIE: rhxy-rabbitmq rabbitmq-2: image: rabbitmq/rabbitmq:3.8-with-plugins-alpine hostname: rabbitmq-2 deploy: mode: global placement: constraints: - node.labels.rabbitmq-2 == true networks: - rws-mp volumes: - /etc/localtime:/etc/localtime - rabbitmq:/etc/rabbitmq - rabbitmq-2-data:/var/lib/rabbitmq environment: RABBITMQ_ERLANG_COOKIE: rhxy-rabbitmq rabbitmq-3: image: rabbitmq/rabbitmq:3.8-with-plugins-alpine hostname: rabbitmq-3 deploy: mode: global placement: constraints: - node.labels.rabbitmq-3 == true networks: - rws-mp volumes: - /etc/localtime:/etc/localtime - rabbitmq:/etc/rabbitmq - rabbitmq-3-data:/var/lib/rabbitmq environment: RABBITMQ_ERLANG_COOKIE: rhxy-rabbitmq
2. 启动集群
节点一:
A. 进入rabbitmq容器:docker exec -it myrabbit1 bash
B. rabbitmqctl stop_app
C. rabbitmqctl reset
D. rabbitmqctl start_app
节点二:
A. docker exec -it myrabbit2 bash
B. rabbitmqctl stop_app
C. rabbitmqctl reset
D. rabbitmqctl join_cluster --disc rabbit@rabbit1
E. rabbitmqctl start_app
节点三:
A. docker exec -it myrabbit2 bash
B. rabbitmqctl stop_app
C. rabbitmqctl reset
D. rabbitmqctl join_cluster --ram rabbit@rabbit1
E. rabbitmqctl start_app
可参考:RabbitMQ集群官网文档
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗