rabbitmq主从docker部署
Dockerfile
FROM centos:7.7.1908
COPY erlang-20.3.6-1.el7.centos.x86_64.rpm /home
COPY rabbitmq-release-signing-key.asc /home
COPY rabbitmq-server-3.7.5-1.el7.noarch.rpm /home
# 创建者
MAINTAINER HuiDian <www.smartdot.com.cn>
# 设置系统编码
ENV LC_ALL=en_US.UTF-8
run cd /home &&\
# 安装
yum -y install socat &&\
yum install -y erlang-20.3.6-1.el7.centos.x86_64.rpm &&\
rpm --import rabbitmq-release-signing-key.asc &&\
yum -y install rabbitmq-server-3.7.5-1.el7.noarch.rpm &&\
# 安装web插件
rabbitmq-plugins enable rabbitmq_management &&\
# 安装各种插件
# && rabbitmq-plugins list <<<'y'
# && rabbitmq-plugins enable --offline rabbitmq_mqtt rabbitmq_stomp rabbitmq_management rabbitmq_management_agent rabbitmq_federation<<<'y'
# 修改权限
chmod 400 /var/lib/rabbitmq/.erlang.cookie &&\
chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie
# 暴露端口
EXPOSE 5672
EXPOSE 15672
EXPOSE 25672
EXPOSE 4369
EXPOSE 9100
EXPOSE 9101
EXPOSE 9102
EXPOSE 9103
EXPOSE 9104
EXPOSE 9105
CMD ["rabbitmq-server"]
通过dockerfile构建镜像
vi build
#!/bin/bash
DOCKER_PATH=$PWD/../
sudo docker build -f $DOCKER_PATH/dockerfile/Dockerfile -t rabbitmq-01:v1 $DOCKER_PATH/dockerfile/
run脚本
vi run :构建并启动docker容器 DOCKER_PATH/volumes/log
#!/bin/sh
DOCKER_PATH=$PWD/../
name=rabbitmq-01
port=5672
port_web=15672
version=3.7.5
image_name=rabbitmq-01
# 构建数据卷
sudo docker volume create ${name}_data
sudo docker volume create ${name}_logs
# 查看数据卷信息
sudo docker volume inspect ${name}_logs
sudo docker volume inspect ${name}_logs
sudo docker run -d \
--name ${name} \
--hostname ${name} \
-e "RABBITMQ_LOGS=/var/log/rabbitmq/rabbit.log" \
-p ${port}:5672 \
-p ${port_web}:15672 \
-v /etc/localtime:/etc/localtime \
--mount type=volume,source=${name}_data,target=/var/lib/rabbitmq \
--mount type=volume,source=${name}_logs,target=/var/log/rabbitmq \
--restart=unless-stopped \
${image_name}:${version}
exec脚本
vi exec :进入已启动成功的docker容器
#!/bin/sh
sudo docker exec -it rabbitmq-01 /bin/bash
logs脚本
vi logs :docker容器日志 启动容器失败时,可执行查询日志
#!/bin/bash
sudo docker logs rabbitmq-01
restart
vi restart :docker容器重启
#!/bin/sh
sudo docker restart rabbitmq-01
rm
vi rm :删除docker容器
#!/bin/sh
sudo docker rm rabbitmq-01
rmi
vi rmi:删除docker镜像 dockerfile文件修改时 才需要执行
#!/bin/sh
sudo docker rmi rabbitmq:v1
start
vi start:启动docker容器
#!/bin/sh
sudo docker start rabbitmq-01
stop
vi stop:停止docker容器
#!/bin/sh
sudo docker stop rabbitmq-01
用户配置
Web管理界面访问端口为15672;缺省管理员账号密码为guest/guest,只允许从本机访问; 缺省服务端口为5672
执行./exec 进入容器内部
建立可远程访问的管理员admin,密码为123456
rabbitmqctl add_user admin 123456
rabbitmqctl set_user_tags admin administrator
rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
主从配置
通过多个节点队列的镜像同步,实现高可用
-
集群节点rabbitmq部署
假定两个集群节点:
第1个节点部署机器ip为10.1.2.3,hostname设置为rabbitmq-01
第2个节点部署机器ip为10.1.2.4,hostname设置为rabbitmq-02
各节点安装可参考单一模式 ,不同处为:
-
节点1
编辑部署脚本为:
vi /shell/run
输入以下内容
#!/bin/sh DOCKER_PATH=$PWD/../ SERVER1_IP=192.212.8.114 SERVER2_IP=192.212.8.115 NAME_NODE1=rabbitmq-01 NAME_NODE2=rabbitmq-02 PORT=5672 PORT_WEB1=15672 PORT_WEB2=25672 version=v1 # 构建数据卷 sudo docker volume create ${NAME_NODE1}_data sudo docker volume create ${NAME_NODE1}_logs # 查看数据卷信息 sudo docker volume inspect ${NAME_NODE1}_data sudo docker volume inspect ${NAME_NODE1}_logs sudo docker run -d \ --name ${NAME_NODE1} \ --hostname ${NAME_NODE1}\ --add-host ${NAME_NODE1}:${SERVER1_IP} \ --add-host ${NAME_NODE2}:${SERVER2_IP} \ -p ${PORT}:5672 \ -p ${PORT_WEB1}:15672 \ -p ${PORT_WEB2}:25672 \ -p 4369:4369 \ -p 35197:35197 \ -e "RABBITMQ_LOGS=/var/log/rabbitmq/rabbit.log" \ -v /etc/localtime:/etc/localtime \ --mount type=volume,source=${NAME_NODE1}_data,target=/var/lib/rabbitmq \ --mount type=volume,source=${NAME_NODE1}_logs,target=/var/log/rabbitmq \ --restart=unless-stopped ${NAME_NODE1}:${version}
-
节点2
编辑run脚本为:输入以下内容
#!/bin/sh DOCKER_PATH=$PWD/../ SERVER1_IP=192.212.8.114 SERVER2_IP=192.212.8.115 NAME_NODE1=rabbitmq-01 NAME_NODE2=rabbitmq-02 PORT=5672 PORT_WEB1=15672 PORT_WEB2=25672 version=v1 # 构建数据卷 sudo docker volume create ${NAME_NODE2}_data sudo docker volume create ${NAME_NODE2}_logs # 查看数据卷信息 sudo docker volume inspect ${NAME_NODE2}_data sudo docker volume inspect ${NAME_NODE2}_logs sudo docker run -d \ --name ${NAME_NODE2} \ --hostname ${NAME_NODE2}\ --add-host ${NAME_NODE1}:${SERVER1_IP} \ --add-host ${NAME_NODE2}:${SERVER2_IP} \ -p ${PORT}:5672 \ -p ${PORT_WEB1}:15672 \ -p ${PORT_WEB2}:25672 \ -p 4369:4369 \ -p 35197:35197 \ -e "RABBITMQ_LOGS=/var/log/rabbitmq/rabbit.log" \ -v /etc/localtime:/etc/localtime \ --mount type=volume,source=${NAME_NODE2}_data,target=/var/lib/rabbitmq \ --mount type=volume,source=${NAME_NODE2}_logs,target=/var/log/rabbitmq \ --restart=unless-stopped ${NAME_NODE2}:${version}
-
-
集群设置
在节点1建立管理用户 docker exec rabbitmq-01 rabbitmqctl add_user bpm bpm
sudo docker exec rabbitmq-01 rabbitmqctl add_user admin admin sudo docker exec rabbitmq-01 rabbitmqctl set_user_tags admin administrator
将节点1的./data/rabbitmq-01/.erlang.cookie复制到节点2,重启节点2
cat /var/lib/rabbitmq/.erlang.cookie
sudo docker restart rabbitmq-02
在节点2执行命令,加入集群(包含—ram参数时为内存结点,无此参数为磁盘节点)
sudo docker exec rabbitmq-02 rabbitmqctl stop_app sudo docker exec rabbitmq-02 rabbitmqctl join_cluster --ram rabbit@rabbitmq-01 sudo docker exec rabbitmq-02 rabbitmqctl start_app
-
查看集群状态
sudo docker exec rabbitmq-01 rabbitmqctl cluster_status