最近一直都在研究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參數等等。