我正在为我的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和一个主服务器。
答案 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。