Centos7.2 MQTT的学习之Mosquitto搭建&集群搭建&使用

下载安装包

http://mosquitto.org/files/source/

安装依赖

yum install -y gcc gcc-c++ libstdc++-devel

yum install -y openssl-devel

yum install -y c-ares-devel

yum install -y uuid-devel

yum install -y libuuid-devel

yum install -y wget

yum install -y cmake

yum install -y build-essential python quilt devscripts python-setuptools python3?

yum install -y libssl-dev libc-ares-dev uuid-dev daemon openssl-devel

安装mosquitto:

tar zxvf mosquitto-1.4.tar.gz

cd mosquitto-1.4

make

make install

cd /etc/mosquitto/

cp mosquitto.conf.example mosquitto.conf

修改配置文件 mosquitto.conf

1、修改用户(或增加用户mosquitto,adduser mosquitto)

user mosquitto 修改为 user root

2、修改端口号

port 1883

启动mosquitto服务:

mosquitto -c /etc/mosquitto/mosquitto.conf

重启Mosquitto

在网上找了很多资料都没有提起怎样重启服务器,并且在官网上也没有相应命令提示。

所以我们使用Liunx终止进程命令,强行退出。

先kill掉,再重启:

kill -9 21674

调测问题:

报错./mosquitto_sub: error while loading shared libraries: libmosquitto.so.1: cannot open shared object file: No such file or directory

解决:执行以下命令:

sudo ln -s /usr/local/lib/libmosquitto.so.1 /usr/lib/libmosquitto.so.1

ldconfig

调试步骤:

1、先开启一个客户端,模拟broker

mosquitto -c /etc/mosquitto/mosquitto.conf -v

2、再开启一个客户端,模拟订阅

mosquitto_sub -v -t topic01

3、最后开启一个客户端,模拟发布

mosquitto_pub -t topic01 -m mmmmmmmmsss

4、订阅界面可以实时收到发布消息

安装成功

集群搭建:

1、开启服务器桥连接

进入安装目录

cd mosquitto-1.4.9/

打开config.mk文件

vi config.mk

找到WITH_BRIDGE:=yes 将签名的“#”号去掉开启桥连接模式。(默认是开启的,为了无误查看一下)

2、配置Mosquitto.conf的桥连接属性

进入etc目录,并且打开Mosquitto.conf文件

cd /etc/mosquitto/

vi mosquitto.conf

找到Bridges节点,在下面加入如下代码:

connection mytest

address 172.30.60.11:1883

topic room1/# both 2 sensor/ myhouse/

bridge_protocol_version mqttv311

notifications true

cleansession true

try_private true

start_type automatic

--------------------------------------参数说明-------------------------------------------

connection 连接名称,可以随便取

address 连接的另外服务器地址和端口号,如果有多台服务器,可以写多个address

topic 主题名称,“#”为通配符,表示发布端可以在room1/后面接任何文字

both 服务质量,2代表只有一次(可以查看第一篇博文对MQTT的详细介绍)

sensor/ 本地前缀标识,可以随便命名

myhouse/ 远程前缀标识,可以随便命名

bridge_protocol_version mqttv311 桥连接协议版本MQTT3.11

notifications 是否发布桥接的状态信息

cleansession 桥接断开时,是否清除远程服务器中的消息

start_type 桥接模式,目前有三种:automatic、lazy、once

设置好之后保存退出。

3、开启服务器

第一步先确保从服务器先开启,第二步重新启动主服务器的Mosquitto服务。

4、验证发布/订阅

集群的特点在任何服务器上都可以订阅与发布,并且订阅者可以收到在任何服务器中发送去信息。

测试场景:在从服务器中订阅一条信息,在主服务器中发布一条信息,从服务器的订阅者可以收到从主服务器中发布的消息。

(1)在从服务器中键入一下命令:

mosquitto_sub -t myhouse/room1/#

注意:myhouse/ 是编写Mosquitto.conf中topic的远程前缀。

room1/#是topic中的订阅主题

(2)在主服务器中键入一下命令:

mosquitto_pub -t sensor/room1/temperature -m '26.3'

注意:sensor/ 是编写Mosquitto.conf中topic的本地前缀。

room1/ 是topic中的订阅主题

temperature 相当与“#”通配符

如果Mosquitto.conf配置无误,并且本地前缀与远程前缀拼写正确,那么会显示如下图信息,表示集群配置成功

在从服务器订阅,在主服务器发送,从服务器订阅者收到信息:

以上双集群配置完成。也比较简单。

多集群部署

配置3台服务集群与3+n台理论一样,所以这里配置3台服务集群作为演示。

1、安装服务器

首先在上述2台服务器基础上,再增加一台服务器,配置步骤请参考

2、配置服务器

假设有3台服务器分别是

172.30.60.1

172.30.60.11

172.30.60.13

其中1为主服务器,11与13为从服务器。

所以在11与13上只需要正常安装Mosquitto服务即可,其他不需要做任何配置。

重点还是在1的mosquitto.conf中配置。

依然打开mosquitto.conf,找到Bridge节点,重新复习一下节点中每个配置项的含义

#connection <name>

#address <host>[:<port>] [<host>[:<port>]]

#topic <topic> [[[out | in | both] qos-level] local-prefix remote-prefix]

笔者一开始错误的认为红色字体部分是配置第二台服务器使用的,但是笔者错了。每一个connection只能有一个IP地址,address红色的部分是留有多个ip的保存。(貌似是对前地址的一个备份,如果前地址服务器挂了可以立马接手备用服务器,笔者尚未证实)

如果想增加一台服务器只需要重新添加connection、address、topic节点即可。因此Bridge节点变成下面形式:

复制代码

connection mytest

address 172.30.60.11:1883

topic room1/# both 2 sensor/ myhouse/

connection mytest2

address 172.30.60.13:1883

topic room1/# both 2 sensor/ myhouse/

bridge_protocol_version mqttv311

notifications true

cleansession true

try_private true

start_type automatic

复制代码

红色部分为新增加的服务器。重启Mosquitto服务器即可。

3、测试订阅、发布

测试理论与第一节类似:

分别在11与13服务器中输入mosquitto_sub -t myhouse/room1/# 订阅信息

在1服务器中输入mosquitto_pub -t sensor/room1/temperature -m '27.8' 发布消息

同事11与13都会收到“27.8”这条信息。如果只有一台服务器收到说明配置有问题。