同一臺機器中啓動多個neo4j數據庫

0. 背景

對於大量節點和關係的知識圖譜導入neo4j,一般是使用neo4j-admin import。而使用neo4j-admin import導入neo4j的時候需要數據庫是空的,即如果已經有同名數據庫需要預先清空。如果有多個海量節點和關係的知識圖譜,則只能分開獨立存儲於各自的數據庫中。那麼如何在一臺服務器上同時啓動多個neo4j,以應對多個數據庫呢?

1. 默認方式啓動neo4j

在安裝完neo4j後,我們已經在系統環境變量(/etc/profile)添加如下信息:

export NEO4J_HOME=/data/dev_tool/neo4j-community-3.4.6
export PATH=$PATH:$NEO4J_HOME/bin

所以,我們可以直接在終端窗口上用neo4j start命令啓動服務。

查看此時採用conf/neo4j.conf啓動的neo4j服務對於網絡端口的佔用情況:

在這裏插入圖片描述

可以看到,neo4j進程50934佔用了3個端口:7687、7473和7474。其中7687是默認的bolt端口;7473是https端口;7474是http端口。

2. 方案0:指定配置文件啓動neo4j

啓動neo4j的方法下述兩種是等價的:

nohup ./bin/neo4j console  = neo4j start

我們嘗試看下,指定配置文件的啓動方式可設置的參數有哪些?
在這裏插入圖片描述
從上述的返回結果可以看出Neo4j is already running(pid 50934)
所以,./bin/neo4j start --help其實沒有help這個參數,該命令之間嘗試啓動一個neo4j 進程。

嘗試網傳類似如下命令啓動一個新的neo4j服務:

./bin/neo4j start -config neo4j_pkubase.conf -run neo4j_pkubase.pid -log neo4j_pkubase.log

註定會失敗的。查看./bin/neo4j中的腳本內容或者./bin/neo4j --help。可以看出,該腳本只有這幾個參數:console | start | stop | restart | status | version。根本不接受配置文件作爲參數傳入。再細看./bin/neo4j中的腳本內容,能夠進一步確認,裏面具體的參數信息都是基於安裝文件的一級目錄下展開的。

3. 方案1:使用多個安裝文件

由於上述在同一個運行腳本中通過指定配置文件的方案行不通,所以我們嘗試使用多個安裝文件。這裏我們在neo4j官網上又下載了最新版本的neo4j(neo4j-community-3.5.12),原來已經下載的neo4j版本是neo4j-community-3.4.6。注意,需要預先將環境變量中的neo4j註釋掉。具體來說是將/etc/profile中:

export NEO4J_HOME=/data/dev_tool/neo4j-community-3.4.6                             
export PATH=$PATH:$NEO4J_HOME/bin

註釋。
爲了使得端口號不衝突,我們這裏修改neo4j-community-3.5.12中配置文件的bolt、http 和 https 端口號。由於環境變量已經取消了,需要分別進入各自的目錄運行./bin/neo4j start。開啓兩個neo4j服務如下圖所示:

在這裏插入圖片描述

如果上述的環境變量沒有註釋,直接在neo4j-community-3.5.12的bin目錄下啓動neo4j:
在這裏插入圖片描述

另外,修改環境變量之後,除了source /etc/profile之外,還需要重新開一個終端才能夠真正生效。

4. 方案2:使用docker

4.1 拉取 neo4j 鏡像

查看可用的 neo4j 鏡像:

docker search neo4j

結果如下:
在這裏插入圖片描述

拉取鏡像:

docker pull neo4j

那麼我們拉取的這個鏡像具體對應哪個版本呢?我們去https://hub.docker.com/ 查看細節:
在這裏插入圖片描述

點擊進去可以看出對應的版本號是3.5.12:
在這裏插入圖片描述

4.2 創建 neo4j 容器

創建容器:

docker run --name=neo4j_pkubase  -it -p 7473:7473 -p 7474:7474 -p 7687:7687 -d neo4j

其中參數

-i: 以交互模式運行容器,通常與 -t 同時使用;
-t: 爲容器重新分配一個僞輸入終端,通常與 -i 同時使用;

我們這裏用-p參數將本地端口和容器的端口綁定,完成映射。

我們可以查看此時的端口占用情況:

在這裏插入圖片描述

從上圖可以看出,端口的映射是通過docker-proxy啓動的代理進行轉發的,每個端口都需要啓動一個docker-proxy代理服務。

停止容器:

docker container stop neo4j_pkubase

也可以直接kill掉一個容器服務:docker container kill neo4j_pkubase

運行容器:
啓動一個已有的容器:

docker container start neo4j_pkubase

進入容器:
使用下面命令進入一個已經在運行的容器:

docker exec -it neo4j_pkubase /bin/bash

刪除容器:

docker container rm neo4j_pkubase

4.3 創建多個 neo4j 容器

爲了使用本地已經有的配置文件,需要在創建 容器的時候使用映射:
(1)創建一個用於存儲 ownthink 知識圖譜的數據庫:

docker run --name=neo4j_ownthink  -it -p 7473:7473 -p 7474:7474 -p 7687:7687 -v $NEO4J_HOME/conf:/conf -v $NEO4J_HOME/data:/data -v $NEO4J_HOME/certificates:/certificates -v $NEO4J_HOME/import:/import -d neo4j

這裏之所以加入certificates主要是因爲懶,之前已經構建好了ownthink知識圖譜,賬號也創建了,不想改了,直接映射就好了。

(2)創建一個用於存儲 pkubase 知識圖譜的數據庫:

docker run --name=neo4j_pkubase  -it -p 7483:7483 -p 7484:7484 -p 7688:7688 -v $NEO4J_HOME/conf_pkubase:/conf -d neo4j

在這裏插入圖片描述

在網頁上通過ip:7484端口號即可訪問 容器中的 neo4j。
創建完之後,修改密碼爲neo4jpku,賬號依然是neo4j

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章