Gemfire WAN 网关发送方配置
Gemfire WAN Gateway-sender configuration
我们正在使用 Gemfire WAN 拓扑并且在设置网关发件人时遇到问题。
几个假设:
- 复制区域
- 串行网关发送器
- 手动启动对所有网关发件人都是错误的
假设我们有 2 个集群,在每个集群中,我们有 2 个成员(成员 A 和成员 B)
会员A的cache.xml
<gfe:gateway-sender id="gateway-sender-A" parallel="false" remote-distributed-system-id="2" manual-start="false" />
<gfe:replicated-region name="data" scope="DISTRIBUTED_NO_ACK">
<gfe:replicated-region name="subData" data-policy="REPLICATE" scope="DISTRIBUTED_ACK">
<gfe:gateway-sender-ref bean="gateway-sender-A"/>
</gfe:replicated-region>
</gfe:replicated-region>
会员B的cache.xml
<gfe:gateway-sender id="gateway-sender-B" parallel="false" remote-distributed-system-id="2" manual-start="false" />
<gfe:replicated-region name="data" scope="DISTRIBUTED_NO_ACK">
<gfe:replicated-region name="subData" data-policy="REPLICATE" scope="DISTRIBUTED_ACK">
<gfe:gateway-sender-ref bean="gateway-sender-B"/>
</gfe:replicated-region>
</gfe:replicated-region>
当我们运行 启动一个集群中的两个成员时出现问题。它引发了这个错误:
java.lang.IllegalStateException:无法使用 [gateway-sender-A] 网关发件人 ID 创建区域/数据,因为另一个缓存具有使用 [gateway-sender-B] 网关发件人定义的相同区域ID
查看 "High Availability for Gateway Senders" 文档,我们的理解是我们可以创建 2 个网关发件人,其中只有一个将在给定的时间点进行发送。最终,我们希望一个缓存区域有 2 个网关发件人(每个成员一个),一个作为主要发件人,另一个作为次要发件人。
谢谢
来自Geode documentation,它说
For serial Senders, Queue HA is achieved by configuring identical serial Senders in multiple members. The Queue is replicated between the members.
因此,如果成员 A 和 B 中的两个网关发件人正在执行相同的工作(除了他们的 primary/secondary 角色),您应该使用 "identical" 设置。
在gateway sender中,会有一个成功获取到特定的分布式锁,成为primary sender,通常是第一个出现的。我没有看到 属性 强制一个成为主要的。
如果您想知道,Geode 是 Gemfire 的开源版本。
将两个成员的发件人 ID 更改为相同后,我们遇到了另一个问题:
java.lang.IllegalStateException: Cannot create Gateway Sender
"some-gateway-sender-id" with manual start "false" because another
cache has the same Gateway Sender defined with manual start "true
看来我们的问题是格式不一致。
会员A使用了XML格式
<?xml version="1.0"?>
<!DOCTYPE cache PUBLIC "-//GemStone Systems, Inc.//GemFire Declarative Caching 8.0//EN" "http://www.gemstone.com/dtd/cache8_0.dtd">
会员B使用了Spring Gemfire Data格式
xmlns:gfe="http://www.springframework.org/schema/gemfire" xsi:schemaLocation="http://www.springframework.org/schema/gemfire http://www.springframework.org/schema/gemfire/spring-gemfire.xsd">
<gfe:gateway-sender ...>
我们为两个成员改用 Spring Gemfire 数据格式,这两个问题都解决了。
TL;DR,如果网关发件人在同一集群中并且使用一致的缓存 xml 格式,则它们需要具有相同的 ID。
我们正在使用 Gemfire WAN 拓扑并且在设置网关发件人时遇到问题。
几个假设: - 复制区域 - 串行网关发送器 - 手动启动对所有网关发件人都是错误的
假设我们有 2 个集群,在每个集群中,我们有 2 个成员(成员 A 和成员 B)
会员A的cache.xml
<gfe:gateway-sender id="gateway-sender-A" parallel="false" remote-distributed-system-id="2" manual-start="false" />
<gfe:replicated-region name="data" scope="DISTRIBUTED_NO_ACK">
<gfe:replicated-region name="subData" data-policy="REPLICATE" scope="DISTRIBUTED_ACK">
<gfe:gateway-sender-ref bean="gateway-sender-A"/>
</gfe:replicated-region>
</gfe:replicated-region>
会员B的cache.xml
<gfe:gateway-sender id="gateway-sender-B" parallel="false" remote-distributed-system-id="2" manual-start="false" />
<gfe:replicated-region name="data" scope="DISTRIBUTED_NO_ACK">
<gfe:replicated-region name="subData" data-policy="REPLICATE" scope="DISTRIBUTED_ACK">
<gfe:gateway-sender-ref bean="gateway-sender-B"/>
</gfe:replicated-region>
</gfe:replicated-region>
当我们运行 启动一个集群中的两个成员时出现问题。它引发了这个错误:
java.lang.IllegalStateException:无法使用 [gateway-sender-A] 网关发件人 ID 创建区域/数据,因为另一个缓存具有使用 [gateway-sender-B] 网关发件人定义的相同区域ID
查看 "High Availability for Gateway Senders" 文档,我们的理解是我们可以创建 2 个网关发件人,其中只有一个将在给定的时间点进行发送。最终,我们希望一个缓存区域有 2 个网关发件人(每个成员一个),一个作为主要发件人,另一个作为次要发件人。
谢谢
来自Geode documentation,它说
For serial Senders, Queue HA is achieved by configuring identical serial Senders in multiple members. The Queue is replicated between the members.
因此,如果成员 A 和 B 中的两个网关发件人正在执行相同的工作(除了他们的 primary/secondary 角色),您应该使用 "identical" 设置。
在gateway sender中,会有一个成功获取到特定的分布式锁,成为primary sender,通常是第一个出现的。我没有看到 属性 强制一个成为主要的。
如果您想知道,Geode 是 Gemfire 的开源版本。
将两个成员的发件人 ID 更改为相同后,我们遇到了另一个问题:
java.lang.IllegalStateException: Cannot create Gateway Sender "some-gateway-sender-id" with manual start "false" because another cache has the same Gateway Sender defined with manual start "true
看来我们的问题是格式不一致。
会员A使用了XML格式
<?xml version="1.0"?>
<!DOCTYPE cache PUBLIC "-//GemStone Systems, Inc.//GemFire Declarative Caching 8.0//EN" "http://www.gemstone.com/dtd/cache8_0.dtd">
会员B使用了Spring Gemfire Data格式
xmlns:gfe="http://www.springframework.org/schema/gemfire" xsi:schemaLocation="http://www.springframework.org/schema/gemfire http://www.springframework.org/schema/gemfire/spring-gemfire.xsd">
<gfe:gateway-sender ...>
我们为两个成员改用 Spring Gemfire 数据格式,这两个问题都解决了。