最近在研究Neo4j的使用的时候在安装完成后遇到了点小麻烦,主要是Neo4j数据库不是安装在本地的而是安装在服务器上(centos/7)的(自己局域网搭建的),然后写代码进行远程访问的时候一直提示time out的消息,主要提是字段如下:

neobolt.exceptions.serviceunavailable

在网上看了很多博客的解决方法,诸如修改/etc/neo4j/neo4j.conf中的相关行,如下所示:

#*****************************************************************
# Network connector configuration
#*****************************************************************

# With default configuration Neo4j only accepts local connections.
# To accept non-local connections, uncomment this line:
dbms.connectors.default_listen_address=0.0.0.0
# Bolt connector
dbms.connector.bolt.enabled=true
#dbms.connector.bolt.tls_level=OPTIONAL
dbms.connector.bolt.listen_address=:7687

# HTTP Connector. There can be zero or one HTTP connectors.
dbms.connector.http.enabled=true
dbms.connector.http.listen_address=:7474

# HTTPS Connector. There can be zero or one HTTPS connectors.
dbms.connector.https.enabled=true
dbms.connector.https.listen_address=:7473

当然,上述几行代码默认并不是如此,如果要进行远程连接,这几行代码在安装完之后也需要更改为我上面的样子。但是。。。。主要远程连接不上的问题并不在此,而是网络根本没打通,我的主机是Windows10,使用telnet测试相应的端口(需在本地先把telnet调出来),发现压根连不上,也就是端口就没被打开,在服务器主机上把相应的端口添加到iptables中,这里要注意,需要先对iptables进行如下操作,包含未安装的要先安装iptables。

# 检查是否安装iptables
service iptables status

#安装iptables
yum install -y iptables
yum update iptables

# 安装iptables-services
yum install iptables-services

完成了iptables的安装之后,要禁用或者停止掉服务器主机的防火墙:

# 停止firewalld
systemctl stop firewalld

# 禁用firewalld
systemctl mask firewalld

完成了上述操作之后,将下属几行代码添加到iptables中:

iptables -A INPUT -p udp --dport 7687 -j ACCEPT
iptables -A INPUT -p tcp --dport 7687 -j ACCEPT
iptables -A INPUT -p tcp --dport 7474 -j ACCEPT
iptables -A INPUT -p udp --dport 7474 -j ACCEPT

然后保存重启防火墙并查看配置是否生效:

service iptables save

service iptables restart

iptables  -L

我使用的是Python语言,安装了相应的包之后输入下述代码,查看是否可以正常连接Neo4j数据库:

from neo4j import GraphDatabase

driver = GraphDatabase.driver("bolt://192.168.xxx.xxx:7687", auth=("neo4j", "neo4j"))

Bingo.....终于搞定!

更多推荐