美文网首页MQTT
EMQ X 节点发现与自动集群

EMQ X 节点发现与自动集群

作者: EMQ | 来源:发表于2018-12-06 19:39 被阅读4次

简介

EMQ X 3.0 版本支持基于 Ekka 库的集群自动发现(Autocluster)。Ekka 是为 Erlang/OTP 应用开发的集群管理库,支持 Erlang 节点自动发现(Discovery)、自动集群(Autocluster)、脑裂自动愈合(Network Partition Autoheal)、自动删除宕机节点(Autoclean)。
EMQ X 3.0 支持多种策略自动发现节点创建集群:

策略 说明
manual 手工命令创建集群
static 静态节点列表自动集群
mcast UDP 组播方式自动集群
dns DNS A 记录自动集群
etcd 通过 etcd 自动集群
k8s Kubernetes 服务自动集群

实验目的

实现emqx 3.0版本基于manual、static和etcd策略下的集群功能

实验环境

本实验使用Vagrant搭建实验环境。

Vagrant是构建在虚拟化技术之上的虚拟机运行环境管理工具。通过Vagrant可以方便实现的对虚拟机的管理,包括建立和删除虚拟机、配置虚拟机运行参数、管理虚拟机运行状态、自动化配置和安装开发环境必须的各类软件、打包和分发虚拟机运行环境等。

关于Vagrant的更多信息,大家可以自行参阅官方文档进行学习和安装。

本实验已经提前准备好实验环境,当安装好Vagrant之后,大家可以git clone 该项目,在根目录下将 emqx-learning-cluster-Vagrantfile重命名为 Vagrantfile 执行 vagrang up 即可启动环境。

PS:第一次启动的时候可能需要特别久的时间,因为要执行下载镜像、clone代码等环节,大家可以耐心等待,不要随意中断进程。

Vagrang可以搭建三台基于 ubuntu 16.04 的EMQ X 3.0 的节点。

节点名 主机名(FQDN) IP 地址
emqx@192.168.233.111 node1 192.168.233.111
emqx@192.168.233.112 node2 192.168.233.112
emqx@192.168.233.113 node3 192.168.233.113

节点名格式: Name@Host, Host必须是IP地址或FQDN(主机名.域名)

使用vagrant status 查看节点的运行状态

$ vagrant status
Current machine states:

node1                     running (virtualbox)
node2                     running (virtualbox)
node3                     running (virtualbox)

This environment represents multiple VMs. The VMs are all listed
above with their current state. For more information about a specific
VM, run `vagrant status NAME`.

可是使用 vagrant ssh node1 进入相应的节点

