使用Docker和虛擬IP在一臺服務器上靈活部署多個Neo4j實例

使用Docker和虛擬IP在一臺服務器上靈活部署多個Neo4j實例

前言

在現代應用開發中,圖數據庫Neo4j因其強大的關系處理能力而備受青睞。但有時候我們需要在同一臺服務器上運行多個Neo4j實例,比如用于開發測試、多租戶環境或者A/B測試。傳統的端口映射方式需要修改大量配置,而使用虛擬IP方案則更加優雅和靈活。

本文將介紹如何使用Docker和虛擬IP技術,在一臺服務器上部署多個Neo4j實例,并實現按需啟動的靈活管理。

方案優勢

  • 端口一致性:所有實例使用相同的標準端口(7474/7687)
  • IP隔離:通過不同虛擬IP地址區分實例
  • 靈活啟動:可根據資源情況按需啟動單個或多個實例
  • 配置簡單:使用Docker Compose和環境變量管理
  • 性能優化:使用主機網絡模式,減少網絡開銷

環境準備

首先確保服務器已安裝Docker和Docker Compose:

點擊進入docker安裝方法

步驟一:配置虛擬IP

在服務器上設置兩個虛擬IP地址:

# 添加虛擬IP(根據實際網卡名稱調整,通常是ens33或ens33)
sudo ip addr add 192.168.10.100/24 dev ens33
sudo ip addr add 192.168.10.101/24 dev ens33# 驗證IP配置
ip addr show ens33# 設置開機自動添加虛擬IP(可選)
echo 'ip addr add 192.168.10.100/24 dev ens33' | sudo tee -a /etc/rc.local
echo 'ip addr add 192.168.10.101/24 dev ens33' | sudo tee -a /etc/rc.local
sudo chmod +x /etc/rc.local

步驟二:創建項目結構

創建項目目錄并組織文件結構:

mkdir neo4j-cluster
cd neo4j-cluster
mkdir -p {data1,data2,logs1,logs2,import1,import2}

步驟三:配置環境變量

創建 .env 配置文件:

# Neo4j實例啟動控制
START_INSTANCE1=true
START_INSTANCE2=false# 虛擬IP配置
VIP1=192.168.10.100
VIP2=192.168.10.101# Neo4j認證信息
NEO4J_PASSWORD1=password1
NEO4J_PASSWORD2=password2# 公共配置
NEO4J_VERSION=5.13.0

步驟四:創建Docker Compose配置

創建 docker compose.yml 文件:

version: '3.8'services:neo4j-instance1:image: neo4j:${NEO4J_VERSION}container_name: neo4j-instance1network_mode: hostenvironment:- NEO4J_AUTH=neo4j/${NEO4J_PASSWORD1}- NEO4J_apoc_export_file_enabled=true- NEO4J_apoc_import_file_enabled=true- NEO4J_apoc_import_file_use__neo4j__config=true- NEO4JLABS_PLUGINS=["apoc"]- NEO4J_server_bolt_listen__address=${VIP1}:7687- NEO4J_server_http_listen__address=${VIP1}:7474- NEO4J_server_https_listen__address=${VIP1}:7473volumes:- ./data1:/data- ./logs1:/logs- ./import1:/var/lib/neo4j/importrestart: unless-stoppedprofiles: ["instance1"]healthcheck:test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://${VIP1}:7474"]interval: 30stimeout: 10sretries: 3neo4j-instance2:image: neo4j:${NEO4J_VERSION}container_name: neo4j-instance2network_mode: hostenvironment:- NEO4J_AUTH=neo4j/${NEO4J_PASSWORD2}- NEO4J_apoc_export_file_enabled=true- NEO4J_apoc_import_file_enabled=true- NEO4J_apoc_import_file_use__neo4j__config=true- NEO4JLABS_PLUGINS=["apoc"]- NEO4J_server_bolt_listen__address=${VIP2}:7687- NEO4J_server_http_listen__address=${VIP2}:7474- NEO4J_server_https_listen__address=${VIP2}:7473volumes:- ./data2:/data- ./logs2:/logs- ./import2:/var/lib/neo4j/importrestart: unless-stoppedprofiles: ["instance2"]healthcheck:test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://${VIP2}:7474"]interval: 30stimeout: 10sretries: 3

步驟五:管理腳本

創建管理腳本 manage-neo4j.sh

