rabbitmq master-slave docker deployment
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
-
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:
-
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}
-
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}
-
-
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
-
View cluster status
sudo docker exec rabbitmq-01 rabbitmqctl cluster_status