MQTT broker 集群部署

在近期的一个项目中,被问到公司自研的MQTT push服务器是否支持HA部署,从我了解的情况看目前还不支持。

[转载] 一篇使用 Apache  activeMQ的集群部署实例,以后参考:


主要是利用HAProxy作为负载均衡器,利用activeMQ作为broker的集群。




1,准备4台服务器,默认操作系统为Ubuntu14.04,三台服务器安装activeMQ, 另外一台服务器安装HAProxy作为负载均衡。




2,安装和配置activeMQ


安装jre


sudo apt-get install default-jre 
export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64/jre 


安装activeMQ


wget http://ftp.meisei-u.ac.jp/mirror/apache/dist/activemq/5.12.0/apache-activemq-5.12.0-bin.tar.gz 
tar zxvf apache-activemq-5.12.0-bin.tar.gz 


启动activeMQ


cd [activemq_install_dir]/bin 
./activemq console 




3,配置activeMQ集群


假设三台broker服务器的地址分别是10.80.1.1, 10.80.1.2, 10.80.1.3,在三台服务器上分别配置如下


在服务器10.80.1.1上添加如下networkConnectors配置
<networkConnectors>
<networkConnector uri="static:(tcp://10.80.1.2:61616,tcp://10.80.1.3:61616)"/>
</networkConnectors>


在服务器10.80.1.2上添加如下networkConnectors配置
<networkConnectors>
<networkConnector uri="static:(tcp://10.80.1.1:61616,tcp://10.80.1.3:61616)"/>
</networkConnectors>


在服务器10.80.1.3上添加如下networkConnectors配置
<networkConnectors>
<networkConnector uri="static:(tcp://10.80.1.1:61616,tcp://10.80.1.2:61616)"/>
</networkConnectors>




4,可通过如下web console添加topic


http://10.80.1.1:8161/admin/


http://10.80.1.2:8161/admin/


http://10.80.1.3:8161/admin/


默认用户名和密码是admin和admin


分别添加一个topic,比如presence




5,安装并配置HAProxy,假设服务器地址为10.80.1.4


安装HAProxy请参考如下的文档


https://www.vultr.com/docs/installing-and-configuring-haproxy-on-ubuntu-14-04


在HAProxy配置文件里面添加如下配置并重启


frontend mqtt_proxy 
bind *:1883 
mode tcp 
default_backend mqtt_agent 


backend mqtt_agent 
mode tcp 
option  tcplog 
balance roundrobin 
server mqtt_01 10.80.1.1:1883 check 
server mqtt_02 10.80.1.2:1883 check 
server mqtt_03 10.80.1.3:1883 check  


重启HAProxy。




6,通过mqtt.js的MQTT的客户端来测试cluster server


var mqtt= require('mqtt'); 
var client  = mqtt.connect('mqtt://10.80.1.4'); 


client.on('connect', function () { 
client.subscribe('presence'); 
client.publish('presence', 'Hello this is from client and server: '+new Date()); 
}); 
client.on('message', function (topic, message) { 
// message is Buffer 
console.log(message.toString()); 
client.end(); 
}); 

展开阅读全文

没有更多推荐了,返回首页