neo4j高可用集群永远一台master,0到多台slave。不同于类似mongo的副本集,neo4j的slave也可以写数据。如果slave被写了数据,slave会同步给master, master会立即推送给其他slave,但 master只管推送,这个推送可能失败,但是只要master收到了这个数据,就算写成功。所以给slave写数据,并不能完全保证其他slave立马就能读。
neo4j高可用集群中的每台机器都要有一个唯一不重复的整数id,在neo4j.properties中的ha.server_id设置。随后neo4j实例启动后会自动去ha.initial_hosts中去尝试联系其他的实例,每和其他的实例建立了连接,实例会判断当前的集群状态,决定是否可以加入。所以,搭建环境的时候,最好大家都没数据,或者是新的没数据的节点加入进来,否则会失败。
ha.cluster_server ,这里配置的是监听集群里实例间通信的端口,比如心跳。默认端口是5001。ha.server 这个设置的是数据同步通信的端口。默认是6001,不能和ha.cluster_server重复。另外还有个online_backup_server,这里配置的是监听备份请求的端口,和上面两个也不能重复,随便设置一个就ok了。
搭建高可用集群时,还要在neo4j-server.properties中开启
org.neo4j.server.database.mode=HA
另外在一台机器上云新多个实例,注意要把http页面的端口都改了,避免重复。
二、部署
首先下载企业版neo4j,社区版的貌似没有高可用。将下载下来的解压到3个不同的文件夹,分别修改配置文件。
第一个实例
#neo4j.properties ha.server_id=1 ha.initial_hosts=127.0.0.1:5001,127.0.0.1:5002,127.0.0.1:5003 ha.server=127.0.0.1:6001 ha.cluster_server=127.0.0.1:5001 dbms.pagecache.memory=200m online_backup_server=127.0.0.1:6004 #neo4j-server.properties org.neo4j.server.database.mode=HA org.neo4j.server.webserver.port=7474 org.neo4j.server.webserver.https.port=7473
第二个实例
#neo4j.properties ha.server_id=2 ha.initial_hosts=127.0.0.1:5001,127.0.0.1:5002,127.0.0.1:5003 ha.server=127.0.0.1:6002 ha.cluster_server=127.0.0.1:5002 dbms.pagecache.memory=200m online_backup_server=127.0.0.1:6005 #neo4j-server.properties org.neo4j.server.database.mode=HA org.neo4j.server.webserver.port=7574 org.neo4j.server.webserver.https.port=7573
第三个实例
#neo4j.properties ha.server_id=3 ha.initial_hosts=127.0.0.1:5001,127.0.0.1:5002,127.0.0.1:5003 ha.server=127.0.0.1:6003 ha.cluster_server=127.0.0.1:5003 dbms.pagecache.memory=200m online_backup_server=127.0.0.1:6006 #neo4j-server.properties org.neo4j.server.database.mode=HA org.neo4j.server.webserver.port=7674 org.neo4j.server.webserver.https.port=7673
配置好后,依次启动三个实例,在windows下,运行neo4j.bat就可以了。
初次启动要等一会,然后就看到启动成功。
之后分别浏览器登录http://127.0.0.1:7474, http://127.0.0.1:7574, http://127.0.0.1:7674 。看到三个实例都启动成功。在7474上创建node.
CREATE (ee:Person { name: "hutao", from: "Sweden", klout: 99 })
然后在7574和7674上查询
MATCH (ee:Person) WHERE ee.name = "hutao" RETURN ee;
看到已经复制成功。
登录http://127.0.0.1:7474/webadmin可以看到高可用集群状态