Spring数据neo4j多个服务器

时间:2014-10-07 11:20:53

标签: spring neo4j spring-data-neo4j

我正在为我的neo4j数据库使用spring数据neo4j框架,我已经配置了neo4j服务器,如下所示:

    <bean id="graphDatabaseService"
        class="org.springframework.data.neo4j.rest.SpringRestGraphDatabase">
        <constructor-arg value="http://localhost:7474/db/data" />
    </bean>

    <neo4j:config graphDatabaseService="graphDatabaseService" />

    <neo4j:repositories base-package="sample" />

我的问题是如何在SDN中配置多个neo4j服务器,因为neo4j数据库支持HA,我们可以拥有多个slave和一个主服务器。

1 个答案:

答案 0 :(得分:2)

SDN不允许您配置HA服务器列表以在使用SpringRestGraphDatabase类时发出请求。这意味着如果要管理服务器群集,则需要将它们放在单个入口点后面。通常你要做的是设置你的集群,然后在它前面放一个负载均衡器,让负载均衡器处理路由读取请求到它想要的任何主/从节点(这可能只是循环)并写入请求到主节点。有一些文档可以配置HAProxy来实现此here

运行集群并且负载均衡器路由请求后,您需要修改SDN配置以定位负载均衡器,这意味着将http://localhost:7474/db/data替换为负载均衡器的地址。

原始答案 - SDN作为嵌入式HA服务器

假设您的SDN应用程序将成为群集中的某个服务器,那么您需要创建一个使用稍微不同的模式的HighlyAvailableGraphDatabase:

<util:map id="config">
   <entry key="ha.server_id" value="1"/>
   <entry key="ha.initial_hosts" value="yourotherserver1:5001,yourotherserver2:5001"/>
</util:map>

<bean id="graphDbFactory" 
      class="org.neo4j.graphdb.factory.HighlyAvailableGraphDatabaseFactory"/>

<bean id="graphDbBuilder" factory-bean="graphDbFactory"
      factory-method="newHighlyAvailableDatabaseBuilder">
     <constructor-arg value="/path/to/local/filesystem/store"/>
</bean>

<bean id="graphDbBuilderFinal" factory-bean="graphDbBuilder" factory-method="setConfig">
    <constructor-arg ref="config"/>
</bean>

<bean id="graphDatabaseService" factory-bean="graphDbBuilderFinal"
      factory-method="newGraphDatabase" destroy-method="shutdown" />

<neo4j:config graphDatabaseService="graphDatabaseService"
              base-package="your.graph.package"/>

这假设您有另外两台运行Neo HA节点的服务器,其ha.server_id值不是1。一旦您的群集运行,您可以放入新实例(用于水平扩展),只要哈哈。 server_id值不同。

关于水平扩展的一个重要注意事项是,您仍然希望仅通过主服务器进行写入(您可以写入从服务器但速度较慢),这需要在应用程序前端的负载均衡器上进行一些智能配置,或者在运行时SDN一些定制的代码来推迟写入奴隶。有关SDN的说明并了解主/从设置,请参阅此question

tutorial中记录了设置独立HA节点的信息。 关于Neo Site的可用参数(针对配置图),有很多文档。