docker搭建rabbit集群

1.去rabbitMQ官网拉去images

我当前使用的是最新版本的镜像:rabbitmq:3.12-management

2.创建一个集群专用网络

docker的容器相互隔离是不可通信的,我们自行创建一个网络后,创建容器时 给他们放在一起,就可以通信了。

shell 复制代码
docker network create rabbit-net  --driver bridge

我们的网卡名称为:rabbit-net

3.构建出三个实例

我们在做容器时候:run后面参数依次简单说明一下

-name 镜像名称

--hostname 修改主机名

-v 做了宿主机与容器文件映射

-p 做了端口通信

--network 把这几个节点放到同一个网卡上

-d 让容器后台执行

选择镜像版本号

node01
shell 复制代码
docker run --name rabbit01 --hostname=node01  \
-v /mydata/rabbitMQ/node01:/var/lib/rabbitmq  \
-p 5672:5672  \
-p 15672:15672  \
--network rabbit-net  \
-d  \
rabbitmq:3.12-management
node02
shell 复制代码
docker run --name rabbit02 --hostname=node02  \
-v /mydata/rabbitMQ/node02:/var/lib/rabbitmq  \
-p 5673:5672  \
-p 15673:15672  \
--network rabbit-net  \
-d  \
rabbitmq:3.12-management
node03
shell 复制代码
docker run --name rabbit03 --hostname=node03  \
-v /mydata/rabbitMQ/node03:/var/lib/rabbitmq  \
-p 5674:5672  \
-p 15674:15672  \
--network rabbit-net  \
-d  \
rabbitmq:3.12-management

4.修改各个容器的cookie

CLI如何验证节点:Erlang Cookie

RabbitMQ节点和 CLI 工具(例如rabbitmqctl)使用cookie来确定是否允许它们相互通信。

为了使两个节点能够通信,它们必须具有相同的共享密钥,称为 Erlang cookie。cookie 只是一串最多 255 个字符的字母数字字符。

每个集群节点都必须有相同的cookie。

下面将统一使用node01的cookie,以保证每个节点有相同的cookie。

shell 复制代码
[root@localhost node01]# cat .erlang.cookie 
QLPBURUFDGAORQHBQXIB
[root@localhost node02]# cat .erlang.cookie 
UJJVRAMWCGUDWFMUVZSK
[root@localhost node03]# cat .erlang.cookie 
QRMWUHLBULEHAYJNKPXZ

Node01的cookie:QLPBURUFDGAORQHBQXIB

把rabbit01容器中的/var/lib/rabbitmq/.erlang.cookie复制给rabbit02 rabbit03

由于我们已经做了宿主机与容器的文件映射,这里直接从宿主机网rabbit02 rabbit03即可

shell 复制代码
[root@localhost]# docker cp /mydata/rabbitMQ/node01/.erlang.cookie  rabbit02:/var/lib/rabbitmq/
Preparing to copy...
Copying to container - 2.048kB
Successfully copied 2.048kB to rabbit02:/var/lib/rabbitmq/
[root@localhost]# docker cp /mydata/rabbitMQ/node01/.erlang.cookie  rabbit03:/var/lib/rabbitmq/
Preparing to copy...
Copying to container - 2.048kB
Successfully copied 2.048kB to rabbit03:/var/lib/rabbitmq/

分别在宿主机node02 node03查看cookie文件

shell 复制代码
[root@localhost node02]# cat .erlang.cookie 
QLPBURUFDGAORQHBQXIB[root@localhost node02]# 
[root@localhost node03]# cat .erlang.cookie 
QLPBURUFDGAORQHBQXIB[root@localhost node03]# 

Node02 node03都变成了:QLPBURUFDGAORQHBQXIB

给node02 node03 节点重启 是他们cookie生效

shell 复制代码
[root@localhost]# docker restart rabbit02
rabbit02
[root@localhost]# docker restart rabbit03
rabbit03

5.容器相互挂接

rabbit01 - < rabbit02 -< rabbit03

我们这里 让rabbit01当做主节点 rabbit02挂到rabbit01上 rabbit03挂到rabbit02上

rabbit01操作步骤:

1.进入容器(docker exec -it rabbit01 bash)

2.只关闭rabbitmq服务(rabbitmqctl stop_app)(rabbitmqctl stop 会将 Erlang 虚拟机关闭,rabbitmqctl stop_app只关闭RabbitMQ 服务)

3.重置这个节点(rabbitmqctl reset)

