在阿里云上的docker使用haproxy对rabbitmq集群进行负载均衡

在阿里云上的docker使用haproxy对rabbitmq集群进行负载均衡

安装rabbitmq

docker pull rabbitmq

等待自动安装结束,查看镜像

docker images

如图所示,我之前装了两个镜像,建议使用TAG为3-management的镜像,这样方便在web监控界面操作

rabbitmq集群的的设置如下

docker run -d --hostname rabbitmq1 --name rabbit1 -p 5673:5672 -p 15673:15672 -e RABBITMQ_ERLANG_COOKIE='rabbitcookie' rabbitmq:3-management
docker run -d --hostname rabbitmq2 --name rabbit2 -p 5674:5672 -p 15674:15672 -e RABBITMQ_ERLANG_COOKIE='rabbitcookie' --link rabbit1:my-rabbit1 rabbitmq:3-management
docker run -d --hostname rabbitmq3 --name rabbit3 -p 5675:5672 -p 15675:15672 -e RABBITMQ_ERLANG_COOKIE='rabbitcookie' --link rabbit1:my-rabbit1 --link rabbit2:my-rabbit2 rabbitmq:3-management

注意这里的端口映射,集群的三个节点端口为5673,5674,5675,web监控页面的端口为15673,15674,15675,RABBITMQ_ERLANG_COOKIE要保证一致才能让三个节点互通

然后开始配置集群
顺序如下
节点1:

docker exec -it rabbit1 bash
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app
exit

节点2:

docker exec -it rabbit2 bash
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster --ram rabbit@rabbitmq1
rabbitmqctl start_app
exit

节点3:

docker exec -it rabbit3 bash
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster --ram rabbit@rabbitmq1
rabbitmqctl start_app
exit

注意第一个节点和后续节点的配置不完全相同

然后配置镜像队列

docker exec -it rabbit1 bash
rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'
exi

接下来可以检查一下rabbitmq的三个节点是否启动完成

主机ip:15673
主机ip:15674
主机ip:15675

在这里插入图片描述
在这里插入图片描述
这就说明集群配置完成了,如果你的web页面打不开,可以尝试使用如下配置,三个节点都配置好后一般是可以正常显示的,前面也提到使用management版本的rabbitmq通常不会遇到这种问题

docker exec -it rabbit1 bash
rabbitmq-plugins enable rabbitmq_management
exit

安装haproxy

同样使用docker下载好镜像

docker pull haproxy


这个时候我们现在本机的home/haproxy目录下创建一个haproxy.cfg的配置文件(别的目录也行,本次的简单测试只保留haproxy.cfg这个文件就行)

vim /home/haproxy/haproxy.cfg 
global
  #日志
  log 127.0.0.1 local0 info
  maxconn 10240
  daemon

defaults
  log global
  mode http
  timeout connect 3000  #连接超时
  timeout client 3000	#客户端超时
  timeout server 3000	#服务器超时
  timeout check 2000	#心跳检测超时

listen http_front #haproxy的监控页面
  bind 0.0.0.0:8081#这个端口似乎也要开放防火墙
  #firewall-cmd --zone=public --add-port=8081/tcp --permanent
  #如果使用云服务器,最好也配置一下出入规则 
  mode http
  option httplog
  stats uri /hp
  stats refresh 5s
  stats enable
  stats auth admin:123456
  
listen rabbitmq_admin#rabbit的监控页面
    bind    0.0.0.0:8082
    server  rabbit_admin1 10.10.10.10:15673
    server  rabbit_admin2 10.10.10.10:15674
    server  rabbit_admin3 10.10.10.10:15675

listen haproxy #这里配置集群负载均衡
  bind 0.0.0.0:5666 #对外提供的端口,访问这个端口就会根据配置的规则对集群下的节点进行相应的负载均衡
  option tcplog
  mode tcp
  balance roundrobin #这是轮询算法,如有需要可以换成其他
  #每次换一个节点进行使用
  server rabbit1 10.10.10.10:5673 check inter 5000 rise 2 fall 2
  server rabbit2 10.10.10.10:5674 check inter 5000 rise 2 fall 2
  server rabbit3 10.10.10.10:5675 check inter 5000 rise 2 fall 2

保存后使用docker运行
建议先建立

/usr/local/etc/haproxy

这个目录
然后

docker run -d --name haproxy-rabbitmq -p 8081:8081 -p 5666:5666 -p 8082:8082 -v /home/haproxy:/usr/local/etc/haproxy:ro haproxy:latest

接着通过

10.10.10.10:8081

访问监控页面
在这里插入图片描述

同时通过

10.10.10.10:8081

也可以访问rabbitmq的监控页面

接着可以跑个项目看看,我这里使用的是java的SpringBoot框架

applicaiton.properties配置如下

server.port=8088
spring.rabbitmq.addresses=10.10.10.10:5666
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest

注意这里rabbitmq的端口使用的是haproxy中配置的5666端口

测试后可以发现三个节点的队列都会收到消息

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值