linux搭建emqx集群

前言

    在各个节点安装单点emqx服务以后,就可以开始搭建集群环境;本集群环境使用的服务器节点为10.8.15.62、10.8.15.63、10.8.15.64

我们这里介绍的是 静态节点列表自动集群,手动集群管理的方式可以参考()

简介

    EMQ X (Erlang/Enterprise/Elastic MQTT Broker) 是基于 Erlang/OTP 平台开发的开源物联网 MQTT 消息服务器。

    MQTT 是轻量的 (Lightweight)、发布订阅模式 (PubSub) 的物联网消息协议。

    EMQ X 设计目标是实现高可靠,并支持承载海量物联网终端的MQTT连接,支持在海量物联网设备间低延时消息路由:

        1.稳定承载大规模的 MQTT 客户端连接,单服务器节点支持50万到100万连接。

        2.分布式节点集群,快速低延时的消息路由,单集群支持1000万规模的路由。

        3.消息服务器内扩展,支持定制多种认证方式、高效存储消息到后端数据库。

        4.完整物联网协议支持,MQTT、MQTT-SN、CoAP、LwM2M、WebSocket 或私有协议支持。

        5.在模块面板中开启emqx_mod_delayed后,可以支持延迟消息发布

集群搭建

1.在各节点上正确安装emqx

2.修改配置文件(主要修改./etc/emqx.conf)

    emqx.conf配置文件需要修改的内容如下:

    ================================

    #集群发现模式,静态发现,启动后不用输加入集群命令

    cluster.discovery = static

    #集群列表,配合上面static发现策略使用

    cluster.static.seeds = [email protected],[email protected],[email protected]

    #节点名(3个节点此处分别为[email protected][email protected][email protected]

    node.name = [email protected]

    #关闭emq的匿名认证,使用用户名密码验证(如果需要密码验证就这样配置)

    allow_anonymous = false

    #集群通信端口段

    node.dist_listen_min = 6369

    node.dist_listen_max = 7369

    ================================

    注意:节点命名格式为Name@Host, Host 必须是 IP 地址或 FQDN (主机名、域名)

3.配置连接验证的密码信息(根据实际采用的加密连接方式来修改各自的配置文件即可,我这里使用用户名密码验证的方式)

    编辑配置文件(用户名密码连接的配置文件为 etc/plugins/emqx_auth_username.conf)

    ================================

    auth.user.1.username = admin

    auth.user.1.password = public

    auth.user.password_hash = sha256

    ================================

4.优化参数

    sysctl -w fs.file-max=

    sysctl -w fs.nr_open=

    sysctl -w net.core.somaxconn=65500

    ulimit -n

    说明:

        1.net.core.somaxconn参数的值不能超过USHRT_MAX,即不能超过65535

        2.sysctl命令用于运行时配置内核参数,这些参数位于/proc/sys目录下。

        -w 是临时改变某个指定参数的值

        3.使用ulimit -a 可以查看当前系统的所有限制值,使用ulimit -n 可以查看当前的最大打开文件数(默认是1024),这里要临时设置加大此参数。

5.分别启动各节点的emqx服务

    ./bin/emqx start

6.查询集群状态

    ./bin/emqx_ctl cluster status

7.登录查看集群情况

    :18083 admin/public

8.登录控制台,打开插件里面的密码验证功能

    插件->emqx_auth_username->开启

其它可能的事项

    可能会碰到问题,检查防火墙是否开启emq集群通信的端口(如果是阿里云,在安全组里配):

    #emqx集群需要端口

    如果集群节点间存在防火墙,防火墙需要开启 4369 端口和一个 TCP 端口段。

    4369 由 epmd 端口映射服务使用,

    TCP 端口段用于节点间建立连接与通信。(6369/7369)