最近一直都在研究Neo4j社区版的简单集群,是读写的集群,但是做了很多调研,一直没有得到理想的解决方案,所以又重新整理了思路,一步一步的做,先做读的集群。方案如下:服务+nginx+neo4j,中间放了一层代理nginx,这个代理可以连接N(N>=2)台机器。最后经过多次实践,排除各种问题,最后成功,查询的集群能做到。GOOD!!! 具体步骤如下:
准备工作如下:两台机器,每台机器Neo4j用的版本是社区版3.4.7,这是最新的Neo4j版本,能容纳320亿个节点,320亿个关系,640亿个属性。
Nginx 用的版本是1.13.7,因为我需要这个stream,所以nginx版本必须是1.9版本以上的。
两个安装过程就不说了,网上教程都有。要说的是我采用的Neo4j连接是bolt协议,而bolt协议是建立在tcp协议或者websocket上,所以nginx必须支持tcp协议,所以nginx需要安装stream模块。
还有一个问题,就是集群的neo4j机器必须安装相同的版本和相同的用户名密码,因为客户端访问neo4j时需要ssl秘钥,否则会报General SSLEngine 错误
1,首先,升级nginx工程,让它支持stream功能,默认的Nginx安装功能是不支持的,所以需要升级。升级步骤很简单,如下:
1)cd =/usr/local/nginx/nginx-1.13.7(nginx安装路径) ,执行命令:
./configure --prefix=/usr/local/nginx/nginx-1.13.7 --with-stream
安装stream模块
2)执行 make 命令,不是make install 命令
3)备份nginx命令 ,执行:
cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak
4)把先生成的nginx命令覆盖以前的nginx命令,执行:
cp /usr/local/nginx/nginx-1.13.7/objs/nginx /usr/local/nginx/sbin/nginx
5) 测试是否升级成功,执行
/usr/local/nginx/sbin/nginx -t
成功,第一步升级工作完成。
2,配置nginx.conf文件,配置如下:
stream {
upstream neo4j{
server localhost:17687 weight=2;
server 10.10.8.143:7687;
}
server {
listen 7687;
proxy_pass neo4j; # <--- replace this with your neo4j server and bolt port<br />
}
}
然后保存,退出。
3,设置neo4j.conf,cd到neo4j的安装路径下,找到neo4j.conf配置文件,打开,修改如下:
# Bolt connector
dbms.connector.bolt.enabled=true
#dbms.connector.bolt.tls_level=OPTIONAL
dbms.connector.bolt.listen_address=:17687
保存,退出。
4,分别启动neo4j,启动nginx,分别查看是否启动成功,启动成功后,测试,为了达到测试效果,两台机器的数据要查询的那个数据不能一样。
注意:遇到最大的坑就是,两台机器的权重不能一样,必须有权重大小的区别。如图:
最后,社区版图库读集群成功。为了达到简单集群的效果,可以把相同的数据同时往两台机器的图库写数据,开启事务,保证数据的一致性。同时上面的配置还有很多可以优化的地方,比如nginx可以配置keepalived参数等等。