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

Hazelcast自动添加成员后又移除问题排查与阻止方案求助

问题排查与解决方案

排查方向

  • 确认MEMBER3的真实身份:
    • 定位MEMBER3对应的物理机器/容器,检查是否存在未授权的Hazelcast实例,或当前两台集群机器上是否有重复启动的应用进程(比如进程未正常终止,导致新实例启动后成为MEMBER3)。
    • 使用netstat -tulpn | grep 5701或lsof -i :5701命令,在相关机器上排查占用5701端口的进程,确认是否有额外的Hazelcast实例在运行。
  • 验证Group配置的唯一性:
    • 检查是否有其他服务/实例使用了与当前集群相同的group name和password,导致MEMBER3能通过认证加入集群。

阻止MEMBER3加入的具体方法(适配Hazelcast 3.7.8)

1. 限制集群允许的接入IP

通过配置Interfaces,仅允许MEMBER1和MEMBER2的IP接入集群,拒绝其他所有IP的连接:

@Bean("hazelcastInstanceTest")
public HazelcastInstance hazelcastInstance() {
    Config config = new Config();
    config.getNetworkConfig().addOutboundPort(0);
    config.getGroupConfig().setName(name).setPassword(password);

    // 新增:配置允许的接入IP
    config.getNetworkConfig().getInterfaces()
          .setEnabled(true)
          .addInterface("MEMBER1_IP") // 替换为MEMBER1的实际IP
          .addInterface("MEMBER2_IP"); // 替换为MEMBER2的实际IP

    JoinConfig joinConfig = config.getNetworkConfig().getJoin();
    joinConfig.getMulticastConfig().setEnabled(false);

    List<String> members = Arrays.asList("MEMBER1:5701","MEMBER2:5701");
    joinConfig.getTcpIpConfig()
            .setMembers(members)
            .setEnabled(true);

    return Hazelcast.newHazelcastInstance(config);
}

2. 强化Group认证

  • 修改集群的group name和password,确保仅当前两台集群实例知晓新的认证信息,彻底阻断未授权实例的加入。

3. 防火墙层面拦截

在MEMBER1和MEMBER2的机器上配置防火墙规则,仅允许对方IP访问5701端口,拒绝其他所有IP的连接:

# 以iptables为例,允许MEMBER2访问MEMBER1的5701端口
iptables -A INPUT -p tcp --dport 5701 -s MEMBER2_IP -j ACCEPT
# 拒绝其他所有IP访问5701端口
iptables -A INPUT -p tcp --dport 5701 -j DROP

4. 检查应用部署逻辑

  • 确认应用部署脚本/容器配置是否存在重复启动的问题(比如容器重启策略导致多实例运行),确保每台机器仅运行一个Hazelcast实例。

补充说明

从日志来看,MEMBER3是主动请求退出集群(requested by: [MEMBER3]:5701),说明该实例本身可能存在启动异常或配置错误,导致加入后立即自行终止,随后重复尝试加入。找到该实例的运行环境并停止它,是彻底解决问题的根本方法。

内容的提问来源于stack exchange,提问作者Adrian Scarlatescu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 12:45:00