使用emq产品左消息服务器,前端是haproxy容器代理TCP转发,具体配置如下
global
tune.ssl.default-dh-param 2048
defaults
log 127.0.0.1 local3
mode http #所处理的类别 (#7层 http;4层tcp )
maxconn 10000 #最大连接数
option dontlognull #不记录健康检查的日志信息
option redispatch #serverId对应的服务器挂掉后,强制定向到其他健康的服务器
#stats refresh 30 #统计页面刷新间隔
retries 3 #3次连接失败就认为服务不可用,也可以通过后面设置
balance roundrobin #默认的负载均衡的方式,轮询方式
#balance source #默认的负载均衡的方式,类似nginx的ip_hash
#balance leastconn #默认的负载均衡的方式,最小连接
timeout connect 5000 #连接超时
timeout client 50000 #客户端超时
timeout server 50000 #服务器超时
timeout check 2000 #心跳检测超时
listen mqtt-ssl
#bind *:1883
bind *:8883 ssl crt /etc/ssl/emqttd/emq.pem no-sslv3
mode tcp
option clitcpka
maxconn 50000
timeout check 5000
balance leastconn
#server emq1 192.168.0.123:1883 check inter 10000 fall 2 rise 5 weight 1
server emq2 192.168.0.125:1883 check inter 10000 fall 2 rise 5 weight 1
如下配置后,使用mqtt客户端连接会出现定时断开连接,因为mqtt连接是长连接,需要保持时时连接状态,但查了相关haproxy
资料发现haproxy会对没有消息的连接进行主动断开。原因是在上面两个配置选项 (timeout client 50000 ,timeout server 50000),这个是检查服务端和客户端连接超时情况。后来把这两个注释后就不会出现mqtt连接断开情况。