一、创建容器并建立连接
主myrabbit1:
docker run -d --hostname rabbit1 --name myrabbit1 -e RABBITMQ_ERLANG_COOKIE='rabbitcookie' -p 15672:15672 -p 5672:5672 rabbitmq:3.11-management
从myrabbit2要连接myrabbit1:
docker run -d --hostname rabbit2 --name myrabbit2 -p 15673:15672 -p 5673:5672 --link myrabbit1:rabbit1 -e RABBITMQ_ERLANG_COOKIE='rabbitcookie' rabbitmq:3.11-management
从mytabbit3要连接myrabbit1和myrabbit2:
docker run -d --hostname rabbit3 --name myrabbit3 -p 15674:15672 -p 5674:5672 --link myrabbit1:rabbit1 --link myrabbit2:rabbit2 -e RABBITMQ_ERLANG_COOKIE='rabbitcookie' rabbitmq:3.11-management
查看是否部署成功:
二、进入容器配置集群
先进入容器1,将容器重置:
docker exec -it myrabbit1 bash
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app
exit
同样的方式再去配置2和3,但是2和3要加入1的集群,以1为主节点,23为从节点:
docker exec -it myrabbit2 bash
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster --ram rabbit@rabbit1
rabbitmqctl start_app
exit
参数“–ram”表示设置为内存节点,忽略此参数默认为磁盘节点。
docker exec -it myrabbit3 bash
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster --ram rabbit@rabbit1
rabbitmqctl start_app
exit
都配置好了以后可以再去rabbit1中看一下是否形成集群:
docker exec -it myrabbit1 bash
rabbitmqctl cluster_status
exit
可以看到结果是:
xzd@xzd-virtual-machine:~$ docker exec -it myrabbit1 bash
root@rabbit1:/# rabbitmqctl cluster_status
Cluster status of node rabbit@rabbit1 ...
Basics
Cluster name: rabbit@rabbit1
Total CPU cores available cluster-wide: 4
Disk Nodes
rabbit@rabbit1
RAM Nodes
rabbit@rabbit2
rabbit@rabbit3
Running Nodes
rabbit@rabbit1
rabbit@rabbit2
rabbit@rabbit3
Versions
rabbit@rabbit1: RabbitMQ 3.11.11 on Erlang 25.3
rabbit@rabbit2: on Erlang
rabbit@rabbit3: on Erlang
CPU Cores
Node: rabbit@rabbit1, available CPU cores: 4
Node: rabbit@rabbit2, available CPU cores: 0
Node: rabbit@rabbit3, available CPU cores: 0
Maintenance status
Node: rabbit@rabbit1, status: not under maintenance
Node: rabbit@rabbit2, status: unknown
Node: rabbit@rabbit3, status: unknown
Alarms
(none)
Network Partitions
(none)
Listeners
Node: rabbit@rabbit1, interface: [::], port: 15672, protocol: http, purpose: HTTP API
Node: rabbit@rabbit1, interface: [::], port: 15692, protocol: http/prometheus, purpose: Prometheus exporter API over HTTP
Node: rabbit@rabbit1, interface: [::], port: 25672, protocol: clustering, purpose: inter-node and CLI tool communication
Node: rabbit@rabbit1, interface: [::], port: 5672, protocol: amqp, purpose: AMQP 0-9-1 and AMQP 1.0
Feature flags
Flag: classic_mirrored_queue_version, state: enabled
Flag: classic_queue_type_delivery_support, state: enabled
Flag: direct_exchange_routing_v2, state: enabled
Flag: drop_unroutable_metric, state: enabled
Flag: empty_basic_get_metric, state: enabled
Flag: feature_flags_v2, state: enabled
Flag: implicit_default_bindings, state: enabled
Flag: listener_records_in_ets, state: enabled
Flag: maintenance_mode_status, state: enabled
Flag: quorum_queue, state: enabled
Flag: stream_queue, state: enabled
Flag: stream_single_active_consumer, state: enabled
Flag: tracking_records_in_ets, state: enabled
Flag: user_limits, state: enabled
Flag: virtual_host_metadata, state: enabled
说明已经完成了集群部署!
我们也可以进入到RabbitMQ可视化界面查看一下:
找到IP地址:http://192.168.235.132:15672/#/
用户名:guest 密码:guest
进入可以查看已经形成了集群
三、【额外】设置一下管理员账号
设置管理员账号目的是设置一个可以获取全部权限。
如果是完成第二步后,下面任意一个机子部署就好了,所有都能设置上去。
docker exec -it myrabbit1 bash
rabbitmqctl add_user admin admin
rabbitmqctl set_user_tags admin administrator
rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
exit
docker exec -it myrabbit2 bash
rabbitmqctl add_user admin admin
rabbitmqctl set_user_tags admin administrator
rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
exit
docker exec -it myrabbit3 bash
rabbitmqctl add_user admin admin
rabbitmqctl set_user_tags admin administrator
rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
exit