赞
踩
内核版本在3.10以上,三台机器的IP地址为 10.10.10.1 、10.10.10.2 、10.10.10.3
- 10.10.10.1 dockerrabbitmqhostname1 rabbit1
- 10.10.10.2 dockerrabbitmqhostname2 rabbit2
- 10.10.10.3 dockerrabbitmqhostname3 rabbit3
配置hosts命令
sudo vim hosts
配置完hosts需要重启网络
/etc/init.d/network restart
创建该目录用途是做docker中rabbitmq目录映射
/app/rabbitmq
需要在3台linux上都运行,注意 --name 和 --hostname两个需要修改成对应内容,参照二中配置的hosts
命令运行期间需要输入 y 并继续,如果有出现失败很有可能是网络原因,继续尝试即可,如有必要需删除创建失败的容器。
sudo docker run -d --net host --name rabbit1 --hostname dockerrabbitmqhostname1 --log-opt max-size=100m --log-opt max-file=1000 -v /app/rabbitmq:/var/lib/rabbitmq -v /app/rabbitmq/rabbitmq:/etc/rabbitmq -e RABBITMQ_DEFAULT_USER=jiaogg -e RABBITMQ_DEFAULT_PASS=jiaogg123 -e RABBITMQ_ERLANG_COOKIE='rabbitcookietest' rabbitmq:3.8.9-management
命令讲解:
-d :后台运行rabbitmq
--net :详见docker的4种网络模式
--name :容器的名字
--hostname :配置的本机的host的名字
--log-opt max-size=100m :日志大小分隔限制
--log-opt max-file=1000 :保留1000个日志文件
-v /app/rabbitmq:/var/lib/rabbitmq -v /app/rabbitmq/rabbitmq:/etc/rabbitmq :docker中rabbitmq的文件映射到物理机
-e RABBITMQ_DEFAULT_USER=jiaogg -e RABBITMQ_DEFAULT_PASS=jiaogg123 :指定rabbitmq服务的登陆用户名和密码
-e RABBITMQ_ERLANG_COOKIE='rabbitcookietest' :指定集群通信的cookie,此cookie配置3台机器必须一模一样
rabbitmq:3.8.9-management :使用的rabbitmq的版本
命令运行成功后执行如下命令查看容器列表
- docker ps
- 或者
- docker ps -a
-a 可以查看所有的正在运行和没有运行的镜像列表
通过docker ps -a 命令可以看到如下列表
关键列信息讲解:
CONTAINER ID :镜像id(比较重要)
IMAGE : 镜像信息
CREATED :创建时长
STATUS : 运行状态和时长
PORTS :端口号
NAMES :镜像名字(比较重要)
需要在3台都运行已下命令,注意容器ID,一行一行命令执行
- docker exec -it 容器id /bin/bash
-
- rabbitmq-plugins enable rabbitmq_management
-
- 以上开启管理后台插件之后需要通过管理页面创建一个叫 push 的vhost
-
- rabbitmqctl set_policy mirroredpolicy "push.queue$" '{"ha-mode":"all","ha-sync-mode":"automatic"}' --apply-to queues
- rabbitmqctl set_policy mirroredpolicy "push.exchange$" '{"ha-mode":"all","ha-sync-mode":"automatic"}' --apply-to exchanges
-
- rabbitmqctl set_policy -p push mirroredpolicy "push.queue$" '{"ha-mode":"all","ha-sync-mode":"automatic"}' --apply-to queues
- rabbitmqctl set_policy -p push mirroredpolicy "push.exchange$" '{"ha-mode":"all","ha-sync-mode":"automatic"}' --apply-to exchanges
-
- exit
命令讲解:
docker exec -it 容器id /bin/bash :进入某个ID的容器
rabbitmq-plugins enable rabbitmq_management : 开启管理后台插件
rabbitmqctl set_policy mirroredpolicy "push.queue$" '{"ha-mode":"all","ha-sync-mode":"automatic"}' --apply-to queues :配置 默认的vhost:“/”中的以“push.queue”结尾的队列为镜像队列
rabbitmqctl set_policy mirroredpolicy "push.exchanges$" '{"ha-mode":"all","ha-sync-mode":"automatic"}' --apply-to exchanges :配置 默认的vhost:“/”中的以“push.exchanges”结尾的交换机为镜像交换机(可不指定交换机为镜像)
rabbitmqctl set_policy -p push mirroredpolicy "push.queue$" '{"ha-mode":"all","ha-sync-mode":"automatic"}' --apply-to queues:配置 自己创建的vhost:“push”中的以“push.queue”结尾的队列为镜像队列
rabbitmqctl set_policy -p push mirroredpolicy "push.exchange$" '{"ha-mode":"all","ha-sync-mode":"automatic"}' --apply-to exchanges:配置 自己创建的vhost:“push”中的以“push.exchanges”结尾的交换机为镜像交换机(可不指定交换机为镜像)
"ha-sync-mode":"automatic" 当集群中某台down掉了,会自动同步该台的数据,否则需要手动resync
exit : 退出容器
注:
如果要配置所有的队列皆为镜像队列则使用如下命令
- docker exec -it 容器id /bin/bash
-
- rabbitmq-plugins enable rabbitmq_management
-
- 以上开启管理后台插件之后需要通过管理页面创建一个叫 push 的vhost
-
- rabbitmqctl set_policy mirroredpolicy "^" '{"ha-mode":"all","ha-sync-mode":"automatic"}' --apply-to queues
- rabbitmqctl set_policy mirroredpolicy "^" '{"ha-mode":"all","ha-sync-mode":"automatic"}' --apply-to exchanges
-
- rabbitmqctl set_policy -p push mirroredpolicy "^" '{"ha-mode":"all","ha-sync-mode":"automatic"}' --apply-to queues
- rabbitmqctl set_policy -p push mirroredpolicy "^" '{"ha-mode":"all","ha-sync-mode":"automatic"}' --apply-to exchanges
-
- exit
在10.10.10.2机器上执行如下命令
- sudo docker exec -it rabbit2 /bin/bash
- rabbitmqctl stop_app
- rabbitmqctl join_cluster rabbit@dockerrabbitmqhostnameM1
- rabbitmqctl start_app
- exit
在10.10.10.3机器上执行如下命令
- sudo docker exec -it rabbit3 /bin/bash
- rabbitmqctl stop_app
- rabbitmqctl join_cluster rabbit@dockerrabbitmqhostnameM1
- rabbitmqctl start_app
- exit
该集群中机器全部是磁盘节点,如需创建内存节点可以使用如下命令
rabbitmqctl join_cluster --ram rabbit@dockerrabbitmqhostnameM1
由于三台机器都开启了管理后台插件,所以三台机器都登陆,用户名:jiaogg、密码:jiaogg123,URL:10.10.10.1:17652、10.10.10.2:17652、10.10.10.3:17652
在其中一台机器上创建交换机和队列之后可以在其他两台机器的管理页面上也可以看到创建的交换机和队列
在其中一台机器上发送消息后,在其他两台机器上都可以收到消息
先用命令 docker ps -a 查看节点信息(CONTAINER ID 和 NAMES)
docker exec -it 节点id或者name /bin/bash 进入容器
rabbitmqctl cluster_status
rabbitmqctl -n 集群id或者名字 forget_cluster_node 被踢出的节点id或者名字
rabbitmqctl stop_app
删除前需要停止节点服务
docker rm 节点id或者名字
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。