说了懒得搭建EMQ集群环境,正好有点空隙时间,还是要弄一下。
另外补充一点:emqx的cluster跟redis的cluster机制是一样的,都是每个服务器都可以有不同的主题,当客户端订阅或者发布的时候,服务器内部会有自己的路由转发功能。
参考资料:
- https://docs.emqx.net/broker/v3/cn/install.html
环境搭建 单机环境搭建
EMQ X 消息服务器每个版本会发布 CentOS、Ubuntu、Debian、FreeBSD、macOS、Windows 、openSUSE 平台程序包与 Docker 镜像。----这里我们使用zip解压缩的方式安装EMQ X---cuiyaonan2000@163.com
下载地址: https://www.emqx.io/downloads
#安装wget工具
[cuiyaonan2000@mzdssop bin]# yum install wget
#安装unzip工具
[cuiyaonan2000@mzdssop bin]# yum install unzip
#下载执行的版本的emqx
[cuiyaonan2000@mzdssop bin]# wget https://www.emqx.io/downloads/broker/v4.2.2/emqx-centos7-4.2.2-x86_64.zip
#解压缩
[cuiyaonan2000@mzdssop bin]# unzip emqx-centos7-4.2.2-x86_64.zip
#启动
[cuiyaonan2000@mzdssop bin]# ./emqx start
#关闭
[cuiyaonan2000@mzdssop bin]# ./emqx stop
#查看服务启动状态
[cuiyaonan2000@mzdssop bin]# ./emqx_ctl status
访问 http://127.0.0.1:18083,默认用户名: admin,密码:public,如图所示,登录后先修改下版本语言为中文。方便我们使用
集群环境搭建
集群节点都会占用如下的接口
1883 MQTT 协议端口
8883 MQTT/SSL 端口
8083 MQTT/WebSocket 端口
8080 HTTP API 端口
18083 Dashboard 管理控制台端口
修改 emqx/ect/emqx.conf 文件,不同的node只是node.name后面的ip不一样其它的都一样
#这个是集群的名字
cluster.name = cui
#这个是当前节点的名字,且@前面必须跟clcuster.name 一样
node.name = cui@10.1.80.190
#分别启动每个服务器上的emqx
[cuiyaonan2000@mzdssop bin]# ./emqx start
#加入集群
#在10.1.80.124的节点上执行如下命令,表示加入10.1.80.190的集群中,当然也可以在190上操作
[cuiyaonan2000@mzdssop bin]# ./emqx_ctl cluster join cui@10.1.80.190
#查看集群状态
[cuiyaonan2000@mzdssop bin]# ./emqx_ctl cluster status
其它操作
#leave: 本节点退出集群
[cuiyaonan2000@mzdssop bin]# ./bin/emqx_ctl cluster leave
#force-leave: 从集群删除其他节点
[cuiyaonan2000@mzdssop bin]# ./bin/emqx_ctl cluster force-leave emqx@192.168.3.211
#force-leave: 从集群删除其他节点
[cuiyaonan2000@mzdssop bin]# ./bin/emqx_ctl cluster force-leave emqx@192.168.3.211
#查询所有clientid
[cuiyaonan2000@mzdssop bin]# ./emqx_ctl clients list
#删除某个clientid
[cuiyaonan2000@mzdssop bin]# ./emqx_ctl clients kick
关闭匿名访问(并提供程序连接账号密码)
修改配置文件/emqx/etc/emqx.conf,将如下的allow_anonymous匿名访问给关掉,即设置成false
打开emqx_auth_username插件
添加账户
使用 ETCD 的自动集群
etcd 是 CoreOS 发起的开源项目。它以构建高可用的分布式键值(Key-Value)数据库为目标。etcd 的应用场景多间于服务发现,解决分布式系统中同一个集群的进程之间如何相互发现并建立连接。这功能也正是 EMQ X 自动集群所需要的。 当网络中存在etcd服务器(集群)的时候,EMQ X 集群可以使用ectp的方式自动建立集群。如何安装和配置etcd服务集群超出了本文档的范围,有兴趣深入了解的读者可以参考官方文档。 在这里,我们假设在EMQ X集群所在的网络中已经安装和配置了etcd服务器。
配置 EMQ X 节点
您需要在各个 EMQ X 节点上编辑 'etc/emqx.conf'文件中的cluster段落和node段落。----这个步骤上面已经介绍了
配置 etcd 集群方式如下有4个地方需要配置 服务发现选择etcd,服务器地址可以使多个用逗号分隔。集群前缀这个就是集群的名称。
- 您需要指定etcd服务器的地址(如果存在多个etcd服务器的时候,您可以使用服务器列表,在列表中以逗号","分隔各个服务器。)、
- 用于指定 EMQ X 节点的路径的前缀、路径的生存时间。----还是刚才的配置文件,修改如下的2个地方
cluster.discovery = etcd
##--------------------------------------------------------------------
## Cluster using etcd
## Etcd server list, seperated by ','.
##
## Value: String
cluster.etcd.server = http://192.168.1.162:2379
## The prefix helps build nodes path in etcd. Each node in the cluster
## will create a path in etcd: v2/keys///
##
## Value: String
cluster.etcd.prefix = emqxcl
## The TTL for node's path in etcd.
##
## Value: Duration
##
## Default: 1m, 1 minute
cluster.etcd.node_ttl = 1m