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

如何配置双节点Pivotal GemFire集群实现区域数据同步?

搭建双节点Pivotal GemFire集群(每节点含Locator+Cache Server,复制区域同步)

看起来你已经迈出了搭建GemFire集群的第一步,我来帮你完成剩下的配置,确保复制区域的数据同步和locator的负载均衡功能正常运行。

一、完成剩余节点的启动配置

既然你已经启动了第一台服务器的locator1和cache-server1,接下来需要让第二台服务器的节点加入集群:

1. 启动第二台服务器的Locator(locator2)

通过gfsh执行以下命令,让locator2发现并加入已有集群:

gfsh> start locator --name=locator2 --bind-address=你的server2-IP --port=10334 --peer-discovery-address=你的server1-IP --peer-discovery-port=10334

这里--peer-discovery-address指定第一台locator的IP,这样两个locator会形成一个对等组,实现负载均衡和故障转移——后续客户端连接任意一个locator都能获取整个集群的节点信息。

2. 启动第二台服务器的Cache Server(cache-server2)

同样通过locator注册到集群,建议同时指定两个locator地址,提升可靠性:

gfsh> start server --name=cache-server2 --bind-address=你的server2-IP --server-port=40404 --locators=你的server1-IP[10334],你的server2-IP[10334]

二、创建复制区域(Replicated Region)

要实现数据在两个cache server间自动同步,核心是创建复制类型的区域,不管用gfsh还是Java API都能实现:

方法1:用gfsh快速创建

先连接到集群(随便连一个locator即可):

gfsh> connect --locator=你的server1-IP[10334]

然后创建复制区域:

gfsh> create region --name=myReplicatedRegion --type=REPLICATE

--type=REPLICATE参数会让GemFire自动在所有在线的cache server上创建这个区域,并且所有写入操作都会同步到所有节点。

方法2:用Java API创建(客户端侧)

如果是在客户端代码中动态创建区域,需要指定复制类型的RegionShortcut:

ClientCache cache = new ClientCacheFactory()
    // 连接到两个locator,实现负载均衡
    .addPoolLocator("你的server1-IP", 10334)
    .addPoolLocator("你的server2-IP", 10334)
    .create();

// 创建复制区域
RegionFactory<String, Object> regionFactory = cache.createRegionFactory(RegionShortcut.REPLICATE);
Region<String, Object> region = regionFactory.create("myReplicatedRegion");

注意:客户端一定要通过locator连接集群,而不是直接连单个cache server,这样locator会自动帮你做请求负载均衡。

三、验证数据同步是否正常

1. 用gfsh验证

  • 先在集群中写入一条数据:
gfsh> put --region=myReplicatedRegion --key="testKey" --value="testValue"
  • 然后查询这条数据,不管你连接的是哪个cache server或者locator,都应该能返回相同的结果:
gfsh> get --region=myReplicatedRegion --key="testKey"

如果返回testValue,说明数据已经在两个节点间同步成功。

2. 用Java客户端验证

写两个简单的客户端程序,一个写入数据,另一个读取:

// 客户端1:写入数据
ClientCache cache1 = new ClientCacheFactory()
    .addPoolLocator("你的server1-IP", 10334)
    .create();
Region<String, Object> region1 = cache1.getRegion("myReplicatedRegion");
region1.put("user1", "Alice");

// 客户端2:读取数据(可以部署在另一台机器)
ClientCache cache2 = new ClientCacheFactory()
    .addPoolLocator("你的server2-IP", 10334)
    .create();
Region<String, Object> region2 = cache2.getRegion("myReplicatedRegion");
System.out.println("读取到的数据:" + region2.get("user1")); // 应该输出Alice

四、关键注意事项

  • Locator的对等通信:两个locator必须能互相访问,所以要确保服务器之间的10334端口(默认locator端口)是开放的,否则无法形成对等组。
  • 区域类型别选错:不要用PARTITION(分区类型),它是把数据分片存储在不同节点,不会全量同步;REPLICATE才是全节点复制的类型。
  • Cache Server的端口开放:除了server端口(默认40404),还要开放peer-to-peer通信端口(默认40405),否则cache server之间无法同步数据。
  • 配置持久化(可选):如果需要重启节点后保留数据,可以在创建区域时加上--persistent=true参数,或者在Java API中调用setPersistent(true)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:57:55