问题求助,Partition occurs恢复后节点上的共享订阅没恢复

问题现象
往emqx@192.168.0.2发消息,emqx@192.168.0.1的共享订阅收不到消息
往emqx@192.168.0.1发消息可以收到

您正在使用的 emqx 版本信息、操作系统类型。【关键】
emqx-5.7.2-el7-amd64.rpm
centos7

提供 emqx 的日志。【关键】
[2026/7/30 21:04:48] 2026-07-30T13:04:49.440592+00:00 [debug] tag: MQTT, clientid: app_wddapptest0001_19887498641_, msg: mqtt_packet_received, peername: 60.173.247.69:34790, username: B_app_wddapptest0001, packet: PUBLISH(Q0, R0, D0, Topic=app/ust/json/wddapptest0001, PacketId=undefined, Payload={“header”:{“flag”:“tdkcloud”,“version”:“v3.3.8.1”,“command”:“sub-device-state”,“userdata”:“19887498641”,“client”:{“id”:“wddapptest0001”,“type”:“3”,“oem”:“A0000,C0000,G0000”,“app”:“1001”}},“content”:{“devid”:[“Qvcloud10”]}})
[2026/7/30 21:04:48] 2026-07-30T13:04:49.440747+00:00 [debug] tag: PUBLISH, clientid: app_wddapptest0001_19887498641_, msg: publish_to, peername: 60.173.247.69:34790, username: B_app_wddapptest0001, topic: app/ust/json/wddapptest0001, payload: <<“{"header":{"flag":"tdkcloud","version":"v3.3.8.1","command":"sub-device-state","userdata":"19887498641","client":{"id":"wddapptest0001","type":"3","oem":"A0000,C0000,G0000","app":"1001"}},"content":{"devid":["Qvcloud10"]}}”>>
[2026/7/30 21:04:48] 2026-07-30T13:04:49.440896+00:00 [debug] tag: RULE_SQL_EXEC, clientid: app_wddapptest0001_19887498641_, msg: rule_activated, peername: 60.173.247.69:34790, username: B_app_wddapptest0001, input: #{flags => #{dup => false,retain => false},id => <<“000657D3B78CD7E7AC5C000165370004”>>,node => ‘emqx@192.168.0.2’,reason => no_subscribers,timestamp => 1785416689440,event => ‘message.dropped’,username => <<“B_app_wddapptest0001”>>,payload => <<“{"header":{"flag":"tdkcloud","version":"v3.3.8.1","command":"sub-device-state","userdata":"19887498641","client":{"id":"wddapptest0001","type":"3","oem":"A0000,C0000,G0000","app":"1001"}},"content":{"devid":["Qvcloud10"]}}”>>,clientid => <<“app_wddapptest0001_19887498641_”>>,topic => <<“app/ust/json/wddapptest0001”>>,qos => 0,peerhost => <<“60.173.247.69”>>,pub_props => #{‘User-Property’ => #{}},publish_received_at => 1785416689440}, environment: #{headers => #{peername => {{60,173,247,69},34790},protocol => mqtt,username => <<“B_app_wddapptest0001”>>,peerhost => {60,173,247,69},properties => #{},proto_ver => 3,client_attrs => #{<<“cli_id”>> => <<“wddapptest0001”>>}}}
[2026/7/30 21:04:48] 2026-07-30T13:04:49.441082+00:00 [debug] tag: RULE_SQL_EXEC, clientid: app_wddapptest0001_19887498641_, msg: SQL_yielded_no_result, peername: 60.173.247.69:34790, username: B_app_wddapptest0001
[2026/7/30 21:04:49] 2026-07-30T13:04:50.562133+00:00 [debug] tag: MQTT, clientid: bad5dcee-d5e1-447d-a67e-9a33201d11911785391434922, msg: raw_bin_received, peername: 116.228.9.66:57432, username: mqtt-test, size: 2, type: hex, bin: C000
[2026/7/30 21:04:49] 2026-07-30T13:04:50.562250+00:00 [debug] tag: MQTT, clientid: bad5dcee-d5e1-447d-a67e-9a33201d11911785391434922, msg: mqtt_packet_received, peername: 116.228.9.66:57432, username: mqtt-test, packet: PINGREQ(Q0, R0, D0)
[2026/7/30 21:04:49] 2026-07-30T13:04:50.562355+00:00 [debug] tag: MQTT, clientid: bad5dcee-d5e1-447d-a67e-9a33201d11911785391434922, msg: mqtt_packet_sent, peername: 116.228.9.66:57432, username: mqtt-test, packet: PINGRESP(Q0, R0, D0)
[2026/7/30 21:04:49] 2026-07-30T13:04:50.587190+00:00 [info] msg: shared_subscriber_down, reason: {shutdown,discarded}, sub_pid: <65489.152358.0>