#!/bin/bashset -e# 加載環境變量
if [ -f .env ]; thenexport $(cat .env | grep -v '#' | awk '/=/ {print $1}')
ficase "$1" in"start")echo "正在啟動Neo4j實例..."if [ "$START_INSTANCE1" = "true" ]; thenecho "啟動實例1 (${VIP1})..."docker compose --profile instance1 up -dfiif [ "$START_INSTANCE2" = "true" ]; thenecho "啟動實例2 (${VIP2})..."docker compose --profile instance2 up -dfi;;"stop")echo "正在停止Neo4j實例..."docker compose down;;"restart")echo "正在重啟Neo4j實例..."$0 stopsleep 2$0 start;;"status")echo "Neo4j實例狀態:"docker ps --filter "name=neo4j-instance";;"logs")shiftdocker compose logs $@;;"config")echo "當前配置:"echo "實例1: START_INSTANCE1=$START_INSTANCE1, VIP=$VIP1"echo "實例2: START_INSTANCE2=$START_INSTANCE2, VIP=$VIP2";;"update-env")shiftif [ "$1" = "instance1" ]; thensed -i "s/START_INSTANCE1=.*/START_INSTANCE1=$2/" .envelif [ "$1" = "instance2" ]; thensed -i "s/START_INSTANCE2=.*/START_INSTANCE2=$2/" .envelseecho "用法: $0 update-env {instance1|instance2} {true|false}"fi;;*)echo "用法: $0 {start|stop|restart|status|logs|config|update-env}"echo ""echo "命令說明:"echo "  start       啟動配置的實例"echo "  stop        停止所有實例"echo "  restart     重啟實例"echo "  status      查看實例狀態"echo "  logs        查看日志"echo "  config      顯示當前配置"echo "  update-env  更新啟動配置"exit 1;;
esac

給腳本執行權限:

chmod +x manage-neo4j.sh

步驟六:使用和管理

啟動實例

如docker compose不可用,可以替換為docker compose

# 查看當前配置
./manage-neo4j.sh config# 啟動配置的實例
./manage-neo4j.sh start# 查看狀態
./manage-neo4j.sh status

動態調整配置

# 只啟動實例1
./manage-neo4j.sh update-env instance1 true
./manage-neo4j.sh update-env instance2 false
./manage-neo4j.sh restart# 只啟動實例2
./manage-neo4j.sh update-env instance1 false
./manage-neo4j.sh update-env instance2 true
./manage-neo4j.sh restart# 啟動兩個實例(資源充足時)
./manage-neo4j.sh update-env instance1 true
./manage-neo4j.sh update-env instance2 true
./manage-neo4j.sh restart

訪問實例

  • 實例1: http://192.168.10.100:7474 (用戶名: neo4j, 密碼: password1)
  • 實例2: http://192.168.10.101:7474 (用戶名: neo4j, 密碼: password2)

故障排除

虛擬IP無法訪問

# 檢查虛擬IP是否設置
ip addr show ens33# 檢查防火墻規則
sudo ufw status
sudo ufw allow from any to 192.168.10.100 port 7474,7687
sudo ufw allow from any to 192.168.10.101 port 7474,7687

端口沖突

如果端口已被占用,可以檢查并終止沖突進程:

sudo lsof -i :7474
sudo lsof -i :7687

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/97861.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/97861.shtml
英文地址,請注明出處:http://en.pswp.cn/web/97861.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

K8s學習筆記(一):Kubernetes架構-原理-組件

Kubernetes(簡稱 K8s)是一款開源的容器編排平臺,核心目標是實現容器化應用的自動化部署、擴展、故障恢復和運維管理。其設計遵循 “主從架構”(Control Plane Node),組件分工明確,通過 “聲明式…

ensp配置學習筆記 比賽版 vlan 靜態路由 ospf bgp dhcp

