文章目錄
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