文章目录
Docker - 搭建rabbitmq 集群
1、首先,拉取rabbitmq 的镜像
我们以3.8.2 版本为例
docker pull rabbitmq:3.8.2-management
2、然后运行3个rabbitmq 的实例
# 运行镜像,集群模式
docker run \
--name rabbitmq-1 \
--hostname=rabbitmq-1 \
--restart=always \
-d \
-e RABBITMQ_DEFAULT_USER=rabbitmq \
-e RABBITMQ_DEFAULT_PASS=OnlinezuozuoCreated.rabbitmq.test.password \
-e RABBITMQ_ERLANG_COOKIE='oNYE40jp2YbuXfWKd9vFu1VZiic8' \
-v /etc/docker/volume/rabbitmqcluster/rabbitmq-1:/var/lib/rabbitmq \
-p 52001:5672 \
-p 52002:15672 \
rabbitmq:3.8.2-management
docker run \
--name rabbitmq-2 \
--hostname=rabbitmq-2 \
--restart=always \
--link rabbitmq-1:rabbitmq-1 \
-d \
-e RABBITMQ_DEFAULT_USER=rabbitmq \
-e RABBITMQ_DEFAULT_PASS=OnlinezuozuoCreated.rabbitmq.test.password \
-e RABBITMQ_ERLANG_COOKIE='oNYE40jp2YbuXfWKd9vFu1VZiic8' \
-v /etc/docker/volume/rabbitmqcluster/rabbitmq-2:/var/lib/rabbitmq \
-p 52301:5672 \
-p 52302:15672 \
rabbitmq:3.8.2-management
docker run \
--name rabbitmq-3 \
--hostname=rabbitmq-3 \
--restart=always \
--link rabbitmq-1:rabbitmq-1 \
--link rabbitmq-2:rabbitmq-2 \
-d \
-e RABBITMQ_DEFAULT_USER=rabbitmq \
-e RABBITMQ_DEFAULT_PASS=OnlinezuozuoCreated.rabbitmq.test.password \
-e RABBITMQ_ERLANG_COOKIE='oNYE40jp2YbuXfWKd9vFu1VZiic8' \
-v /etc/docker/volume/rabbitmqcluster/rabbitmq-3:/var/lib/rabbitmq \
-p 52501:5672 \
-p 52502:15672 \
rabbitmq:3.8.2-management
RABBITMQ_ERLANG_COOKIE
是rabbitmq 集群的通信字符串,用于进行集群连接,所以必须都保持一致
--link rabbitmq-1:rabbitmq-1 \
我们通过把2号3号实例进行连接,让他们能够进行通讯
3、然后我们构建集群,并同步时区
进入一号实例,并一个一个的执行如下命令
docker exec -it rabbitmq-1 bash
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime &&
echo "Asia/Shanghai" >/etc/timezone
date "+%Y-%m-%d %H:%M:%S" ## 显示设置后,新的系统时间
exit
进入二号实例,并一个一个的执行如下命令
docker exec -it rabbitmq-2 bash
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster --ram rabbit@rabbitmq-1
rabbitmqctl start_app
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime &&
echo "Asia/Shanghai" >/etc/timezone
date "+%Y-%m-%d %H:%M:%S" ## 显示设置后,新的系统时间
exit
进入三号实例,并一个一个的执行如下命令
docker exec -it rabbitmq-3 bash
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster --ram rabbit@rabbitmq-1
rabbitmqctl start_app
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime &&
echo "Asia/Shanghai" >/etc/timezone
date "+%Y-%m-%d %H:%M:%S" ## 显示设置后,新的系统时间
exit
4、如何删除容器
如果遇到启动失败,或者端口占用等,我们可以停止容器并删除容器,进行重新生成
docker container stop rabbitmq-1
docker container rm rabbitmq-1
docker container stop rabbitmq-2
docker container rm rabbitmq-2
docker container stop rabbitmq-3
docker container rm rabbitmq-3
5、打开防火墙,或者端口控制器进行端口放行,检测运行状态
通过访问
http://localhost:52101/
http://localhost:52301/
http://localhost:52501/
验证是否可以正常登陆,帐号为上面的脚本中定义的帐号和密码
并查看集群状态是否良好。
6、通过nginx 做负载均衡
nginx 增加管理页面的负载均衡
upstream rabbitmq {
server localhost:52002 weight=1 max_fails=2 fail_timeout=10s;
server localhost:52302 weight=1 max_fails=2 fail_timeout=10s;
server localhost:52502 weight=1 max_fails=2 fail_timeout=10s;
}
location /
{
proxy_pass http://rabbitmq;
proxy_set_header Host rabbitmq;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header REMOTE-HOST $remote_addr;
add_header X-Cache $upstream_cache_status;
#Set Nginx Cache
add_header Cache-Control no-cache;
expires 12h;
}
这样,我们就可以通过nginx 的反向代理,进行访问控制台的负载均衡访问了
nginx 增加连接端口的负载均衡
stream{
upstream rabbitmq {
server localhost:52001 weight=1 max_fails=2 fail_timeout=10s;
server localhost:52301 weight=1 max_fails=2 fail_timeout=10s;
server localhost:52501 weight=1 max_fails=2 fail_timeout=10s;
}
server{
listen 52701;
proxy_connect_timeout 20s;
proxy_pass rabbitmq;
}
}
这样,我们就可以通过nginx 的反向代理,进行数据连接的负载均衡访问了
来源:CSDN
作者:简简单单OnlineZuozuo
链接:https://blog.csdn.net/qq_15071263/article/details/104538722