同一台主机上有多个gemfire缓存服务器

时间:2015-09-28 07:18:11

标签: gemfire spring-data-gemfire geode

您好我想使用Spring gemfire 8.1在同一台主机上启动多个gemfire缓存服务器。请在下面找到gemfire配置文件。我想使用Spring Gemfire配置在同一主机ieHOSTNAME上启动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> 

4 个答案:

答案 0 :(得分:1)

您发布的配置将在同一个JVM中创建两个缓存服务器,即它将在同一个进程中打开两个端口。

如果这不是您想要的,即您需要两个不同的进程,在eclipse中您必须提供两个运行时配置来启动这两个服务器。

答案 1 :(得分:1)

是否有具体问题?正如@Swapnil指出的那样,这将启动2个GemFire&#34;缓存服务器&#34; (ServerSockets侦听缓存客户端),因为您已在同一JVM中的同一主机上进行了适当配置。无论如何执行(即IDE,命令行,Gfsh或Spring Boot),这都可以工作。

如果您有更具体的问题,请告诉我们,谢谢!

答案 2 :(得分:1)

所以你可以配置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群集中的其他定位器,这些定位器在&#34; gemfireProperties&#34;豆与&#34; locators&#34; GemFire系统属性。

注意:&#34; bindAddress&#34;仅当运行此定位器的localhost具有多个NIC并且您要绑定到特定NIC时,才需要LocatorLauncherFactoryBean的属性。

此外,我已设置JMX Manager GemFire系统属性以使Locator成为并实际启动Manager(在端口1199上)。这样,您就可以使用gfsh>connect --locator=localhost[12480]gfsh>connect --jmx-manager=localhost[1199]从Gfsh连接到此定位器。

基本上,&#34; gemfireProperties&#34; bean允许您配置任何valid GemFire System property

现在,由于此定位器是在IDE中运行的,因此您需要配置&#34;运行配置文件&#34;使用$GEMFIRE环境变量指向GemFire distribution downloaded from Pivotal's website,以便从此定位器运行Pulse。在决定是否1.启动嵌入式HTTP服务(Jetty)运行GemFire的开箱即用Web应用程序(例如Pulse)时,这是expected by the GemFire Manager's ManagementAgent,以及2.是否可以找到Pulse并启动webapp。发行版中的ManagementAgent looks for Pulse

例如,我将$ GEMFIRE环境变量设置为...

/用户/ jblum /下载/枢转/ GemStone的/产品/的GemFire / Pivotal_GemFire_820_b17919_Linux

现在,为了让您的个人Spring配置的GemFire服务器连接到群集,这很简单。

同样,你只需要一个&#34; gemfireProperties&#34; bean在每个Spring GemFire Server XML配置文件中定义,使用&#34;定位器&#34;定义了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中看到此群集。

再次,希望这会有所帮助。

干杯, 约翰

答案 3 :(得分:0)

好的......所以你在IDE中有一些选项(例如Eclipse)。

如果将上面的Spring配置分成2个单独的Spring(Data GemFire)XML配置文件,每个包含1个<gfe:cache-server>元素,请调用这些文件,例如spring-gemfire-server1-context.xml和spring-gemfire-server2-context.xml,你可以运行基于Spring的/配置GemFire&#34;数据节点&#34;和缓存服务器具有以下...

SimpleSpringApplication

简单的小Java&#34; main&#34; program是上面提到的一个Spring XML配置文件的文件系统路径。

更好的是,你可以使用类似的东西在SpringBoot应用程序中启动这些Spring(GemFire)配置。

UsefulSpringBootGemFireApplication

正如您在此处所看到的,如果您使用基于Java的配置从Spring配置GemFire(例如,UsefulSpringBasedGemFireConfiguration),或者在您的情况下使用XML,则可以使用@Import注释使用 @ImportResoruce("/classpath/to/spring-gemfire-server1-context.xml")注释。

可能(不确定)将System属性值传递给@ImportResource注释,就像这样......

@SpringBootApplication
@ImportResource("${spring-gemfire-context-xml-location}")
class SpringBootGemFireApplication {
  ...
}

然后,在IDE中,您可以创建2个单独的&#34;运行配置文件&#34;使用相同的SpringBootGemFireApplication类,然后为每个配置适当地设置系统属性(例如-Dspring-gemfire-context-xml-location=/path/to/spring-gemfire-server1-context.xml)。

请记住,您可以使用Spring的ResourceLoader path qualifiers(例如file:,http:等)从不同的源位置(CLASSPATH,文件系统等)解析Spring GemFire配置...请参阅 Spring框架参考指南的超链接部分中的表(&#34;表7.1资源字符串&#34;)。

在最坏的情况下,您需要创建2个独立但几乎相同的SpringBoot应用程序Java主类,以便为每个GemFire数据节点(&amp; CacheServer)JVM进程启动2个配置文件。但是,希望使用System属性方法允许您在2个单独的运行配置文件中回收相同的类。

因此,现在您将获得2个GemFire数据节点JVM进程。但是,他的定位器怎么样?

好吧,您可以像以前一样继续在GemFire数据节点服务器JVM流程中嵌入Locator,但如果您真的需要一个独立的Locator JVM流程,那么您可以使用以下内容,&#34; experimental&#34;类...

LocatorLauncherFactoryBean

本课程使用GemFire的LocatorLauncher类来配置和引导Spring配置中的 GemFire Locator 。我在2年前为客户POC创建了这个类,作为开发人员如何从Spring配置中配置 GemFire Locator 的示例。

Spring XML配置(由SpringBootGemFireApplication @ImportResoruce注释用于另一个&#34;运行配置文件&#34;和系统属性组合),看起来类似于以下内容......

locator.xml

现在,您已经有效地实现了3个独立的GemFire JVM进程(2个服务器和1个Locator)。您可以使用我们的IDE将其扩展到所需的许多服务器和定位器,Pulse将在群集中显示所有这些,前提是群集配置正确(服务器指向定位器等)。

希望这有帮助。

干杯! 约翰