用户工具

站点工具


public:mosquitto

设置mosquitto服务器的打开最大文件数

1:背景:

  • 1.1 单台服务器支持同时管理的最大设备数量为2048个设备。
  • 1.2 服务器在6.6以后的版本中,支持MQTT协议,在服务器上面会安装mosquitto服务来做MQTT的Broker,提供MQTT的代理功能。

2:出现的问题:

  • 2.1 mosquito在服务器中是当做系统daemon进程由Linux系统启动的,那么默认情况下,该服务器能够打开的最大文件数为1024。
  • 2.2 那么当连接Broker的设备数量接近1024时,就会因为linux系统的限制,出现Broker无法创建TCP socket,进而导致其他的设备无法上线。

3:产生的影响:

  • 3.1 如果学校里面的设备都是V3协议的设备,并且设备数量大于1000台,就可能出现部分设备无法上线的问题。
  • 3.2 如果学校的设备数量较少,不超过500台,该问题可以忽略。

4:修改方案:

在升级或者安装服务器软件版本的时候,在升级脚本里面,实现自动的升级mosquitto服务,并且校验和修改mosquitto服务打开的最大文件数。

由于调整mosquitto服务的最大文件打开数量的流程比较多,也比较繁琐,在自动升级的时候,有可能存在失败的情况,当出现失败的时候,需要安装服务器的人员手动进行处理。

该文档就是提供手动安装的具体方法,以便于解决自动升级出现失败的情况。

5:具体的修改方法:

  • 5.1 mosquitto的版本必须是1.6以后的,因为Ubuntu系统源的1.4版本里面没有service文件,无法采用下面的方式进行修改。
  • 5.2 安装mosquitto最新版本的方法可以参考:

Mosquitto安装配置和使用指南

安装的主要命令:

sudo apt-add-repository ppa:mosquitto-dev/mosquitto-ppa
sudo apt-get update
sudo apt-get install mosquitto

  • 5.3 判断系统已经安装的mosquitto版本是否支持service的方式来修改打开文件最大数的方法是:

在安装完成mosquitto之后,执行systemctl status mosquitto | grep loaded,可以看到load的方式是否是从一个service文件的。支持的情况如下: /lib/systemd/system/mosquitto.service文件就是该服务启动的service文件。

  • 5.4 修改打开文件数的方法是:

打开/lib/systemd/system/mosquitto.service文件,然后再[Service]下面增加一行内容:\\LimitNOFILE = 5000
需要将限制设置大于2048,建议设置为5000即可,修改之后效果如下:

  • 5.5 重新加载并且重新服务生效:

systemctl daemon-reload
/etc/init.d/mosquitto restart

  • 5.6 查看是否生效的方法:

获取mosquitto的pid,然后查看/proc/pid/limits文件,如下:
可以看到Max open files 已经变为了5000,此时就可以正常连接2048个设备了。

6:写在最后,如果最终安装过程中出现问题,请联系研发解决。

public/mosquitto.txt · 最后更改: 2020/10/21 11:25 由 idstewiki