You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

EMQTT集群配置项含义及双节点场景配置方法咨询

我来帮你拆解EMQ集群的这些配置项,结合你的两台节点(emq@192.168.139.111和emq@192.168.139.222)给出具体的配置建议,确保集群能稳定组建运行:

基于组播(mcast)的集群配置

配置项含义

  • cluster.discovery = mcast:指定集群采用组播方式自动发现节点,适合小型局域网环境,节点通过广播消息互相关联。
  • cluster.mcast.addr = 239.192.0.1:组播通信的目标IP,属于预留的组播网段,所有集群节点会通过这个地址收发发现消息。
  • cluster.mcast.ports = 4369,4370:组播使用的端口,4369是Erlang节点默认的epmd服务端口,4370是额外的组播通信端口。
  • cluster.mcast.iface = 0.0.0.0:指定监听的网络接口,0.0.0.0表示监听所有可用的网卡。
  • cluster.mcast.ttl = 255:组播消息的生存时间,决定消息能跨越的路由器数量,局域网内设置为1即可(避免跨网段传播)。
  • cluster.mcast.loop = on:是否允许组播消息回环到发送节点自身,开启后节点能接收到自己发送的组播消息,确保自检正常。

针对你的两台节点的配置

两台节点配置完全一致即可,注意确保局域网内组播功能未被防火墙拦截:

cluster.discovery = mcast
cluster.mcast.addr = 239.192.0.1
cluster.mcast.ports = 4369,4370
cluster.mcast.iface = 0.0.0.0
cluster.mcast.ttl = 1
cluster.mcast.loop = on

基于DNS(dns)的集群配置

配置项含义

  • cluster.discovery = dns:指定通过DNS域名解析来发现集群节点,适合用域名统一管理节点的场景。
  • cluster.dns.name = localhost:用于解析集群节点的域名,DNS服务器需将该域名映射到所有集群节点的IP地址。
  • cluster.dns.app = ekka:EMQ默认使用的Erlang集群管理应用名称,无需修改。

针对你的两台节点的配置

先配置域名解析:可以在DNS服务器上添加一条记录(比如emq-cluster.local),将其解析到192.168.139.111和192.168.139.222;如果没有DNS服务器,也可以在两台节点的/etc/hosts中添加:

192.168.139.111 emq-cluster.local
192.168.139.222 emq-cluster.local

之后两台节点的配置统一为:

cluster.discovery = dns
cluster.dns.name = emq-cluster.local
cluster.dns.app = ekka

基于Etcd的集群配置

配置项含义

  • cluster.discovery = etcd:指定用Etcd分布式键值存储作为集群发现的中心,适合动态管理节点(支持自动加入/移除)的场景。
  • cluster.etcd.server = http://127.0.0.1:2379:Etcd服务的访问地址,节点会连接这里注册自身并发现其他节点。
  • cluster.etcd.prefix = emqcl:Etcd中存储EMQ集群节点信息的键前缀,所有节点数据都会放在这个前缀下。
  • cluster.etcd.node_ttl = 1m:节点在Etcd中的存活有效期,节点会定期刷新该值,超时未刷新会被标记为失效节点。

针对你的两台节点的配置

先搭建好Etcd服务(单节点或Etcd集群均可),假设Etcd地址为http://192.168.139.xxx:2379(替换为实际地址),两台节点配置统一为:

cluster.discovery = etcd
cluster.etcd.server = http://192.168.139.xxx:2379
cluster.etcd.prefix = emqcl
cluster.etcd.node_ttl = 1m

基于K8s(k8s)的集群配置

配置项含义

  • cluster.discovery = k8s:指定通过Kubernetes API发现集群节点,仅适用于在K8s集群内部部署EMQ的场景。
  • cluster.k8s.apiserver = http://10.110.111.204:8080:K8s API服务器的访问地址,EMQ节点通过它获取集群内的EMQ服务实例信息。
  • cluster.k8s.service_name = ekka:K8s中EMQ对应的Service名称,EMQ会通过这个Service筛选同集群的节点。
  • cluster.k8s.address_type = ip | dns:指定获取节点地址的类型,ip用节点IP,dns用节点域名。
  • cluster.k8s.app_name = ekka:K8s中EMQ应用的名称,用于筛选对应的Pod实例。

针对你的两台节点的配置(K8s部署场景)

假设你的K8s API地址为http://your-k8s-apiserver:6443,EMQ对应的Service名称为emq-cluster-service,配置如下:

cluster.discovery = k8s
cluster.k8s.apiserver = http://your-k8s-apiserver:6443
cluster.k8s.service_name = emq-cluster-service
cluster.k8s.address_type = ip
cluster.k8s.app_name = emq

内容的提问来源于stack exchange,提问作者rui yang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:23:21