mosquitto-cluster

https://github.com/hui6075/mosquitto-cluster/blob/master/readme-zh_cn.md

 安装环境
  820  cd /home
  821  ll
  822  mkdir mosquitto
  823  ll
  824  cd mosquitto/
  825  ll
  826  rz
  827  yum install lrzsz
  828  git clone https://github.com/hui6075/mosquitto-cluster.git 
  829  yum -y install git
  830  git ?version 
  831  git -version 
  832  git --version 
  833  yum -y install docbook-style-xsl
  834  find / -name docbook.xsl
  835  ll
  836  git clone https://github.com/hui6075/mosquitto-cluster.git 
  837  ll
  838  tar -zcvf mosquitto-cluster.tar.gz mosquitto-cluster
  839  ll
  840  sz mosquitto-cluster.tar.gz
  841  ll
  842  history
  843  cd mosquitto-cluster && vim config.mk 
  844  ll
  845  /etc/
  846  ll
  847  cd /etc/
  848  ll
  849  cd ..
  850  lll
  851  ll
  852  cd home/mosquitto/mosquitto-cluster
  853  ll
  854  yum install gcc gcc-c++
  855  yum install openssl-devel
  856  yum install c-ares-devel
  857   yum install libuuid-devel
  858   yum install wget
  859  yum install cmake
  860  yum install build-essential python quilt devscripts python-setuptools python3
  861   yum install libssl-dev libc-ares-dev uuid-dev daemon openssl-devel
  862  yum install libxslt
  863  ll
  864  history
  865  find / -name docbook.xsl
  866  cd  man/
  867  vim  manpage.xsl 
  868  cd ..
  869  ll
  870  make && make install
  871  history


Mosquitto集群

在Mosquitto集群中,客户端可以在任何节点上订阅主题,也可以在任何节点上发布消息,集群会保证消息按需转发到正确的节点。
为了均衡负载及避免单点故障,Mosquitto集群实现为完全去中心化、自治的方式。

编译安装

> git clone https://github.com/hui6075/mosquitto-cluster.git 

> cd mosquitto-cluster && vi config.mk 

安装

通过命令查找文件 docbook.xsl,在本机中也没有发现,因此基本可以确定是找不到这个文件所致:

[root@localhost mosquitto-1.2]# find / -name docbook.xsl


解决办法:

1.安装docbook-style-xsl

使用命令:yum -y install docbook-style-xsl

2.查看文件docbook.xsl被安装到了哪里:

例如:

[root@localhost tools]# find / -name docbook.xsl
/usr/share/sgml/docbook/xsl-stylesheets-1.78.1/epub/docbook.xsl
/usr/share/sgml/docbook/xsl-stylesheets-1.78.1/fo/docbook.xsl
/usr/share/sgml/docbook/xsl-stylesheets-1.78.1/html/docbook.xsl
/usr/share/sgml/docbook/xsl-stylesheets-1.78.1/manpages/docbook.xsl
/usr/share/sgml/docbook/xsl-stylesheets-1.78.1/xhtml/docbook.xsl
/usr/share/sgml/docbook/xsl-stylesheets-1.78.1/xhtml-1_1/docbook.xsl

3.搜索到之后,将上面红字中的地址修改到文件manpage.xsl里的对应位置;


# WITH_BRIDGE:=yes
WITH_CLUSTER:=yes

> make && make install 

部署

在所有节点上安装Mosquitto,并把节点名、IP、端口号写进配置文件mosquitto.conf,例如:

node_name node1
node_address 192.168.1.1:1883

node_name node2
node_address 192.168.1.2:1883

然后配置负载均衡器,把所有节点的地址:端口号作为后端服务地址。Mosquitto是单进程实现,建议单机多实例部署,并把TLS终结在负载均衡器。

Mosquitto集群特性

客户端的连接/订阅/取消订阅消息广播到集群内其他节点,发布消息按需转发。

环路避免

任何节点对于来自其他节点的发布消息只会发送给客户端,对于来自其他节点的订阅/取消订阅消息不会被转发。

避免重复订阅

对于每个来自客户端的订阅主题,以引用计数的方式保存在本地,只有在收到新的客户端主题订阅消息,或者主题不再被任何客户端订阅时进行转发。

私有消息

为支持集群session及保留消息,Mosquitto集群引入了如下私有消息:
PRIVATE SUBSCRIBE
固定头部|报文标识符|主题过滤器|QoS|客户端标识符|订阅标识符

PRIVATE RETAIN
固定头部|主题过滤器|QoS|[报文标识符]|客户端标识符|订阅标识符|接收时间戳|有效载荷

SESSION REQ
固定头部|客户端标识符|会话清除标识

SESSION RESP
固定头部|客户端标识符|报文标识符|订阅数量|订阅1(主题过滤器|QoS)|...|订阅N|发布消息数量|发布消息1(主题过滤器|状态|方向|重复标识|QoS|报文标识符|有效载荷)|...|发布消息N|

集群会话支持

每次客户端连接时,若本地没有发现会话信息,则广播SESSION REQ消息,其他节点收到此请求时若发现此客户端的会话信息,则断开/清除此客户端/上下文,若会话清除标识被设为FALSE,则返回此客户端的订阅状态及未完成的QoS为0和1的发布消息。此特性可以通过配置文件禁用,但压测和性能采样结果表明此特性在大并发的情况下并不会带来特别大的开销。

集群保留消息支持

每次收到来自于客户端的订阅时,节点会广播PRIVATE SUBSCRIBE,如果存在保留消息,其他节点会把此保留消息及接收时间通过PRIVATE RETAIN消息返回给此节点,因此客户端得以收到集群中绝对时间戳最晚的保留消息。

QoS支持

所有发布消息以原始QoS在集群内转发,但被节点当做QoS为0进行处理。实际转发给客户端的发布消息按照协议取发布QoS和订阅QoS两者较小值。

其他特性

集群间消息处理时不进行校验。集群间建立连接时发送所有本地先前的订阅关系。

设计思想

Mosquitto集群目标

水平扩展,避免单点故障,整个集群对外表现为一个完整的逻辑MQTT代理。

image

Pic1. Mosquitto集群概览

每次收到客户端的订阅消息时,通知其他节点此话题被订阅;每次收到客户端的发布消息时,把消息路由到正确的节点上。

image

Pic2. Mosquitto集群私有消息

节点与其他节点间只有一条逻辑通道,为了承载不同客户端的订阅/发布消息,引入了一些私有消息,包含客户端标识符、订阅标识符、时间戳等等,以帮助节点做出正确的路由和转发。

image

Pic3. Mosquitto集群内部消息流

转发规则:
转发来自于客户端的本节点新发生的订阅;当话题不再被任何客户端订阅时广播取消订阅消息;不转发任何系统话题。

Benchmark

使用krylovsk/mqtt-benchmark对集群进行简单的基准测试,集群吞吐率在3个以上节点时受限于客户端从而停止增长。
image

Pic4. Mosquitto集群平均吞吐率

n=10k表示每个客户端发送10000条消息, c=100表示总共启动100个客户端。
消息长度1000字节,QoS选取为2。

更详细的Tsung压测报告: https://github.com/hui6075/mosquitto-cluster/tree/master/benchmark

其他

image

Pic5. Mosquitto源码分析

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值