如图,目前我用rabbitmq插件做的mqtt集群,理论上也适用于emqx,18年那会看emqx集群是收费的,现在集群已经不收费了,所以今天尝试用haproxy建立emqx集群,确认是可用的。
官方emqx集群分四类
1 静态集群 2 DNS集群 3 组播集群 4 ETCD集群
静态集群配置
安装emqx过程比较简单,略过,直接进入集群配置,配置文件修改三行即可
配置文件 /etc/emqx.conf
保证node.cookie和集群名称相同,修改node.name,cluster.discovery,cluster.static.seeds
#nodename是标准格式,不要随意命名,name@ip,保证name不同
#148服务器如下
node.name = emqx148@192.168.0.148
cluster.discovery = static
cluster.static.seeds = emqx148@192.168.0.148,emqx150@192.168.0.150
#150服务器如下
node.name = emqx150@192.168.0.150
cluster.discovery = static
cluster.static.seeds = emqx148@192.168.0.148,emqx150@192.168.0.150
查询状态。以下是ok。
$ ./bin/emqx_ctl cluster status
Cluster status: [{running_nodes,['emqx148@192.168.0.148','emqx150@192.168.0.150']}]
emqx集群上层还需要Haproxy代理一下,下图是rabbitmq简单集群,emqx基本上一样的。
Haproxy安装
1. 下载环境+工具依赖包
yum install gcc vim wget
2.下载 haproxy
wget https://src.fedoraproject.org/repo/pkgs/haproxy/haproxy-2.1.2.tar.gz/sha512/929d244a67f93337e3c791b1a29f9643ac288acdf0090dc7a05c72caf61c3b04ef376b84737351f0c54d58bca66ed8af18faa20ec3adc97067313732e0dfcd7d/haproxy-2.1.2.tar.gz
3,在ha1和ha2两台机器安装
4,解压
tar -zxf haproxy-2.1.2.tar.gz -C /app/
5,编译
#进入指定的解压目录
cd /app/haproxy-2.1.2/
#对haproxy进行源码编译
make TARGET=linux31 PREFIX=/app/haproxy
#安装 编译好的haproxy 并指定安装目录(根据公司要求)
make install PREFIX=/app/haproxy
#创建haproxy目录放置配置文件
mkdir /etc/haproxy
#赋权
groupadd -r -g 149 haproxy
useradd -g haproxy -r -s /sbin/nologin -u 149 haproxy
#创建haproxy配置文件
touch /etc/haproxy/haproxy.cfg
Haproxy配置
PS:haproxy 配置文件haproxy.cfg详解
vim /etc/haproxy/haproxy.cfg
给120服务器将此配置文件同步到/etc/haproxy目录下面
记得要修改一下haproxy的ip地址
6,创建haproxy配置文件 touch /etc/haproxy/haproxy.cfg #Haproxy配置 PS:haproxy 配置文件haproxy.cfg详解 vim /etc/haproxy/haproxy.cfg
添加内容如下:
#logging options
global
log 127.0.0.1 local0 info #日志输出配置,所有日志都记录在本机,通过local0输出
maxconn 5120
chroot /app/haproxy #haproxy 安装路径
uid 99 #所属运行的用户uid
gid 99 #所属运行的用户组
daemon #后台运行
quiet
nbproc 20
pidfile /var/run/haproxy.pid #指定PID文件路径
defaults
log global
#使用4层代理模式,"mode http"为7层代理模式
mode tcp
#if you set mode to tcp,then you nust change tcplog into httplog
option tcplog
option dontlognull
retries 3
option redispatch
maxconn 2000
#连接超时时间
timeout connect 5s
#客户端空闲超时时间为 60秒 则HA 发起重连机制
timeout client 60s
#服务器端连接超时时间为 15秒 则HA 发起重连机制
timeout server 15s
#front-end IP for consumers and producters
listen rabbitmq_cluster
bind 0.0.0.0:5672 #绑定协议端口
#配置TCP模式
#所处理的类别,默认采用http模式,可配置成tcp作4层消息转发
mode tcp
#balance url_param userid
#balance url_param session_id check_post 64
#balance hdr(User-Agent)
#balance hdr(host)
#balance hdr(Host) use_domain_only
#balance rdp-cookie
#balance leastconn
#balance source //ip
#简单的轮询
balance roundrobin
#负载均衡策略
#rabbitmq集群节点配置 #inter 每隔五秒对mq集群做健康检查, 2次正确证明服务器可用,2次失败证明服务器不可用,并且配置主备机制
server mqtt-01 192.168.0.115:1883 check inter 5000 rise 2 fall 2
server mqtt-02 192.168.0.117:1883 check inter 5000 rise 2 fall 2
server mqtt-03 192.168.0.118:1883 check inter 5000 rise 2 fall 2
#配置haproxy web监控,查看统计信息
listen stats
bind 192.168.0.119:8100 #前端浏览器中查看统计的WEB界面地址
mode http
option httplog #日志类别,采用httplog
stats enable
stats auth admin:123456 #设置查看统计的账号密码
#设置haproxy监控地址为http://localhost:8100/rabbitmq-stats
stats uri /rabbitmq-stats
stats refresh 5s #5s刷新一次
注意:lisener可以配置多个,例如上面的listen rabbitmq_cluster,可以再配置mqtt的1883,webmqtt的15675等等
#将 119 服务器 上的haproxy文件同步至 120 服务器 scp haproxy.cfg root@192.168.0.120:/etc/haproxy
7,启动haproxy
/app/haproxy/sbin/haproxy -f /etc/haproxy/haproxy.cfg 注: -f 指定启动的配置文件
PS:访问如下地址可以对rmq节点进行监控:
http://192.168.0.119:8100/rabbitmq-stats
此刻就可以享受mqtt代理服务了,用mqtt客户端工具链接119这台服务,一切ok。
简单集群不能百分之百保证不丢数据,所以需要考虑haproxy+keepalive来做复杂集群。