使用docker容器对RabbitMQ单机部署集群,要求一主二从

一、创建容器并建立连接

主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

猜你喜欢

转载自blog.csdn.net/Wannabe_hacker/article/details/129929955