rabbitmq主从docker部署

127 阅读3分钟

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容器 DOCKERPATH/volumes/dataDOCKER_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 ".*" ".*" ".*"

主从配置

通过多个节点队列的镜像同步,实现高可用

  1. 集群节点rabbitmq部署

    假定两个集群节点:

    第1个节点部署机器ip为10.1.2.3,hostname设置为rabbitmq-01

    第2个节点部署机器ip为10.1.2.4,hostname设置为rabbitmq-02

    各节点安装可参考单一模式 ,不同处为:

    1. 节点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. 节点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}
      
  2. 集群设置

    在节点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
    
  3. 查看集群状态

    sudo docker exec rabbitmq-01 rabbitmqctl cluster_status