节点发现与自动集群

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

EMQ X 支持多种策略创建集群:

策略说明
manual手动命令创建集群
static静态节点列表自动集群
mcastUDP 组播方式自动集群
dnsDNS A 记录自动集群
etcd通过 etcd 自动集群
k8sKubernetes 服务自动集群

manual 手动创建集群

默认配置为手动创建集群,节点通过 ./bin/emqx_ctl join <Node> 命令加入:

  1. cluster.discovery = manual

基于 static 节点列表自动集群

配置固定的节点列表,自动发现并创建集群:

  1. cluster.discovery = static
  2. cluster.static.seeds = emq1@127.0.0.1,ekka2@127.0.0.1

基于 mcast 组播自动集群

基于 UDP 组播自动发现并创建集群:

  1. cluster.discovery = mcast
  2. cluster.mcast.addr = 239.192.0.1
  3. cluster.mcast.ports = 4369,4370
  4. cluster.mcast.iface = 0.0.0.0
  5. cluster.mcast.ttl = 255
  6. cluster.mcast.loop = on

基于 DNS A 记录自动集群

基于 DNS A 记录自动发现并创建集群:

  1. cluster.discovery = dns
  2. cluster.dns.name = localhost
  3. cluster.dns.app = ekka

基于 etcd 自动集群

基于 etcd 节点发现与自动集群 - 图1 (opens new window) 自动发现并创建集群:

  1. cluster.discovery = etcd
  2. cluster.etcd.server = http://127.0.0.1:2379
  3. cluster.etcd.prefix = emqcl
  4. cluster.etcd.node_ttl = 1m

基于 Kubernetes 自动集群

Kubernetes 节点发现与自动集群 - 图2 (opens new window) 下自动发现并创建集群:

  1. cluster.discovery = k8s
  2. cluster.k8s.apiserver = http://10.110.111.204:8080
  3. cluster.k8s.service_name = ekka
  4. ## Address Type: ip | dns
  5. cluster.k8s.address_type = ip
  6. ## The Erlang application name
  7. cluster.k8s.app_name = ekka