准备工作:
1:阿里云ecs实例一台
2:安装docker
3:下载rabbitmq镜像
1rabbitmq容器启动:
1:启动rabbitmq1容器 - 集群首节点(磁盘节点)
docker run -d --hostname rabbit1 --name wilsonmq1 -p 15672:15672 -p 5672:5672 -e RABBITMQ_ERLANG_COOKIE='wilsoncookie1992' c51d1c73d028
-d:后台启动
--hostname:指定主机名
--name:指定容器名
-p:端口映射(主机端口:容器端口)
-e:指定容器运行时传入rabbitmq参数,其中 RABBITMQ_ERLANG_COOKIE 为rabbitmq多节点之间通信所用到的cookie,rabbitmq集群就是利用这一特性实现的
最后的一串hash码 是rabbitmq镜像名
2:启动第二个rabbitmq节点 (内存节点)
docker run -d --hostname rabbit2 --name wilsonmq2 -p 15673:15672 -p 5673:5672 --link wilsonmq1:rabbit1 -e RABBITMQ_ERLANG_COOKIE='wilsoncookie1992' c51d1c73d028
其中,注意一下 -p 参数 端口的不同,以及 -e 参数 的一致,如果这里的cookie值不一致,将会导致节点之间无法通信。
--link 参数的作用是让节点2 可以链接到节点 1 容器
3:启动第三个节点 (内存节点)
docker run -d --hostname rabbit3 --name wilsonmq3 -p 15674:15672 -p 5674:5672 --link wilsonmq1:rabbit1 --link wilsonmq2:rabbit2 -e RABBITMQ_ERLANG_COOKIE='wilsoncookie1992' c51d1c73d028
同理,就不再叙述
rabbitmq集群配置:
集群配置需要进入到上述启动的实例内部,进行设置。
进入启动中的容器可以采用 docker exec 命令
1:进入主节点 rabbitmq1
docker exec -it wilsonmq1 bash
进入后分别执行以下命令
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app
exit
2:进入从节点rabbitmq2
docker exec -it wilsonmq2 bash
执行以下命令
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster --ram rabbit@rabbit1
rabbitmqctl start_app
exit
其中, join_cluster 加入集群,并指定 节点2为内存节点(不加 --ram 表示为磁盘节点)
rabbit@rabbit1 为集群名称。
同理。设置节点3即可。
docker exec -it wilsonmq3 bash
执行以下命令
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster --ram rabbit@rabbit1
rabbitmqctl start_app
exit
最后设置一下镜像队列,在任意容器节点内执行如下。
rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'
控制台:
2 3可以看到一个磁盘节点,两个内存节点
注意:生产环境请至少有两个磁盘节点,多个内存节点,防止出现唯一的磁盘节点崩溃后导致无法创建队列,交换器等。
最后:
采用docker方式部署rabbitmq集群十分简单,五分钟搞定。
网友评论