neo4j+nginx 實現查詢叢集設定
最近一直都在研究Neo4j社群版的簡單叢集,是讀寫的叢集,但是做了很多調研,一直沒有得到理想的解決方案,所以又重新整理了思路,一步一步的做,先做讀的叢集。方案如下:服務+nginx+neo4j,中間放了一層代理nginx,這個代理可以連線N(N>=2)臺機器。最後經過多次實踐,排除各種問題,最後成功,查詢的叢集能做到。GOOD!!! 具體步驟如下:
準備工作如下:兩臺機器,每臺機器Neo4j用的版本是社群版3.4.7,這是最新的Neo4j版本,能容納320億個節點,320億個關係,640億個屬性。
Nginx 用的版本是1.13.7,因為我需要這個stream,所以nginx版本必須是1.9版本以上的。
兩個安裝過程就不說了,網上教程都有。要說的是我採用的Neo4j連線是bolt協議,而bolt協議是建立在tcp協議或者websocket上。
1,首先,升級nginx工程,讓它支援stream功能,預設的Nginx安裝功能是不支援的,所以需要升級。升級步驟很簡單,如下:
1)cd =/usr/local/nginx/nginx-1.13.7(nginx安裝路徑) ,執行命令:
./configure --prefix=/usr/local/nginx/nginx-1.13.7 --with-stream
安裝stream模組
2)執行 make 命令,不是make install 命令
3)備份nginx命令 ,執行:
cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak
4)把先生成的nginx命令覆蓋以前的nginx命令,執行:
cp /usr/local/nginx/nginx-1.13.7/objs/nginx /usr/local/nginx/sbin/nginx
5) 測試是否升級成功,執行
/usr/local/nginx/sbin/nginx -t
成功,第一步升級工作完成。
2,配置nginx.conf檔案,配置如下:
stream { upstream neo4j{ server localhost:17687 weight=2; server 10.10.8.143:7687; } server { listen 7687; proxy_pass neo4j; # <--- replace this with your neo4j server and bolt port<br /> } }
然後儲存,退出。
3,設定neo4j.conf,cd到neo4j的安裝路徑下,找到neo4j.conf配置檔案,開啟,修改如下:
# Bolt connector
dbms.connector.bolt.enabled=true
#dbms.connector.bolt.tls_level=OPTIONAL
dbms.connector.bolt.listen_address=:17687
儲存,退出。
4,分別啟動neo4j,啟動nginx,分別檢視是否啟動成功,啟動成功後,測試,為了達到測試效果,兩臺機器的資料要查詢的那個資料不能一樣。
注意:遇到最大的坑就是,兩臺機器的權重不能一樣,必須有權重大小的區別。如圖:
最後,社群版相簿讀叢集成功。為了達到簡單叢集的效果,可以把相同的資料同時往兩臺機器的相簿寫資料,開啟事務,保證資料的一致性。同時上面的配置還有很多可以優化的地方,比如nginx可以配置keepalived引數等等。