multiple versions of neo4j server at the same machine

允我心安 提交于 2020-02-12 04:06:32

问题


I downloaded 2 versions of neo4j on Ubuntu 18.04 which are "neo4j-community-3.5.12" and "neo4j-community-3.5.8"

I run 3.5.8 with default settings I can see it from the web. http://localhost:7474/

For 3.5.12 I changed conf/neo4j.conf file and set some other port numbers for not to conflict with the default ones.

3.5.8 version runs fine on :7474. When I start 3.5.12, the logs says it is running but when I check from browser it is not running. I tried 2 different port settings, none worked. Below is the log file.

Why it is not running?

I see that many people recommended using docker. I also tried that.

I set up docker a container with command 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

here I have an existing /d1/data/databases/graph.db folder. When I go to localhost:7474 it is fine it shows me the existing database.

I set up another docker container with command 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

here I expect to see an EMPTY database but I see the already existing database again. When I go to the data folder inside db2. I see that it created some files here. WHY do I see the same database?

Also note that when I go to see the databases, headers of the web pages showing they are using the same bolt port?

can I copy the neo4j image and use different images to generate containers? Does that help?

I recognized that multiple databases are running and active but somehow I'm not able to reach the second one through a browser.


回答1:


Considering the docker commands-

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

The container ports are defaults exposed as the same host port for db1 instance. Whereas for db2 instance series 3xxx has been used.

To browse the UI provided by neo4j, you can use either 7474 or 3001 port which is mapped to 7474 container port.


Neo4j browser uses defaults (from neo4j.conf) to connect to neo4j server. The default settings are as bolt://<machineip>:7687, where db1 instance has already exposed the container port to 7687 host port. A running instance is found on 7687 port which initiates a WebSocket connection for db1 and db2.


How to connect to an appropriate instance?

  1. Use: :server disconnect and :server connect with the appropriate bolt://<machineip>:port connection string

  2. Map db1 instance bolt container port to different host port (i.e. other than 7687) As no defaults will be available

  3. (Preferred), set the same hostport:containerport combination e.g.

    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

    in this case, a Volume has to be mapped to provide neo4j.conf with updated values as dbms.connector.bolt.listen_address=:3003




回答2:


After a lot of effort, my solution is not to use docker.

Go and download a community server from here. https://neo4j.com/download-center/#community. It will give you a compressed file. Extract it. You will have a folder named like neo4j-community-3.5.14. Make a copy of THAT FOLDER. For each server instance, make a copy.

Inside the folder, there is a conf folder which has a file named neo4j.conf. Open that file. By changing some settings inside this folder, you can run many neo4j servers. Change the below settings

To accept non-local connections, uncomment this line:

dbms.connectors.default_listen_address=0.0.0.0

change some port numbers so that they won't intersect with already used ones

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




回答3:


In case anybody still needs it: Here is how to run two neo4j databases neo4j_01 and neo4j_02 in two different docker containers, saving the data in different directories and accessing them on different ports.

docker container 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 container 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

After executing the code above e.g. neo4j_01 can be reached on port 1474 (when logging in you need to change the bolt port to 1687 in the first line and then enter username and password in second and third line)

You can stop a container with docker kill neo4j_01 and restart it with docker start neo4j_01. Data will still be there. It is saved in $HOME/neo4j_01/neo4j/data.

Doing it like this, I did not encounter any problems with ports/ accessing the wrong database etc.



来源:https://stackoverflow.com/questions/58553552/multiple-versions-of-neo4j-server-at-the-same-machine

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!