一、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