rabbitmq master-slave docker deployment

rabbitmq master-slave docker deployment

Insert image description here

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"]

Build image through dockerfile

vi build

#!/bin/bash
DOCKER_PATH=$PWD/../
sudo docker build -f $DOCKER_PATH/dockerfile/Dockerfile  -t rabbitmq-01:v1 $DOCKER_PATH/dockerfile/

run script

vi run: Build and start the docker container
$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 script

vi exec: Enter the docker container that has been successfully started

#!/bin/sh
sudo docker exec -it rabbitmq-01 /bin/bash

logs script

vi logs: Docker container log When starting the container fails, you can execute the query log

#!/bin/bash
sudo docker logs rabbitmq-01

restart

vi restart: docker container restart

#!/bin/sh
sudo docker restart rabbitmq-01

rm

vi rm: delete docker container

#!/bin/sh
sudo docker rm rabbitmq-01

rmi

vi rmi: Delete the docker image and it needs to be executed only when the dockerfile file is modified.

#!/bin/sh
sudo docker rmi rabbitmq:v1

start

vi start: start docker container

#!/bin/sh
sudo docker start  rabbitmq-01

stop

vi stop: stop docker container

#!/bin/sh
sudo docker stop rabbitmq-01

User configuration

The access port for the web management interface is 15672; the default administrator account and password are guest/guest, and access is only allowed from the local machine; the default service port is 5672

Execute ./exec to enter the container

Create an administrator admin with remote access, the password is 123456

rabbitmqctl add_user admin 123456
rabbitmqctl set_user_tags admin administrator
rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"

Master-slave configuration

Achieve high availability through mirror synchronization of multiple node queues

  1. Cluster node rabbitmq deployment

    Assume two cluster nodes:

    The first node deployment machine IP is 10.1.2.3, and the hostname is set to rabbitmq-01

    The second node deployment machine IP is 10.1.2.4, and the hostname is set to rabbitmq-02

    You can refer to the single mode for installation of each node . The differences are:

    1. Node 1

      Edit the deployment script as:

      vi /shell/run
      

      Enter the following

      #!/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. Node 2

      Edit the run script as: Enter the following content

      #!/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. Cluster settings

    Create a management user on node 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
    

    Copy ./data/rabbitmq-01/.erlang.cookie of node 1 to node 2, and restart node 2

    cat /var/lib/rabbitmq/.erlang.cookie

    sudo docker restart rabbitmq-02
    

    Execute the command on node 2 and join the cluster (when the -ram parameter is included, it is a memory node, without this parameter it is a disk node)

    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. View cluster status

    sudo docker exec rabbitmq-01 rabbitmqctl cluster_status
    

Supongo que te gusta

Origin blog.csdn.net/qq_44961149/article/details/121116406
Recomendado
Clasificación