点赞
评论
收藏
分享
举报
IoT 场景-03:使用NGINX Plus 进行主动MQTT健康检查
发表于2020-12-19 16:08

浏览 1.4k

文章标签

为了使我们的Nginx Plus 具有对MQTT Broker的正常工作状况具有主动健康检查的能力,首先我们要了解MQTT的协议的连接。


0x01 MQTT 协议

第一节我们介绍过,MQTT 是一种基于TCP建立的的一套协议,MQTT报文中也有类似于TCP 三次握手的状态码。


简单来讲,我们只需要构建一个合法的CONNECT 连接,等待MQTT 返回一个CONNACK的回应报文,就能确认MQTT Broker正在处于一个正常工作的状态。


0x02 Nginx Plus构建CONNECT

1
match mqtt_conn {
12
        # Send CONNECT packet with client ID "nginx health check"
13
        send   \x10\x20\x00\x06\x4d\x51\x49\x73\x64\x70\x03\x02\x00\x3c\x00\x12\x6e\x67\x69\x6e\x78\x20\x68\x65\x61\x6c\x74\x68\x20\x63\x68\x65\x63\x6b;
14
        expect \x20\x02\x00\x00; # Entire payload of CONNACK packet
15
}


send: 表示发送CONNECT 报文

expect: 表示期待服务端回复CONNACK报文


0x03 配置及验证

从上图可见,当我们分别停止和启动mqtt_02 Broker容器,在error_log中会出现健康检查失败的记录。


至此,我们已经介绍过了NGINX Plus 对MQTT 协议的三个使用场景,即负载均衡,会话保持,健康检查。第四节,我们会一起讨论 IoT场景-04:使用NGINX Plus对MQTT的客户端连接进行访问控制


参考: https://dzone.com/articles/mqtt-load-balancing-and-session-persistence-with-nginx-plus

已修改于2023-03-09 02:21
本作品系原创
创作不易,留下一份鼓励
yuefeng

暂无个人介绍

关注



写下您的评论
发表评论
全部评论(0)

按点赞数排序

按时间排序

关于作者
yuefeng
这家伙很懒还未留下介绍~
6
文章
0
问答
1
粉丝
相关文章
众所周知,Nginx最常见的传统场景是Web服务器,HTTP反向代理以及负载均衡,此外,它在物联网的技术领域,也可以发挥同样可观的作用。本节我们会重点讨论使用Nginx实现物联网消息组件MQTTBroker的高可用。MQTT流量负载均衡带有健康检查的高可用实践基于MQTTClientID的会话保持0x01MQTT原理首先我们来熟悉一下MQTT协议。MQTT(MessageQueuingTelemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的"轻量级"通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布。MQTT最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。作为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。MQTT协议原理1MQTT协议实现方式实现MQTT协议需要客户端和服务器端通讯完成,在通讯过程中,MQTT协议中有三种身份:发布者(Publish)、代理(Broker)(服务器)、订阅者(S
点赞 1
浏览 3k
上一节我们介绍过了通过Nginx实现MQTT会话的负载均衡,那么如何解决每个MQTTBroker在消息分发的时候,只能收到一半信息的情况呢?此时,我们就需要借助NginxPlus的高级功能:NginxJavaScript,来定制基于ClientID的会话保持机制,将客户端与某个MQTTBroker进行会话保持,保障其信息的完整性,除非该MQTTBroker出现故障。"Round Robinloadbalancingisaneffectivemechanismfordistributingclientconnectionsacrossagroupofservers.However,thereareseveralreasonswhyitisnotidealforMQTTconnections."0x01NginxJavaScript会话保持代码mqtt.js提取MQTTClientId varclient_messages=1;2varclient_id_str="-";34
点赞 2
浏览 1.7k
由于NGINXPlus在MQTT客户端与Broker的交互过程中处于一个核心代理的位置,我们可以很容易的在其原生的代理功能基础之上加入安全访问控制功能。0x01为什么需要访问控制对于一些MQTT的客户端,不管是消息的发布者还是订阅者,都有可能会使用贪婪模式,频繁的与MQTTBroker进行通信,并发布或获取大量数据。此时,MQTTBroker的通信信道会被这种客户端应用占用,导致服务降级。遇到这种类型的客户端,由于MQTTBroker原生并没有很好地限制机制,从而需要借助在NginxPlus的代理上面,进行配置,识别并限制过度的数据访问。0x02如何进行访问控制使用NginxPlus进行访问控制很简单,和HTTP协议的访问控制类似。0x03访问日志处理使用NginxPlus还可以自定义日志格式,通过与告警平台和自动化平台对接,可以有效识别异常客户端的通信,可以进行自动化的IP封禁以及限连和限流操作。至此,我们4节NGINXPlus在IoT场景中的应用已经告一段段落,希望大家喜欢本次的分享。参考:https://dzone.com/articles/mq
点赞 1
浏览 1.8k