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通过dockerfile构建镜像# 设置系统编码 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"]
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/data
$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