$ vagrant ssh node1
Welcome to Ubuntu 16.04.5 LTS (GNU/Linux 4.4.0-134-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

  Get cloud support with Ubuntu Advantage Cloud Guest:
    http://www.ubuntu.com/business/services/cloud

292 packages can be updated.
0 updates are security updates.


*** System restart required ***
Last login: Thu Sep 13 02:57:22 2018 from 10.0.2.2
vagrant@node1:~$ whoami
vagrant

使用 exit 命令退出Vagrant,返回宿主机。

$ exit
logout
Connection to 127.0.0.1 closed.

关于EMQ X 的项目路径在 ~/emqx 大家可以进入 ~/emqx 继续本次实验。本文后续路径如无特别说明都是基于 ~/emqx 展开的。

开始实验

首先查看 etc/emqx.conf 文件,EMQ X 消息服务器的主要配置文件即本文件。查看node.namenode.name的格式要求为 Name@Host, Host必须是IP地址或FQDN(主机名.域名),默认为emqx@127.0.0.1,在环境初始化的时候已经帮大家改成了 emqx@本机ip 的格式

$ vim etc/emqx.conf
## Node name.
##
## See: http://erlang.org/doc/reference_manual/distributed.html
##
## Value: <name>@<host>
##
## Default: emqx@127.0.0.1
node.name = emqx@192.168.233.111

执行 ./bin/emqx console命令使用控制台调试模式启动,检查 EMQ X 是否可正常启动:

starting emqx on node 'emqx@192.168.233.111'
emqx ctl is starting...[ok]
emqx hook is starting...[ok]
emqx router is starting...[ok]
emqx pubsub is starting...[ok]
emqx stats is starting...[ok]
emqx metrics is starting...[ok]
emqx pooler is starting...[ok]
emqx trace is starting...[ok]
emqx client manager is starting...[ok]
emqx session manager is starting...[ok]
emqx session supervisor is starting...[ok]
emqx wsclient supervisor is starting...[ok]
emqx broker is starting...[ok]
emqx alarm is starting...[ok]
emqx mod supervisor is starting...[ok]
emqx bridge supervisor is starting...[ok]
emqx access control is starting...[ok]
emqx system monitor is starting...[ok]
dashboard:http listen on 0.0.0.0:18083 with 2 acceptors.
mqtt:tcp listen on 0.0.0.0:1883 with 8 acceptors.
mqtt:ssl listen on 0.0.0.0:8883 with 4 acceptors.
mqtt:ws listen on 0.0.0.0:8083 with 4 acceptors.
Erlang MQTT Broker 3.0 is running now

CTRL+C 关闭控制台。守护进程模式启动:

./bin/emqx start

EMQ X 消息服务器进程状态查询:

$ ./bin/emqx_ctl status
Node 'emqx@127.0.0.1' is started
emqx 3.0 is running

停止服务器:

./bin/emqx stop

每次修改了 etc/emqx.conf 文件,都需要手动重启EMQ X

manual 手动创建集群

依次修改三个节点的 etc/emqx.conf 文件

cluster.discovery = manual

在三个节点上依次执行 ./bin/emqx start 启动 EMQ X 服务器

vagrant@node1:~/emqx-rel/_rel/emqx$ ./bin/emqx start
emqx 3.0 is started successfully!

在任意一台节点上使用 ./bin/emqttd_ctl cluster join 命令来加入集群

vagrant@node2:~/emqx-rel/_rel/emqx$ ./bin/emqttd_ctl cluster join 
emqx@192.168.233.111

Join the cluster successfully.
Cluster status: [{running_nodes,['emqx@192.168.233.111',
                                  'emqx@192.168.233.112']}]

在另一台节点上也可以使用相同的命令加入集群

vagrant@node3:~/emqx-rel/_rel/emqx$ ./bin/emqttd_ctl cluster join 
emqx@192.168.233.111

Join the cluster successfully.
Cluster status: [{running_nodes,['emqx@192.168.233.111',
                                  'emqx@192.168.233.112',
                                  'emqx@192.168.233.113']}]

查询集群状态

任意节点上可以使用 ./bin/emqttd_ctl cluster status 命令查询集群状态:

vagrant@node1:~/emqx-rel/_rel/emqx$ ./bin/emqttd_ctl cluster status
Cluster status: [{running_nodes,['emqx@192.168.233.111',
                                  'emqx@192.168.233.112',
                                  'emqx@192.168.233.113']}]

退出集群

节点退出集群有两种方式:

  1. 在本节点使用 ./bin/emqttd_ctl cluster leave 命令主动退出集群
vagrant@node1:~/emqx-rel/_rel/emqx$ ./bin/emqttd_ctl cluster leave
ok
  1. 在任意节点使用 ./bin/emqttd_ctl cluster cluster force-leave 命令删除节点
vagrant@node2:~/emqx-rel/_rel/emqx$ ./bin/emqttd_ctl cluster force-leave emqx@192.168.233.113
ok

基于 static 节点列表自动集群

依次修改三个节点的 etc/emqx.conf 文件

cluster.discovery = static

##--------------------------------------------------------------------
## Cluster with static node list

## 集群的节点名称
cluster.static.seeds = emqx@192.168.233.113,emqx@192.168.233.112,emqx@192.168.233.111

在三个节点上依次执行 ./bin/emqx start 启动 EMQ X 服务器

vagrant@node1:~/emqx-rel/_rel/emqx$ ./bin/emqx start
emqx 3.0 is started successfully!

任意节点上使用 ./bin/emqttd_ctl cluster status 命令查询集群状态:

vagrant@node1:~/emqx-rel/_rel/emqx$ ./bin/emqttd_ctl cluster status
Cluster status: [{running_nodes,['emqx@192.168.233.111',
                                  'emqx@192.168.233.112',
                                  'emqx@192.168.233.113']}]

基于 etcd 自动集群

基于etcd的自动集群需要有提供的etcd服务,我们可以使用vagrant快速搭建一个最简单的etcd服务,从而达到自动集群的目的。

使用exit退出vagrant回到宿主机

vagrant@node1:~$ exit
logout
Connection to 127.0.0.1 closed.

新建一个目录用于创建新的虚拟机,进入目录后执行 vagrant init ubuntu/xenial6 命令初始化一个新的 Vagrantfile

$ vagrant init ubuntu/xenial64
A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation on
`vagrantup.com` for more information on using Vagrant.

编辑 Vagrantfile , 将 config.vm.network "private_network", ip: "192.168.33.10" 前面的注释取消掉,如果IP被占用了可以改为其他的IP,我在这里改成了 192.168.233.114

# Create a private network, which allows host-only access to the machine
# using a specific IP.
config.vm.network "private_network", ip: "192.168.233.114"

使用 vagrant up 命令启动虚拟机,并使用 vagrangt ssh 进入虚拟机,因为这次只有一台虚拟机,所以 ssh 命令不需要跟虚拟机名称

$ vagrant up
$ vagrant ssh
Welcome to Ubuntu 16.04.5 LTS (GNU/Linux 4.4.0-134-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

  Get cloud support with Ubuntu Advantage Cloud Guest:
    http://www.ubuntu.com/business/services/cloud

0 packages can be updated.
0 updates are security updates.

使用 wget 命令下载压缩包,解压并进入 etcd 目录

vagrant@ubuntu-xenial:~$wget https://github.com/etcd-io/etcd/releases/download/v3.3.9/etcd-v3.3.9-linux-amd64.tar.gz
vagrant@ubuntu-xenial:~$ tar -zxvf etcd-v3.3.9-linux-amd64.tar.gz
vagrant@ubuntu-xenial:~$ cd etcd-v3.3.9-linux-amd64/

启动 etcd, 命令中的IP地址换成自己在 Vagrantfile 中设置的IP。

vagrant@ubuntu-xenial:~/etcd-v3.3.9-linux-amd64$ ./etcd --advertise-client-urls http://192.168.233.114:2379  --listen-client-urls http://192.168.233.114:2379 --listen-peer-urls http://192.168.233.114:2380

保持 etcd 服务不要关闭,新建一个命令行窗口,进入EMQ X 的三台节点,依次修改三个节点的 etc/emqx.conf 文件

cluster.discovery = etcd

##--------------------------------------------------------------------
## Cluster with Etcd

## 刚才设置的etcd服务的ip
cluster.etcd.server = http://192.168.233.114:2379
## 集群名称, 跟 cluster.name 的配置保持一致
cluster.etcd.prefix = emqcl
�
cluster.etcd.node_ttl = 1m

在三个节点上依次执行 ./bin/emqx start 启动 EMQ X 服务器

vagrant@node1:~/emqx-rel/_rel/emqx$ ./bin/emqx start
emqx 3.0 is started successfully!

任意节点上使用 ./bin/emqttd_ctl cluster status 命令查询集群状态:

vagrant@node1:~/emqx-rel/_rel/emqx$ ./bin/emqttd_ctl cluster status
Cluster status: [{running_nodes,['emqx@192.168.233.111',
                                  'emqx@192.168.233.112',
                                  'emqx@192.168.233.113']}]

相关文章

网友评论

    本文标题:EMQ X 节点发现与自动集群

    本文链接:https://www.haomeiwen.com/subject/dihacqtx.html