同一主机上的多个 gemfire 缓存服务器
Multiple gemfire cache-server on same host machine
您好,我想使用 Spring gemfire 8 在同一主机上启动多个 gemfire 缓存服务器。1.Please 在下面找到 gemfire 配置文件。我想使用 Spring Gemfire 配置在同一主机 i.e.HOSTNAME 上启动 GFServer1 和 GFServer2。我想避免 gfsh 命令并从 eclipse 启动所有内容并将客户端连接到同一主机上的这些服务器。
提前致谢
<util:properties id="gemfireProperties">
<prop key="name">Locator_Dev</prop>
<prop key="mcast-port">0</prop>
<prop key="locators">HOSTNAME[1099]</prop>
<prop key="log-level">warning</prop>
<prop key="http-service-port">8181</prop>
<prop key="jmx-manager">true</prop>
<prop key="jmx-manager-port">1199</prop>
<prop key="jmx-manager-start">true</prop>
<prop key="start-locator">HOSTNAME[1099]</prop>
</util:properties>
<gfe:cache properties-ref="gemfireProperties" />
<gfe:cache-server id="GFServer1" auto-startup="true"
bind-address="HOSTNAME" port="40411" host-name-for-clients="HOSTNAME"
load-poll-interval="2000" max-connections="22" max-threads="16"
max-message-count="1000" max-time-between-pings="30000" >
<gfe:subscription-config eviction-type="ENTRY"
capacity="1000" disk-store="diskStore1" />
</gfe:cache-server>
<gfe:cache-server id="GFServer2" auto-startup="true"
bind-address="HOSTNAME" port="40412" host-name-for-clients="HOSTNAME"
load-poll-interval="2000" max-connections="22" max-threads="16"
max-message-count="1000" max-time-between-pings="30000" >
<gfe:subscription-config eviction-type="ENTRY"
capacity="1000" disk-store="diskStore1" />
</gfe:cache-server>
<gfe:disk-store id="diskStore1" queue-size="50"
auto-compact="true" max-oplog-size="10" time-interval="9999">
<gfe:disk-dir
location="D:\NP\WorkSpace\GemfireRegionSolutionNStart\disk-store\store_1"
max-size="20" />
<gfe:disk-dir
location="D:\NP\WorkSpace\GemfireRegionSolutionNStart\disk-store\store_2"
max-size="20" />
</gfe:disk-store>
<gfe:replicated-region id="customer" name="Customer">
</gfe:replicated-region>
<gfe:replicated-region id="bookMaster" name="BookMaster">
</gfe:replicated-region>
</beans>
您发布的配置将在同一个 JVM 中创建两个缓存服务器,即它将在同一个进程中打开两个端口。
如果这不是您想要的,即您想要两个不同的进程,在 Eclipse 中您将必须提供两个运行时配置来启动两个服务器。
有具体问题吗?正如@Swapnil 指出的那样,这将启动 2 GemFire "Cache Servers"(ServerSockets 侦听缓存客户端),因为您已在同一 JVM 内的同一主机上进行了适当配置。无论它是如何执行的(即 IDE,命令行,从 Gfsh 或从 Spring 启动),这都会起作用。
如果您有更具体的问题,请告诉我们,谢谢!
好的...因此您可以从 IDE(例如 Eclipse)中选择一些选项。
如果将上面的 Spring 配置分成 2 个单独的 Spring (Data GemFire) XML 配置文件,每个包含 1 个 <gfe:cache-server>
元素,调用这些文件,例如 spring-gemfire-server1-context.xml 和 spring-gemfire-server2-context.xml,您可以 运行 Spring-based/configure GemFire "data nodes" 和具有以下内容的缓存服务器...
简单的小 Java "main" 程序的参数是上述 Spring XML 配置文件之一的文件系统路径。
更好的是,您可以使用类似...
的 Spring 启动应用程序启动这些 Spring (GemFire) 配置
UsefulSpringBootGemFireApplication
正如您在此处看到的,如果您使用基于 Java 的配置从 Spring 配置 GemFire,则可以使用 @Import
注释(例如,UsefulSpringBasedGemFireConfiguration),或者在您的情况下,XML 使用
@ImportResoruce("/classpath/to/spring-gemfire-server1-context.xml")
注释。
可能(不确定)将系统 属性 值传递到 @ImportResource 注释中,就像这样...
@SpringBootApplication
@ImportResource("${spring-gemfire-context-xml-location}")
class SpringBootGemFireApplication {
...
}
然后,在您的 IDE 中,您可以使用相同的 SpringBootGemFireApplication
class 创建 2 个单独的 "run profiles",然后设置系统 属性(例如 -Dspring-gemfire-context-xml-location=/path/to/spring-gemfire-server1-context.xml
) 适合每个配置。
记住,您可以使用 Spring 的 ResourceLoader path qualifiers(例如 file:、http: 等)从不同的源位置(CLASSPATH、文件)解析您的 Spring GemFire 配置系统等)...请参阅 Spring 框架参考指南 .
超链接部分中的 table ("Table 7.1 Resource strings")
在最坏的情况下,您需要创建 2 个独立但几乎相同的 Spring 启动应用程序 Java main classes 来为每个 GemFire 数据节点启动您的 2 个配置文件(& CacheServer) JVM 进程。但是,希望使用系统 属性 方法可以让您在 2 个单独的 运行 配置文件中回收相同的 class。
因此,现在您有 2 个 GemFire 数据节点 JVM 进程。但是,他的定位器呢?
嗯,你可以像以前一样继续在GemFire数据节点服务器JVM进程中嵌入Locator,但是如果你真的想要一个独立的Locator JVM进程,那么你可以使用下面的,"experimental" class...
这个 class 使用 GemFire 的 LocatorLauncher class 来配置和 bootstrap 来自 Spring 的 GemFire Locator配置。我在 2 年前为客户 POC 创建了这个 class 作为开发人员如何从 Spring config.
配置 GemFire Locator 的示例
Spring XML 配置(由 SpringBootGemFireApplication
@ImportResoruce
注释使用,在另一个 "run profile" 和系统 属性 组合中) , 看起来类似于以下...
现在,您已经有效地实现了 3 个独立的 GemFire JVM 进程(2 个服务器和 1 个定位器)。您可以将其从我们的 IDE 扩展到您想要的任意数量的服务器和定位器,Pulse 将在集群中显示所有这些,前提是集群配置正确(服务器指向定位器等)。
希望这对您有所帮助。
干杯!
约翰
所以你可以配置LocatorLauncherFactoryBean,比如像这样...
<uti:properties id="gemfireProperties">
<prop key="log-level">config</prop>
<prop key="http-service-port">8181</prop>
<prop key="jmx-manager">true</prop>
<prop key="jmx-manager-port">1199</prop>
<prop key="jmx-manager-start">true</prop>
<prop key="locators">host1[10334],host2[11235],...,hostN[20668]</prop>
</util:properties>
<bean id="locator" class="org.spring.data.gemfire.config.LocatorLauncherFactoryBean">
<property name="gemfireProperties" ref="gemfireProperties"/>
<property name="memberName" value="SpringDataGemFireLocator"/>
<property name="bindAddress" value="10.124.12.24"/>
<property name="port" value="12480"/>
</bean>
您可能已经注意到,此定位器可以加入 GemFire 集群中的其他定位器,这些定位器是在“gemfireProperties
”bean 中使用“locators
”GemFire 系统指定的 属性.
注意:“bindAddress
” 属性 到 LocatorLauncherFactoryBean
仅当此定位器 运行 所在的本地主机有多个 NIC 并且您想绑定到特定的 NIC。
此外,我还设置了 JMX 管理器 GemFire 系统属性,使定位器成为并实际启动一个管理器(在端口 1199 上)。这允许您使用 gfsh>connect --locator=localhost[12480]
或 gfsh>connect --jmx-manager=localhost[1199]
.
从 Gfsh 连接到此定位器
基本上,“gemfireProperties
”bean 允许您配置任何 valid GemFire System property.
现在,由于此定位器 运行 来自您的 IDE,您将需要使用指向 [=] 的 $GEMFIRE
环境变量配置 "run profile" 23=] 在发行版中。
例如,我将 $GEMFIRE 环境变量设置为...
/Users/jblum/Downloads/Pivotal/GemStone/Products/GemFire/Pivotal_GemFire_820_b17919_Linux
现在,让您的个人 Spring 配置的 GemFire 服务器连接到集群,这很简单。
同样,您只需要在每个 Spring GemFire 服务器 XML 配置文件中定义一个“gemfireProperties
”bean 和 "locators" GemFire 系统 属性定义,例如...
<uti:properties id="gemfireProperties">
<prop key="log-level">config</prop>
<prop key="locators">localhost[12480]</prop>
</util:properties>
<gfe:cache properties-ref="gemfireProperties"/>
此配置将使 GemFire 数据节点能够连接到集群,如果一切设置正确,则此集群将从 Pulse 可见。
再一次,希望这对您有所帮助。
干杯,
约翰
您好,我想使用 Spring gemfire 8 在同一主机上启动多个 gemfire 缓存服务器。1.Please 在下面找到 gemfire 配置文件。我想使用 Spring Gemfire 配置在同一主机 i.e.HOSTNAME 上启动 GFServer1 和 GFServer2。我想避免 gfsh 命令并从 eclipse 启动所有内容并将客户端连接到同一主机上的这些服务器。 提前致谢
<util:properties id="gemfireProperties">
<prop key="name">Locator_Dev</prop>
<prop key="mcast-port">0</prop>
<prop key="locators">HOSTNAME[1099]</prop>
<prop key="log-level">warning</prop>
<prop key="http-service-port">8181</prop>
<prop key="jmx-manager">true</prop>
<prop key="jmx-manager-port">1199</prop>
<prop key="jmx-manager-start">true</prop>
<prop key="start-locator">HOSTNAME[1099]</prop>
</util:properties>
<gfe:cache properties-ref="gemfireProperties" />
<gfe:cache-server id="GFServer1" auto-startup="true"
bind-address="HOSTNAME" port="40411" host-name-for-clients="HOSTNAME"
load-poll-interval="2000" max-connections="22" max-threads="16"
max-message-count="1000" max-time-between-pings="30000" >
<gfe:subscription-config eviction-type="ENTRY"
capacity="1000" disk-store="diskStore1" />
</gfe:cache-server>
<gfe:cache-server id="GFServer2" auto-startup="true"
bind-address="HOSTNAME" port="40412" host-name-for-clients="HOSTNAME"
load-poll-interval="2000" max-connections="22" max-threads="16"
max-message-count="1000" max-time-between-pings="30000" >
<gfe:subscription-config eviction-type="ENTRY"
capacity="1000" disk-store="diskStore1" />
</gfe:cache-server>
<gfe:disk-store id="diskStore1" queue-size="50"
auto-compact="true" max-oplog-size="10" time-interval="9999">
<gfe:disk-dir
location="D:\NP\WorkSpace\GemfireRegionSolutionNStart\disk-store\store_1"
max-size="20" />
<gfe:disk-dir
location="D:\NP\WorkSpace\GemfireRegionSolutionNStart\disk-store\store_2"
max-size="20" />
</gfe:disk-store>
<gfe:replicated-region id="customer" name="Customer">
</gfe:replicated-region>
<gfe:replicated-region id="bookMaster" name="BookMaster">
</gfe:replicated-region>
</beans>
您发布的配置将在同一个 JVM 中创建两个缓存服务器,即它将在同一个进程中打开两个端口。
如果这不是您想要的,即您想要两个不同的进程,在 Eclipse 中您将必须提供两个运行时配置来启动两个服务器。
有具体问题吗?正如@Swapnil 指出的那样,这将启动 2 GemFire "Cache Servers"(ServerSockets 侦听缓存客户端),因为您已在同一 JVM 内的同一主机上进行了适当配置。无论它是如何执行的(即 IDE,命令行,从 Gfsh 或从 Spring 启动),这都会起作用。
如果您有更具体的问题,请告诉我们,谢谢!
好的...因此您可以从 IDE(例如 Eclipse)中选择一些选项。
如果将上面的 Spring 配置分成 2 个单独的 Spring (Data GemFire) XML 配置文件,每个包含 1 个 <gfe:cache-server>
元素,调用这些文件,例如 spring-gemfire-server1-context.xml 和 spring-gemfire-server2-context.xml,您可以 运行 Spring-based/configure GemFire "data nodes" 和具有以下内容的缓存服务器...
简单的小 Java "main" 程序的参数是上述 Spring XML 配置文件之一的文件系统路径。
更好的是,您可以使用类似...
的 Spring 启动应用程序启动这些 Spring (GemFire) 配置UsefulSpringBootGemFireApplication
正如您在此处看到的,如果您使用基于 Java 的配置从 Spring 配置 GemFire,则可以使用 @Import
注释(例如,UsefulSpringBasedGemFireConfiguration),或者在您的情况下,XML 使用
@ImportResoruce("/classpath/to/spring-gemfire-server1-context.xml")
注释。
可能(不确定)将系统 属性 值传递到 @ImportResource 注释中,就像这样...
@SpringBootApplication
@ImportResource("${spring-gemfire-context-xml-location}")
class SpringBootGemFireApplication {
...
}
然后,在您的 IDE 中,您可以使用相同的 SpringBootGemFireApplication
class 创建 2 个单独的 "run profiles",然后设置系统 属性(例如 -Dspring-gemfire-context-xml-location=/path/to/spring-gemfire-server1-context.xml
) 适合每个配置。
记住,您可以使用 Spring 的 ResourceLoader path qualifiers(例如 file:、http: 等)从不同的源位置(CLASSPATH、文件)解析您的 Spring GemFire 配置系统等)...请参阅 Spring 框架参考指南 .
超链接部分中的 table ("Table 7.1 Resource strings")在最坏的情况下,您需要创建 2 个独立但几乎相同的 Spring 启动应用程序 Java main classes 来为每个 GemFire 数据节点启动您的 2 个配置文件(& CacheServer) JVM 进程。但是,希望使用系统 属性 方法可以让您在 2 个单独的 运行 配置文件中回收相同的 class。
因此,现在您有 2 个 GemFire 数据节点 JVM 进程。但是,他的定位器呢?
嗯,你可以像以前一样继续在GemFire数据节点服务器JVM进程中嵌入Locator,但是如果你真的想要一个独立的Locator JVM进程,那么你可以使用下面的,"experimental" class...
这个 class 使用 GemFire 的 LocatorLauncher class 来配置和 bootstrap 来自 Spring 的 GemFire Locator配置。我在 2 年前为客户 POC 创建了这个 class 作为开发人员如何从 Spring config.
配置 GemFire Locator 的示例 Spring XML 配置(由 SpringBootGemFireApplication
@ImportResoruce
注释使用,在另一个 "run profile" 和系统 属性 组合中) , 看起来类似于以下...
现在,您已经有效地实现了 3 个独立的 GemFire JVM 进程(2 个服务器和 1 个定位器)。您可以将其从我们的 IDE 扩展到您想要的任意数量的服务器和定位器,Pulse 将在集群中显示所有这些,前提是集群配置正确(服务器指向定位器等)。
希望这对您有所帮助。
干杯! 约翰
所以你可以配置LocatorLauncherFactoryBean,比如像这样...
<uti:properties id="gemfireProperties">
<prop key="log-level">config</prop>
<prop key="http-service-port">8181</prop>
<prop key="jmx-manager">true</prop>
<prop key="jmx-manager-port">1199</prop>
<prop key="jmx-manager-start">true</prop>
<prop key="locators">host1[10334],host2[11235],...,hostN[20668]</prop>
</util:properties>
<bean id="locator" class="org.spring.data.gemfire.config.LocatorLauncherFactoryBean">
<property name="gemfireProperties" ref="gemfireProperties"/>
<property name="memberName" value="SpringDataGemFireLocator"/>
<property name="bindAddress" value="10.124.12.24"/>
<property name="port" value="12480"/>
</bean>
您可能已经注意到,此定位器可以加入 GemFire 集群中的其他定位器,这些定位器是在“gemfireProperties
”bean 中使用“locators
”GemFire 系统指定的 属性.
注意:“bindAddress
” 属性 到 LocatorLauncherFactoryBean
仅当此定位器 运行 所在的本地主机有多个 NIC 并且您想绑定到特定的 NIC。
此外,我还设置了 JMX 管理器 GemFire 系统属性,使定位器成为并实际启动一个管理器(在端口 1199 上)。这允许您使用 gfsh>connect --locator=localhost[12480]
或 gfsh>connect --jmx-manager=localhost[1199]
.
基本上,“gemfireProperties
”bean 允许您配置任何 valid GemFire System property.
现在,由于此定位器 运行 来自您的 IDE,您将需要使用指向 [=] 的 $GEMFIRE
环境变量配置 "run profile" 23=] 在发行版中。
例如,我将 $GEMFIRE 环境变量设置为...
/Users/jblum/Downloads/Pivotal/GemStone/Products/GemFire/Pivotal_GemFire_820_b17919_Linux
现在,让您的个人 Spring 配置的 GemFire 服务器连接到集群,这很简单。
同样,您只需要在每个 Spring GemFire 服务器 XML 配置文件中定义一个“gemfireProperties
”bean 和 "locators" GemFire 系统 属性定义,例如...
<uti:properties id="gemfireProperties">
<prop key="log-level">config</prop>
<prop key="locators">localhost[12480]</prop>
</util:properties>
<gfe:cache properties-ref="gemfireProperties"/>
此配置将使 GemFire 数据节点能够连接到集群,如果一切设置正确,则此集群将从 Pulse 可见。
再一次,希望这对您有所帮助。
干杯, 约翰