运维(16) docker-compose部署RabbitMQ集群
文章目录一、前言二、docker-compose部署RabbitMQ集群三、其它docker-compose-rabbitmq-cluster.ymlrabbitmq.conf.erlang.cookieinit-rabbitmq.sh一、前言本文将基于docker-compose部署RabbitMQ集群&配置镜像队列&安装延迟插件二、docker-compose部署RabbitM
·
文章目录
一、前言
本文将基于docker-compose部署RabbitMQ集群&配置镜像队列&安装延迟插件
二、docker-compose部署RabbitMQ集群
# 准备
git clone https://gitee.com/zhengqingya/docker-compose.git
cd docker-compose/Liunx
# 当前目录下所有文件赋予权限(读、写、执行)
chmod -R 777 ./rabbitmq-cluster
# 设置Erlang Cookie文件权限(cookie文件必须只允许拥有者有权操作)
chmod 600 ./rabbitmq-cluster/.erlang.cookie
# 运行 [ 注:如果之前有安装过,需要清除浏览器缓存和删除rabbitmq相关的存储数据(如:这里映射到宿主机的data数据目录),再重装,否则会出现一定问题! ]
docker-compose -f docker-compose-rabbitmq-cluster.yml -p rabbitmq-cluster up -d
# 启用延迟插件(注:如果节点类型为内存节点,则无法启用延迟插件)
docker exec rabbitmq-1 /bin/bash -c 'rabbitmq-plugins enable rabbitmq_delayed_message_exchange'
docker exec rabbitmq-2 /bin/bash -c 'rabbitmq-plugins enable rabbitmq_delayed_message_exchange'
# 执行脚本 => 配置集群
sh ./rabbitmq-cluster/init-rabbitmq.sh
# 配置镜像队列(允许内建双活冗余选项,与普通队列不同,镜像节点在集群中的其他节点拥有从队列拷贝,一旦主节点不可用,最老的从队列将被选举为新的主队列)
docker exec -it rabbitmq-1 /bin/bash
rabbitmqctl set_policy -p my_vhost ha-all "^" '{"ha-mode":"all"}' --apply-to all
# 查看镜像队列`ha-all`
rabbitmqctl list_policies -p my_vhost
# 删除镜像队列`ha-all`
rabbitmqctl clear_policy -p my_vhost ha-all
web管理端:ip地址:15672
登录账号密码:admin/admin




三、其它
这里附上相关部署文件
docker-compose-rabbitmq-cluster.yml
# 环境变量可参考: https://www.rabbitmq.com/configure.html
# https://github.com/rabbitmq/rabbitmq-server/blob/master/deps/rabbit/docs/rabbitmq.conf.example
# https://www.rabbitmq.com/clustering.html#erlang-cookie
version: '3'
# 网桥 -> 方便相互通讯
networks:
rabbitmq:
driver: bridge
services:
rabbitmq-1:
image: registry.cn-hangzhou.aliyuncs.com/zhengqing/rabbitmq:3.9.1-management # 镜像`rabbitmq:3.9.1-management` 【 注:该版本包含了web控制页面 】
container_name: rabbitmq-1 # 容器名为'rabbitmq-1'
hostname: my-rabbit-1
restart: unless-stopped # 指定容器退出后的重启策略为始终重启,但是不考虑在Docker守护进程启动时就已经停止了的容器
environment: # 设置环境变量,相当于docker run命令中的-e
TZ: Asia/Shanghai
LANG: en_US.UTF-8
volumes: # 数据卷挂载路径设置,将本机目录映射到容器目录
- "./rabbitmq-cluster/rabbitmq-1/config/rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf"
- "./rabbitmq-cluster/rabbitmq-1/data:/var/lib/rabbitmq"
- "./rabbitmq-cluster/plugins/rabbitmq_delayed_message_exchange-3.9.0.ez:/opt/rabbitmq/plugins/rabbitmq_delayed_message_exchange-3.9.0.ez"
- "./rabbitmq-cluster/.erlang.cookie:/var/lib/rabbitmq/.erlang.cookie"
ports: # 映射端口
- "5672:5672"
- "15672:15672"
networks:
- rabbitmq
rabbitmq-2:
image: registry.cn-hangzhou.aliyuncs.com/zhengqing/rabbitmq:3.9.1-management # 镜像`rabbitmq:3.9.1-management` 【 注:该版本包含了web控制页面 】
container_name: rabbitmq-2 # 容器名为'rabbitmq-2'
hostname: my-rabbit-2
restart: unless-stopped # 指定容器退出后的重启策略为始终重启,但是不考虑在Docker守护进程启动时就已经停止了的容器
environment: # 设置环境变量,相当于docker run命令中的-e
TZ: Asia/Shanghai
LANG: en_US.UTF-8
volumes: # 数据卷挂载路径设置,将本机目录映射到容器目录
- "./rabbitmq-cluster/rabbitmq-2/config/rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf"
- "./rabbitmq-cluster/rabbitmq-2/data:/var/lib/rabbitmq"
- "./rabbitmq-cluster/plugins/rabbitmq_delayed_message_exchange-3.9.0.ez:/opt/rabbitmq/plugins/rabbitmq_delayed_message_exchange-3.9.0.ez"
- "./rabbitmq-cluster/.erlang.cookie:/var/lib/rabbitmq/.erlang.cookie"
ports: # 映射端口
- "5673:5672"
networks:
- rabbitmq
rabbitmq.conf
# 环境变量可参考 https://www.rabbitmq.com/configure.html
default_vhost = my_vhost
default_user = admin
default_pass = admin
default_user_tags.administrator = true
default_permissions.configure = .*
default_permissions.read = .*
default_permissions.write = .*
.erlang.cookie
rabbit-cookie
init-rabbitmq.sh
#!/bin/bash
####################################
# @description 添加RabbitMQ节点到集群
# 可参考 https://www.rabbitmq.com/clustering.html#creating-ram
# @params $? => 代表上一个命令执行后的退出状态: 0->成功,1->失败
# @example => sh init-rabbitmq.sh
# @author zhengqingya
# @date 2021/11/24 14:24
####################################
# reset first node
echo "Reset first rabbitmq node."
docker exec rabbitmq-1 /bin/bash -c 'rabbitmqctl stop_app'
docker exec rabbitmq-1 /bin/bash -c 'rabbitmqctl reset'
docker exec rabbitmq-1 /bin/bash -c 'rabbitmqctl start_app'
# build cluster
echo "Starting to build rabbitmq cluster with two ram nodes."
docker exec rabbitmq-2 /bin/bash -c 'rabbitmqctl stop_app'
docker exec rabbitmq-2 /bin/bash -c 'rabbitmqctl reset'
# 参数“--ram”表示设置为内存节点,忽略此参数默认为磁盘节点
docker exec rabbitmq-2 /bin/bash -c 'rabbitmqctl join_cluster rabbit@my-rabbit-1'
# docker exec rabbitmq-2 /bin/bash -c 'rabbitmqctl join_cluster --ram rabbit@my-rabbit-1'
docker exec rabbitmq-2 /bin/bash -c 'rabbitmqctl start_app'
今日分享语句:
没有一劳永逸的开始;也没有无法拯救的结束。人生中,你需要把握的是:该开始的,要义无反顾地开始;该结束的,就干净利落地结束。
更多推荐
所有评论(0)