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

Hazelcast集群配置需求:Web节点保留ReplicatedMap,排除PartitionedMap存储

解决Hazelcast集群分区Map与复制Map的差异化存储需求

嘿,这个需求完全可以实现!你想要Web应用节点(LM1)不存储Partitioned Map(PM1、PM2)的数据,但要保留Replicated Map(RM)的所有条目,同时其他成员(M1、M2)正常存储两种Map。既然Lite Member不符合要求(它完全不存储任何数据,包括Replicated Map),咱们可以通过节点属性标记+Map过滤配置来精准控制数据存储范围。

1. 给Web节点标记专属属性

首先,在Web节点的Hazelcast配置里添加一个自定义属性,用来区分它和其他数据存储节点:

XML配置方式

<hazelcast>
  <instance-name>LM1-Web-Node</instance-name>
  <properties>
    <!-- 标记该节点为web类型 -->
    <property name="hazelcast.member.type">web</property>
  </properties>
  <!-- 其他基础配置(比如网络、集群发现等) -->
</hazelcast>

Java代码配置方式

Config webNodeConfig = new Config();
webNodeConfig.setInstanceName("LM1-Web-Node");
// 添加web类型标记属性
webNodeConfig.setProperty("hazelcast.member.type", "web");
// 其他基础配置...

2. 配置Partitioned Map,排除Web节点存储

接下来,针对PM1和PM2,设置节点过滤规则,让它们只在非Web节点(M1、M2)上存储数据。Web节点仍然可以对这些Map执行读写操作(Hazelcast会自动路由到存储数据的节点),但不会本地存储任何分区数据。

XML配置方式

<!-- 配置PM1,排除web类型节点 -->
<map name="PM1">
  <node-filter>!member.getAttribute('hazelcast.member.type').equals('web')</node-filter>
</map>

<!-- 对PM2应用同样的过滤规则 -->
<map name="PM2">
  <node-filter>!member.getAttribute('hazelcast.member.type').equals('web')</node-filter>
</map>

Java代码配置方式

Config clusterConfig = new Config();

// 配置PM1的节点过滤规则
MapConfig pm1Config = clusterConfig.getMapConfig("PM1");
pm1Config.setNodeFilter(member -> 
    !"web".equals(member.getAttribute("hazelcast.member.type"))
);

// 给PM2复用同样的过滤规则
MapConfig pm2Config = clusterConfig.getMapConfig("PM2");
pm2Config.setNodeFilter(pm1Config.getNodeFilter());

3. 确保Replicated Map在所有节点同步

Replicated Map默认就是把数据复制到所有集群成员的,咱们只需要确认配置没有修改这个默认行为,保证Web节点加入时能自动同步所有RM条目:

XML配置方式

<replicated-map name="RM">
  <!-- 开启异步填充,节点加入时自动同步所有数据 -->
  <async-fillup>true</async-fillup>
  <!-- replication-count设为0表示复制到所有成员(默认值) -->
  <replication-count>0</replication-count>
</replicated-map>

Java代码配置方式

ReplicatedMapConfig rmConfig = clusterConfig.getReplicatedMapConfig("RM");
// 开启异步填充,确保新节点加入时自动拉取所有数据
rmConfig.setAsyncFillup(true);
// 0表示复制到所有集群成员,无需修改默认值,这里显式写出更清晰
rmConfig.setReplicationCount(0);

4. 验证配置效果

配置完成后,你可以通过以下方式验证:

  • 用Hazelcast管理中心查看PM1/PM2的存储分布,确认Web节点没有存储这些Map的数据
  • 检查RM的存储状态,确保所有节点(包括Web节点)都有完整的Replicated Map副本
  • 在Web节点上测试读写RM,确认可以直接访问本地数据;测试读写PM1/PM2,确认操作能正常执行(数据会路由到M1/M2节点)

内容的提问来源于stack exchange,提问作者T. Gawęda

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 04:28:42