centos7 docker 部署rabbitmq集群
1>拉取ra'bbitmq
docker pull rabbitmq:3.6.15-management
2>创建rabbitmq
mkdir rabbitmq
3>创建3个mq运行容器
docker run -d --hostname rabbit1 --name myrabbit1 --log-opt max-size=10m --log-opt max-file=3 -v /docker/rabbitmq/myrabbit1:/var/lib/rabbitmq -p 15672:15672 -p 5672:5672 -e RABBITMQ_ERLANG_COOKIE='rabbitcookie' rabbitmq:3.6.15-management
docker run -d --hostname rabbit2 --name myrabbit2 --log-opt max-size=10m --log-opt max-file=3 -v /docker/rabbitmq/myrabbit2:/var/lib/rabbitmq -p 5673:5672 --link myrabbit1:rabbit1 -e RABBITMQ_ERLANG_COOKIE='rabbitcookie' rabbitmq:3.6.15-management
docker run -d --hostname rabbit3 --name myrabbit3 --log-opt max-size=10m --log-opt max-file=3 -v /docker/rabbitmq/myrabbit3:/var/lib/rabbitmq -p 5674:5672 --link myrabbit1:rabbit1 --link myrabbit2:rabbit2 -e RABBITMQ_ERLANG_COOKIE='rabbitcookie' rabbitmq:3.6.15-management
注释:
-d
#容器后台运行
--hostname rabbit1
#容器的主机名为 rabbit1,容器内部的hostname
--name rabbit1
#容器名为rabbit39,在宿主机上运行“docker ps”命令时显示的名称
--log-opt max-size=10m
#日志文件单个最大10M
--log-opt max-file=3
#日志文件最多保留3个
-v /data/rabbitmq:/var/lib/rabbitmq:z
#将宿主机目录/data/rabbitmq挂载到容器的/var/lib/rabbitmq目录。z是一个标记,在selinux环境下使用。
-v /opt/rabbitmq/hosts:/etc/hosts
#略
-e RABBITMQ_DEFAULT_USER=user01
#设置rabbitmq默认用户为user01
-e RABBITMQ_DEFAULT_PASS=password01
#设置rabbitmq默认密码为password01
-e RABBITMQ_ERLANG_COOKIE='secret cookie here'
#设置rabbitmq的cookie为“secret cookie here”,可以自定义为其他文本,三个容器保持一致即可。
reg.onlymin.com/public/rabbitmq:3.6.15-management
#使用reg.onlymin.com/public/rabbitmq:3.6.15-management这个镜像
4>集群
docker exec myrabbit1 bash -c "rabbitmqctl stop_app && rabbitmqctl reset && rabbitmqctl start_app && rabbitmqctl cluster_status"
docker exec myrabbit2 bash -c "rabbitmqctl stop_app && rabbitmqctl reset && rabbitmqctl join_cluster --ram rabbit@rabbit1 && rabbitmqctl start_app"
docker exec myrabbit3 bash -c "rabbitmqctl stop_app && rabbitmqctl reset && rabbitmqctl join_cluster --ram rabbit@rabbit1 && rabbitmqctl start_app"
5>访问:http://服务器IP:15672,记得开放端口156722
6>进入rabbitmq重新设置登录名和密码
docker exec -it myrabbit1 bash
rabbitmqctl add_user 账号名 账号密码
rabbitmqctl set_user_tags hycore administrator //设置为管理员
rabbitmqctl delete_user guest //删除默认的guest账号
rabbitmqctl set_permissions -p / admin ".*" ".*" ".*" //赋予virtual host的权限
7>镜像队列是基于普通的集群模式的,所以你还是得先配置普通集群,然后才能设置镜像队列,我们就以上面的集群接着做。
我是通过上面开启的网页的管理端来设置的镜像队列,也可以通过命令,
《1》这里先说其中的网页设置方式:
1、点击admin菜单–>右侧的Policies选项–>左侧最下下边的Add/update a policy。
2、按照图中的内容根据自己的需求填写。
3、点击Add policy添加策略。
《2》在任意一个节点上执行:
1 root@live-mq-01:~# rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'
添加队列测试是否有复制了镜像到其他节点上
docker exec -it rabbit2 /bin/bash rabbitmqctl stop
#在一个正常的节点上移除有问题的节点
rabbitmqctl -n rabbit@rabbit1 forget_cluster_node rabbit@rabbit2