我有一个GemFire集群,在两台unix机器中有2个定位器和2个服务器。我正在运行一个Spring Boot应用程序,它将GemFire集群作为对等体加入,并尝试创建复制区域,使用Spring Data GemFire加载区域。 Spring Boot应用程序终止后,我没有在集群中看到Region / data。
我在这里错过了什么吗?
GemFire集群没有使用cache.xml
或Spring XML来引导区域。我的想法是通过独立程序创建区域并使其在群集中可用。 SDGF版本是2.0.7
。
的GemFire-config.xml中
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:gfe="http://www.springframework.org/schema/gemfire"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/gemfire http://www.springframework.org/schema/gemfire/spring-gemfire.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">
<util:properties id="gemfireProperties">
<prop key="locators">unix_machine1[10334],unix_machine2[10334]</prop>
<prop key="mcast-port">0</prop>
</util:properties>
<bean id="autoSerializer" class="org.apache.geode.pdx.ReflectionBasedAutoSerializer">
<gfe:cache properties-ref="gemfireProperties" pdx-serializer-ref="autoSerializer" pdx-read-serialized="true"/>
<gfe:replicated-region id="Test" ignore-if-exists="true"/>
<gfe:replicated-region id="xyz" ignore-if-exists="true"/>
</beans>
期望是Spring Boot应用程序终止时,应在群集中创建Region。
这里最简单的方法是使用群集配置服务,并通过gfsh创建区域。有关详细信息,请参阅以下链接
https://docs.spring.io/spring-gemfire/docs/current/reference/html/#bootstrap:cache:advanced
请参阅使用基于群集的配置一节
有关群集配置的更多信息,请参阅以下链接
http://gemfire.docs.pivotal.io/97/geode/configuring/cluster_config/gfsh_persist.html
您的客户端代码可能是连接到gemfire群集的简单gemfire客户端。
你的期望不正确。对于Spring来说,这不是限制,但是GemFire工作的副作用。
如果您使用GemFire API或纯cache.xml
配置集群的GemFire对等缓存实例/成员,则集群也不会“记住”配置。
使用GemFire API,cache.xml
或Spring配置(Spring XML或JavaConfig)时,配置对于成员来说是本地的。在GemFire的Cluster Configuration Service之前,管理员需要在构成集群的所有对等成员之间分发配置(例如cache.xml
)。
然后是Cluster Configuration Service,它使用户能够使用Gfsh定义他们的配置。在Spring配置中,配置/引导群集的对等缓存成员时,可以启用群集配置来配置成员,例如:
<gfe:cache use-cluster-configuration="true" ... />
正如指出here(子弹4)。
但是,使用Gfsh配置每个GemFire对象(Regions
,Indexes
,DiskStores
等)可能非常繁琐,特别是如果你有很多区域。此外,并非所有开发人员都希望使用shell工具。一些开发团队希望将配置与应用程序一起进行版本化,这很有意义。
鉴于你使用的是Spring Boot,你应该看看Spring Boot for Pivotal GemFire,here。
启动集群的另一种方法是使用Spring配置和引导成员,而不是使用Gfsh。我有这个here的例子。当然,您可以使用Spring Boot FAT JAR从命令行运行Spring Boot应用程序。
当然,一些管理员/操作员阻止开发团队以这种方式引导GemFire集群,而是希望团队使用数据库提供的工具(例如Gfsh)。
如果是这种情况,那么开发Spring Boot,GemFire ClientCache
应用程序连接到使用Gfsh启动的独立群集可能会更好。
您仍然可以执行非常小的配置,例如:
start locator --name=LocatorOne
start server --name=ServerOne
start server --name=ServerTwo
...
然后让你的Spring Boot客户端应用程序使用SDG的cluster configuration push功能驱动集群的配置(即区域,索引等)。
有许多不同的选择,所以选择是你的。您需要确定哪种方法最适合您的需求。
希望这可以帮助。