學習配置VLAN 虛擬局域網,目的讓兩臺在同一網段的設備,在交換機中訪問。基礎指令:sys 進入系統 sysname R1 修改交換機名字為R1 display cur 查看數據、端口等交換機信息 (在端口中,可以直接display this 可以直接看…

倉頡編程語言青少年基礎教程:enum(枚舉)類型和Option類型

倉頡編程語言青少年基礎教程:enum(枚舉)類型和Option類型enum 和 Option 各自解決一類“語義級”問題:enum 讓“取值只在有限集合內”的約束從注釋變成編譯器強制;Option 讓“值可能不存在”的語義顯式化。enum類型enu…

javaEE-Spring IOCDI

目錄 1、什么是Spring: 2.什么是IoC: 3. 什么是控制反轉呢? 4.IoC容器具備以下優點: 5.DI是什么: 依賴注?方法: 三種注入方法的優缺點: Autowired注解注入存在的問題: Autowired和Resource的區別&#xff…

TensorFlow Lite 全面解析:端側部署方案與PyTorch Mobile深度對比

1 TensorFlow Lite 基礎介紹 TensorFlow Lite (TFLite) 是 Google 為移動設備(Android, iOS)、微控制器(Microcontrollers)和其他嵌入式設備(如 Raspberry Pi)開發的輕量級深度學習推理框架。它的核心目標是…

mapbox進階,使用jsts實現平角緩沖區

????? 主頁: gis分享者 ????? 感謝各位大佬 點贊?? 收藏? 留言?? 加關注?! ????? 收錄于專欄:mapbox 從入門到精通 文章目錄 一、??前言 1.1 ??mapboxgl.Map 地圖對象 1.2 ??mapboxgl.Map style屬性 1.3 ??jsts myBufferOp 緩沖區生成對對象 …

linux裝好顯卡后如何檢查

背景:客戶通知裝好了顯卡,我們去機器上查看一下一. 使用到的命令 watch -n 1 nvidia-smi 可實時查看gpu的使用率nvidia-smi 之查看一次 二、查看內存和顯存 內存使用命令 free -h,顯存使用 nvidia-smi 這只是查看的navidia, 其他品牌的會不一樣

人工智能深度學習——卷積神經網絡(CNN)

一、圖像卷積運算 對圖像矩陣與濾波器矩陣進行對應相乘再求和運算,轉化得到新的矩陣。 作用:快速定位圖像中某些邊緣特征 英文:convolution(CNN)池化層實現維度縮減 池化:按照一個固定規則對圖像矩陣進行處…

SaaS 建站從 0 到 1 教程:Vue 動態域名 + 后端子域名管理 + Nginx 配置

SaaS 建站從 0 到 1 教程:Vue 動態域名 后端子域名管理 Nginx 配置 一、什么是 SaaS 建站? SaaS(Software as a Service)建站,就是通過一套統一的系統,支持用戶在線注冊、綁定域名、快速生成專屬網站。…

關于神經網絡中回歸的概念

神經網絡中的回歸詳解 引言 神經網絡(NeuralNetworks)是一種強大的機器學習模型,可用于分類和回歸任務。本文聚焦于神經網絡中的回歸(Regression),即預測連續輸出值(如房價、溫度)。…

JAVASCRIPT 前端數據庫-V9--仙盟數據庫架構-—仙盟創夢IDE

老版本 在v1 版本中我們講述了 基礎版的應用JAVASCRIPT 前端數據庫-V1--仙盟數據庫架構-—-—仙盟創夢IDE-CSDN博客接下載我們做一個更復雜的的其他場景由于,V1查詢字段必須 id接下來我們修改了了代碼JAVASCRIPT 前端數據庫-V2--仙盟數據庫架構-—-—仙盟創夢IDE-CS…

k8s核心資料基本操作

NamespaceNamespace是kubernetes系統中的一種非常重要資源,它的主要作用是用來實現多套環境的資源隔離或者多租戶的資源隔離。默認情況下,kubernetes集群中的所有的Pod都是可以相互訪問的。但是在實際中,可能不想讓兩個Pod之間進行互相的訪問…

PostgreSQL——分區表

分區表一、分區表的意義二、傳統分區表2.1、繼承表2.2、創建分區表2.3、使用分區表2.4、查詢父表還是子表2.5、constraint_exclusion參數2.6、添加分區2.7、刪除分區2.8、分區表相關查詢2.9、傳統分區表注意事項三、內置分區表3.1、創建分區表3.2、使用分區表3.3、內置分區表原…

Linux任務調度全攻略

Linux下的任務調度分為兩類,系統任務調度和用戶任務調度。系統任務調度:系統周期性所要執行的工作,比如寫緩存數據到硬盤、日志清理等。在/etc目錄下有一個crontab文件,這個就是系統任務調度的配置文件。/etc/crontab文件包括下面…

回溯算法通關秘籍:像打怪一樣刷題

🚀 回溯算法通關秘籍:像打怪一樣刷題! 各位同學,今天咱們聊聊 回溯算法(Backtracking)。它聽起來玄乎,但其實就是 “暴力搜索 剪枝” 的優雅版。 打個比方:回溯就是在迷宮里探險&am…

嵌入式Linux常用命令

📟 核心文件與目錄操作pwd-> 功能: 打印當前工作目錄的絕對路徑。-> 示例: pwd -> 輸出 /home/user/projectls [選項] [目錄]-> 功能: 列出目錄內容。-> 常用選項:-l: 長格式顯示(詳細信息)-a: 顯示所有文件(包括隱…

深入理解 Linux 內核進程管理

在 Linux 系統中,進程是資源分配和調度的基本單位,內核對進程的高效管理直接決定了系統的性能與穩定性。本文將從進程描述符的結構入手,逐步剖析進程的創建、線程實現與進程終結的完整生命周期,帶您深入理解 Linux 內核的進程管理…

ACP(三):讓大模型能夠回答私域知識問題

讓大模型能夠回答私域知識問題 未經過特定訓練答疑機器人,是無法準確回答“我們公司項目管理用什么工具”這類內部問題。根本原因在于,大模型的知識來源于其訓練數據,這些數據通常是公開的互聯網信息,不包含任何特定公司的內部文檔…

使用Xterminal連接Linux服務器

使用Xterminal連接Linux服務器(VMware虛擬機)的步驟如下,前提是虛擬機已獲取IP(如 192.168.31.105)且網絡互通: 一、準備工作(服務器端確認)確保SSH服務已安裝并啟動 Linux服務器需要…

ChatBot、Copilot、Agent啥區別

以下內容為AI生成ChatBot(聊天機器人)、Copilot(副駕駛)和Agent(智能體/代理)是AI應用中常見的三種形態,它們在人機交互、自動化程度和任務處理能力上有著顯著的區別。特征維度ChatBot (聊天機器…