同一台机器上的多个版本的 neo4j 服务器

multiple versions of neo4j server at the same machine

我在 Ubuntu 18.04 上下载了两个版本的 neo4j,分别是 "neo4j-community-3.5.12" 和 "neo4j-community-3.5.8"

I 运行 3.5.8 默认设置 我可以从网上看到它。 http://localhost:7474/

对于 3.5.12,我更改了 conf/neo4j.conf 文件并设置了一些其他端口号,以免与默认端口号冲突。

3.5.8 版本 运行 在 :7474 上很好。当我启动 3.5.12 时,日志显示它是 运行ning,但当我从浏览器检查时它不是 运行ning。我尝试了 2 个不同的端口设置,none 有效。下面是日志文件。

为什么不是运行ning?

我看到很多人推荐使用 docker。我也试过了。

我用命令设置了docker一个容器 sudo docker run --name db1 -p7474:7474 -p7687:7687 -d -v /db1/data:/data -v /db1/logs:/logs -v /db1/conf:/conf --env NEO4J_AUTH=none neo4j

这里我有一个现有的 /d1/data/databases/graph.db 文件夹。当我转到 localhost:7474 时,它显示了现有的数据库。

我用命令设置了另一个docker容器 sudo docker run --name db2 -p3001:7474 -p3002:7473 -p3003:7687 -d -v /db2/data:/data -v /db2/logs:/logs -v /db2/conf:/conf --env NEO4J_AUTH=none neo4j

我希望在这里看到一个 EMPTY 数据库,但我又看到了已经存在的数据库。当我转到 db2 中的数据文件夹时。我看到它在这里创建了一些文件。为什么我看到相同的数据库?

另请注意,当我查看数据库时,headers 的网页显示它们正在使用相同的 bolt 端口?

能否复制neo4j镜像,使用不同的镜像生成容器?有帮助吗?

我认识到多个数据库正在 运行 并且处于活动状态 但不知何故我无法通过浏览器访问第二个数据库。

经过一番努力,我的解决办法是不用docker。

从这里去下载一个社区服务器。 https://neo4j.com/download-center/#community。它会给你一个压缩文件。提取它。您将拥有一个名为 neo4j-community-3.5.14 的文件夹。复制 THAT FOLDER。为每个服务器实例制作一个副本。

在该文件夹中,有一个 conf 文件夹,其中有一个名为 neo4j.conf 的文件。打开那个文件。通过更改此文件夹中的一些设置,您可以 运行 许多 neo4j 服务器。更改以下设置

要接受非本地连接,请取消注释此行:

dbms.connectors.default_listen_address=0.0.0.0

更改一些端口号,使它们不会与已使用的端口号相交

dbms.connector.bolt.listen_address=:3003 dbms.connector.https.listen_address=:3002 dbms.connector.http.listen_address=:3001

考虑 docker 命令-

cmd1: sudo docker run --name db1 -p7474:7474 -p7687:7687 -d -v /db1/data:/data -v /db1/logs:/logs -v /db1/conf:/conf --env NEO4J_AUTH=none neo4j


cmd2: sudo docker run --name db2 -p3001:7474 -p3002:7473 -p3003:7687 -d -v /db2/data:/data -v /db2/logs:/logs -v /db2/conf:/conf --env NEO4J_AUTH=none neo4j

容器端口默认公开为 db1 实例的相同主机端口。而 db2 实例系列 3xxx 已被使用。

要浏览 neo4j 提供的 UI,您可以使用映射到 7474 容器端口的 7474 or 3001 端口。


Neo4j 浏览器使用默认值(来自 neo4j.conf)连接到 neo4j 服务器。默认设置如下 bolt://<machineip>:7687,其中 db1 实例已经将容器端口暴露给 7687 主机端口。 在 7687 端口上发现了一个 运行 实例,它为 db1db2 发起了一个 WebSocket 连接。


如何连接到合适的实例?

  1. 使用::server disconnect:server connect 以及适当的 bolt://<machineip>:port 连接字符串

  2. db1 实例螺栓容器端口映射到不同的主机端口(即 7687 除外) 由于没有默认值可用

  3. (首选),设置相同的hostport:containerport组合例如

    cmd2: sudo docker run --name db2 -p3001:7474 -p3002:7473 -p3003:3003-d -v /db2/data:/data -v /db2/logs:/logs -v /db2/conf:/conf --env NEO4J_AUTH=none neo4j

    在这种情况下,必须映射卷以提供 neo4j.conf 更新值 dbms.connector.bolt.listen_address=:3003

如果有人仍然需要它:这里是如何运行两个neo4j数据库neo4j_01和neo4j_02在两个不同的docker容器中,将数据保存在不同的容器中目录并在不同的端口上访问它们。

docker 容器 1:neo4j_01

docker run \
    --name neo4j_01 \
    -p1474:7474 -p1687:7687 \
    -d \
    -v $HOME/neo4j_01/neo4j/data:/data \
    -v $HOME/neo4j_01/neo4j/logs:/logs \
    -v $HOME/neo4j_01/neo4j/import:/var/lib/neo4j/import \
    -v $HOME/neo4j_01/neo4j/plugins:/plugins \
    --env NEO4J_AUTH=username/enterpasswordhere \
    neo4j:latest

docker 容器 2:neo4j_02

    docker run \
    --name neo4j_02 \
    -p2474:7474 -p2687:7687 \
    -d \
    -v $HOME/neo4j_02/neo4j/data:/data \
    -v $HOME/neo4j_02/neo4j/logs:/logs \
    -v $HOME/neo4j_02/neo4j/import:/var/lib/neo4j/import \
    -v $HOME/neo4j_02/neo4j/plugins:/plugins \
    --env NEO4J_AUTH=username/enterpasswordhere \
    neo4j:latest

执行上面的代码后,例如neo4j_01可以在1474端口到达(登录时需要在第一行将bolt端口改为1687,然后在第二行和第三行输入用户名和密码)

您可以使用 docker kill neo4j_01 停止容器并使用 docker start neo4j_01 重新启动它。数据仍将存在。它保存在 $HOME/neo4j_01/neo4j/data 中。

这样做,我没有遇到任何端口问题/访问错误数据库等问题。