精通RabbitMQ的单节点和集群安装

使用 Docker 单节点安装

官方提供了一个Docker镜像, 直接执行下面命令即可.

script
1
2
3
4
5
mkdir -p /opt/rabbitmq/config && touch /opt/rabbitmq/config/rabbitmq.config
docker run -it --name rabbitmq -p 5672:5672 -p 15672:15672 \
-v /opt/rabbitmq/config/rabbitmq.config:/etc/rabbitmq/rabbitmq.config \
--hostname my-rabbit \
rabbitmq:3-management

rabbitmq:3-management镜像整合了控制台插件, 访问http://虚拟机IP:15672就可以看到控制台了.

集群安装

HAProxy 实现主备集群(Warren模式)

当主节点宕机的时候, HAProxy能够将备节点升级为主节点, 继续提供服务.
本质上还是HAProxy下的一个节点在提供服务, 所以一般在并发和数据量不高的情况下使用.
![Warren模式](https://yuml.me/diagram/nofunky;dir:UD/class/[HAProxy]->[RabbitMQ master],[HAProxy]->[RabbitMQ backup])

HAProxy是免费开源的高可用解决方案, 可以将请求分散到多个服务器上, 为基于TCPHTTP的应用程序提供负载均衡和代理功能.
我们先创建一个简单的HAProxy配置文件haproxy.cfg

script
1
2
3
4
5
6
7
8
9
10
11
listen rabbitmq_cluster
# 监听端口
bind 0.0.0.0:5672
# 配置TCP模式
mode tcp
# 轮询策略, 顺序轮询
balance roundrobin
# 主节点, 绑定rabbitmq-master容器的5672端口, 每5秒检测一次心跳, 2次正确证明服务可用, 2次失败证明服务不可用
server rabbit-master rabbitmq-master:5672 check inter 5000 rise 2 fall 2
# 备节点, 绑定rabbitmq-backup容器的5672端口, 每5秒检测一次心跳, 2次正确证明服务可用, 2次失败证明服务不可用
server rabbit-backup rabbitmq-backup:5672 backup check inter 5000 rise 2 fall 2

这里用Docker Compose搭建一套一主一备的集群

1
2
3
4
5
6
7
8
9
10
11
12
version: "3"
services:
haproxy:
image: haproxy
ports:
- 5672:5672
volumes:
- ./haproxy:/usr/local/etc/haproxy:ro # HAProxy 的配置文件路径
rabbitmq-master:
image: rabbitmq:3-alpine
rabbitmq-backup:
image: rabbitmq:3-alpine

然后启动一下, 就可以在本地搭建好一个Warren模式的主备集群了. 为了简单, 这里是在单机用Docker部署的.
如果不用Docker部署也差不多, 最主要的就是HAProxy的配置

script
1
2
3
4
5
6
# 1. 创建配置文件
mkdir -p /opt/rabbit-haproxy/haproxy && cd /opt/rabbit-haproxy
vim ./docker-compose.yml
vim ./haproxy/haproxy.cfg
# 2. 启动
docker-compose up

Shovel模式

Shovel模式
ShovelRabbitMQ的一个插件, 本质上就是一个消费者, 消费当前节点的某个队列里的消息, 然后生产消息发送到目标节点的Exchange上, 使用confirm机制保证消息的可靠性投递.

这里先创建一个简单的Docker镜像, 官方并没有提供开启了ShovelRabbitMQ镜像.

1
2
3
4
5
FROM rabbitmq:3.7-management
RUN rabbitmq-plugins enable --offline rabbitmq_shovel rabbitmq_shovel_management
EXPOSE 5672 15672
# docker build -t rabbitmq-shovel .
# docker run -it --name rabbitmq1 -p 5672:5672 -p 15672:15672 rabbitmq-shovel

Shovel分为静态配置和动态配置

静态Shovels 动态Shovels
在配置文件中设置 在命令行中设置
修改后要重启 修改后不需要重启

具体部署参阅官方文档

镜像集群(Mirror模式)

Mirror模式

script
1
2
3
4
# https://github.com/pardahlman/docker-rabbitmq-cluster
git clone https://github.com/pardahlman/docker-rabbitmq-cluster.git
cd docker-rabbitmq-cluster
docker-compose up

异地多集群(多活模式)

多活模式

参考资料