rabbitmq集群镜像模式使用中的一些坑

首先看一下rabbitmq集群镜像模式的示意图

坑1:possibly caused by authentication failure rabbitmq错误

参考:Access Control (Authentication, Authorisation) in RabbitMQ

默认的Virtual Host和User

virtual host /

user guest password guest,并且赋予virtual host / 的所有权限

所以推荐删除这个guest用户或者修改其密码

 

而且默认情况下,guest用户是不允许远程连接broker的,其只能通过loopback interface即localhost来连接。

 

如果希望允许guest用户通过远程来连接,那么应设置loopback_users为none

loopback_users = none

坑2:使用keepalived带来两个问题

参考:keepalived配置学习,解决vip无法ping通,虚拟服务器端口无法访问的问题

1. vip虚拟ip ping不通

解决方法是:在keepalived.conf中显式配置 vrrp_strict,并#vrrp_strict

2. ping通之后,无法连接rabbitmq java client

rabbitmq java client,也就是我用java写的rabbitmq producer和consumer,连接不上vip,或者偶尔能连接上,但是大多数情况都是connection err

这个问题搞了好久,其实整个链路分成好几块部分。

我的rabbitmq java client连接vip,然后转到haproxy,haproxy再转到rabbitmq mirror cluster

 

于是在本地telnet vip 端口,结果发现果然不是很稳定

怎么办呢?那么要从整个链路上去分析了

想法1:keepalived的tcp连接设置为长连接,这样我的rabbitmq java client就能连接好了

参考:Haproxy开启keep-alive配置

于是,在haproxy.conf中配置

试了一下,好像也没啥效果

 

想法2:

参考:解决 RabbitMQ 集群 Channel shutdown: connection error 错误(HAProxy 负载均衡)

这篇文章讲了HAProxy和rabbitmq java client的连接

如果使用 HAProxy 配置 RabbitMQ 高可用集群的话,则会遇到客户端连接超时问题。

为什么会出现此问题呢?因为 HAProxy 配置了客户端连接超时参数(timeout client ms),如果客户端连接超过配置的此参数,那么 HAProxy 将会删除这个客户端连接。

RabbitMQ 客户端使用永久连接到代理,从不超时,那为什么还会出现问题?因为如果 RabbitMQ 在一段时间内处于非活动状态,那么 HAProxy 将自动关闭连接(有点坑呀?)。

因为系统发送TCP keepalive数据包的间隔时间过长,远远超过 HAProxy 中的 timeout client超时时间(默认好像是 2 秒),所以客户端连接每隔 2 秒,就被 HAProxy 无情的给删除掉,然后不断的被重建

 

给haproxy.conf中添加

timeout client  3h

timeout server  3h

 

果然,加了这两个参数,不再超时了

 

haproxy的一些配置,有时间可以看一下

参考:Haproxy 配置项\配置实例

坑3:给vhost指定rabbitmq set_policy ha-all

在rabbitmq mirror cluster中,如果没有指定rabbitmq set_policy,那么并不会开启镜像队列,其只会使用master

那么命令

rabbitmqctl set_policy ha-all "" '{"ha-mode":"all","ha-sync-mode":"automatic"}'

其实是对vhost /(默认vhost)开启ha-all

 

而且如果没有指定ha-sync-mode,那么如果某个node down,会出现下面的情况

需要手动来resync

 

比如说我们新建了一个用户,并指定了一个新的vhost,那么要记得给这个vhost指定rabbitmq set policy

rabbitmqctl set_policy -p "/vhost_simple" ha-all "^" '{"ha-mode":"all", "ha-sync-mode":"automatic"}'

这样才开启了ha-all

参考:RabbitMq : Is there a way to apply policy on all virtual host in cluster environment for queue mirroring?

转摘以备用

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值