嵌入模式下的neo4j HA结构

时间:2014-10-18 12:25:53

标签: neo4j spring-data-neo4j

我希望使用neo4j数据库在我的应用程序中使用此结构。

enter image description here

这里我将我的应用程序部署在三个不同的服务器上,每个服务器都有自己的嵌入式neo4j数据库。

我希望所有数据库都自动同步。

我的大尺寸数据应用程序没问题吗?

我正在使用Spring数据neo4j,如何在SDN中配置这个结构。

我是否需要neo4j的企业版。

可以使用的其他框架/技术吗?

我几乎完成了这样的结构

我的网络应用程序部署在

  1. localhost:8088 xml-> ha.server_id = 1和dbptah = E:/ data1

  2. localhost:8089 xml-> ha.server_id = 2和dbptah = E:/ data2

  3. localhost:8090 xml-> ha.server_id = 3和dbptah = E:/ data3

  4. Neo4j服务器正在运行:

    1. localhost:7474 properties-> ha.server_id = 1和dbptah = E:/ data1

    2. localhost:7475 properties-> ha.server_id = 2和dbptah = E:/ data2

    3. localhost:7476 properties-> ha.server_id = 3和dbptah = E:/ data3

    4. 现在当我运行我的网络应用程序时,它给了我错误:

      Caused by StoreLockException: Unable to obtain lock on store lock file: 
      

      似乎它无法访问neo4j服务器正在使用的目录,那么我如何在我的网络应用程序中配置xml?

1 个答案:

答案 0 :(得分:2)

在回答您的第一个问题时,是的,使用SDN运行Neo4j-enterprise(HA)非常适合在负载均衡器后面放置大量数据的项目。我知道有一个问题,那就是SDN还没有被开发用来理解HA。这给我带来了一个问题,因为某些操作只能在主节点上执行(我的意思是),所以你必须对它进行编码。

一旦您了解了如何,使用HA的SDN很容易配置!这是我使用的代码,最初是从Stefan Armbruster借来的。

<util:map id="config">
   <entry key="ha.server_id" value="1"/>
   <entry key="ha.initial_hosts" value="thisserver.com:5001,yoursecondserver.com:5001,yourthirdserver.com:5001"/>
</util:map>

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

<bean id="graphDbBuilder" factory-bean="graphDbFactory" factory-method="newHighlyAvailableDatabaseBuilder">
     <constructor-arg value="/tmp/neo4j"/>
</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" />

在顶部的地图中,您可以在文档herehere中找到您可能找到的任何设置。群集运行后,您可以删除新节点,要求ha.server_id值是唯一的,但initial_hosts不需要完全填充。如果为ha.server和ha.cluster_server属性设置值,您的生活将更加简单。

对于性能,您需要尝试最小化Slave节点上的写入,有一些关于如何在Neo Site上实现此目的的优秀文档,基本上配置负载均衡器以根据来自的响应做出路由决策特殊的HA端点。

/db/manage/server/ha/master
/db/manage/server/ha/slave
/db/manage/server/ha/available

不幸的是我无法使用它,因此对于非关键写入,我将它们发布到仅在主节点上处理的消息队列。

HA会自动保持您的数据同步,并且也会启用实时备份,当Master死亡以宣传另一个集群成员时,将会进行选举。由于Neo离开了ZooKepper,因此设置起来很简单。

现在,艰难的部分。授权。 HA是企业,据我了解APGL的应用程序,您需要购买许可证或开源代码。网站personal上还有另一种许可模式,允许您和一个小团队(+2人)制作可能需要高达100000美元的软件,但您只需支持SO即可获得支持......

任何其他框架,可能,但不是我熟悉的 - Graphene可能是一个开始调查的好地方,但是如果你想卸载扩展责任。