系统之前运行是正常的吗?问题发生时做过什么操作?【关键】
因为节点之间的网络问题造成了分区,网络后面恢复了

这看起来并不是 emqx@192.168.0.1 上的共享订阅消失,应该是分区恢复后 emqx@192.168.0.2 的集群路由表没有恢复一致。

.1 仍能看到 $share/... 订阅,
.2 收到发布后却记录 reason => no_subscribers
说明 .2 没有把 app/ust/json/... 路由到 .1
.2 的“订阅管理”为空不一定异常;该页显示的是本节点连接持有的订阅。

关键是两节点的主题路由是否一致。

先在两个节点分别执行并对比:

emqx ctl cluster status
emqx ctl topics list | grep 'app/ust/json'
emqx ctl subscriptions list | grep 'app/ust/json'

应急恢复这么做:

  • 先让这些共享订阅客户端重连并重新 SUBSCRIBE,再从 .2 发布一条消息验证。这会重新注册共享订阅路由。
  • 如果仍然是 no_subscribers,先确认 .1 正常承载客户端并排空 .2 的流量,再只滚动重启 .2;不要同时重启两个节点。

长期需要升级。5.7.2 是 2024-08-07 的版本,
后续 5.8.4 修复过“集群节点间歇性连接问题导致全集群路由表状态部分丢失”,和这里的现象接近。
建议先在测试环境升级到仍在维护的 5.8 补丁版本,至少 5.8.4,不要继续停在 5.7.2。

如果重连后仍不能恢复,把上面三条命令在两个节点的完整输出,以及分区前后包含 partitionshared_subscriber_down 的日志贴出来;对了,你的集群共有几个 core/replicant 节点。

谢谢支持,重启了共享订阅客户端重连后问题恢复了

重连前
EMQX@192.168.0.1
[root@ns3144772 emqx]# emqx ctl topics list | grep ‘app/ust/json’
app/ust/json/# → emqx@192.168.0.1
app/ust/json/# → emqx@192.168.0.1
[root@ns3144772 emqx]# emqx ctl subscriptions list | grep ‘app/ust/json’
[root@ns3144772 emqx]#

EMQX@192.168.0.2
[root@ns3144491 emqx]# emqx ctl cluster status
Cluster status: #{running_nodes => [‘emqx@192.168.0.1’,‘emqx@192.168.0.2’],
stopped_nodes => }
[root@ns3144491 emqx]# emqx ctl topics list | grep ‘app/ust/json’
[root@ns3144491 emqx]# emqx ctl subscriptions list | grep ‘app/ust/json’
[root@ns3144491 emqx]#

重连后emqx@192.168.0.2也有了订阅信息
[root@ns3144491 emqx]# emqx ctl topics list | grep ‘app/ust/json’
app/ust/json/# → emqx@192.168.0.1
app/ust/json/# → emqx@192.168.0.1

当前集群有2个core节点,没有replicant 节点

虽然重启解决了,之后要彻底解决,还是得升级版本哈。