4.启动服务(rabbitmqctl start_app)

  1. exit
shell 复制代码
[root@localhost]# docker exec -it rabbit01 bash
root@node01:/# rabbitmqctl stop_app
Stopping rabbit application on node rabbit@node01 ...
root@node01:/# rabbitmqctl reset
Resetting node rabbit@node01 ...
root@node01:/# rabbitmqctl start_app
Starting node rabbit@node01 ...
root@node01:/# exit
exit
rabbit02操作步骤:

1.进入容器(docker exec -it rabbit02 bash)

2.只关闭rabbitmq服务(rabbitmqctl stop_app)(rabbitmqctl stop 会将 Erlang 虚拟机关闭,rabbitmqctl stop_app只关闭RabbitMQ 服务)

3.重置这个节点(rabbitmqctl reset)

4.加入节点rabbit01(rabbitmqctl join_cluster rabbit@node01)

5.启动服务(rabbitmqctl start_app)

  1. exit
shell 复制代码
[root@localhost rabbitMQ]# docker exec -it rabbit02 bash
root@node02:/# rabbitmqctl stop_app
Stopping rabbit application on node rabbit@node02 ...
root@node02:/# rabbitmqctl reset
Resetting node rabbit@node02 ...
root@node02:/# rabbitmqctl join_cluster rabbit@node01
Clustering node rabbit@node02 with rabbit@node01
root@node02:/# rabbitmqctl start_app
Starting node rabbit@node02 ...
root@node02:/# exit
exit
rabbit03步骤:

1.进入容器(docker exec -it rabbit03 bash)

2.只关闭rabbitmq服务(rabbitmqctl stop_app)(rabbitmqctl stop 会将 Erlang 虚拟机关闭,rabbitmqctl stop_app只关闭RabbitMQ 服务)

3.重置这个节点(rabbitmqctl reset)

4.加入节点rabbit02(rabbitmqctl join_cluster rabbit@node02)

5.启动服务(rabbitmqctl start_app)

  1. exit
shell 复制代码
[root@localhost]# docker exec -it rabbit03 bash
root@node03:/# rabbitmqctl stop_app
Stopping rabbit application on node rabbit@node03 ...
root@node03:/# rabbitmqctl reset
Resetting node rabbit@node03 ...
root@node03:/# rabbitmqctl join_cluster rabbit@node02
Clustering node rabbit@node03 with rabbit@node02
root@node03:/# rabbitmqctl start_app
Starting node rabbit@node03 ...
root@node03:/# exit
exit

至此,我们操作完成了 然后随便登录一个节点 看看我们的成果!



拓展 用户账号和权限

默认账号密码: guest guest

//进入容器

shell 复制代码
docker exec -it rabbitmq bash rabbit01

查看babbitmq用户:

shell 复制代码
rabbitmqctl list_users

添加用户

shell 复制代码
rabbitmqctl add_user admin admin

设置用户角色

shell 复制代码
rabbitmqctl set_user_tags admin administrator

设置用户权限

shell 复制代码
rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*"
相关推荐
可可嘻嘻大老虎1 小时前
nginx无法访问后端服务问题
运维·nginx
阳光九叶草LXGZXJ2 小时前
达梦数据库-学习-47-DmDrs控制台命令(LSN、启停、装载)
linux·运维·数据库·sql·学习
无忧智库2 小时前
某市“十五五“地下综合管廊智能化运维管理平台建设全案解析:从数字孪生到信创适配的深度实践(WORD)
运维·智慧城市
lightningyang3 小时前
DVWA 在 openEuler 系统的安装部署
docker·渗透测试·openeuler·dvwa·天枢一体化虚拟仿真靶场平台
珠海西格3 小时前
“主动预防” vs “事后补救”:分布式光伏防逆流技术的代际革命,西格电力给出标准答案
大数据·运维·服务器·分布式·云计算·能源
阿波罗尼亚3 小时前
Kubectl 命令记录
linux·运维·服务器
IDC02_FEIYA3 小时前
Linux文件搜索命令有哪些?Linux常用命令之文件搜索命令find详解
linux·运维·服务器
犀思云4 小时前
如何通过网络即服务平台实现企业数字化转型?
运维·网络·人工智能·系统架构·机器人
江畔何人初4 小时前
kubectl apply与kubectl create的区别
linux·运维·云原生
M158227690554 小时前
四通道全能组网!SG-Canet-410 CAN转以太网网关,破解工业CAN通信瓶颈
linux·运维·服务器