高可用微服務架構實戰:Nacos集群+Nginx負載均衡,Spring Cloud無縫對接

"當你的注冊中心掛了,整個微服務就變成了無頭蒼蠅。"?這是我在生產環境踩坑后最痛的領悟。今天,我將分享如何用Nacos集群+Nginx搭建堅如磐石的注冊中心,讓你的微服務永不迷路!

在 Windows 環境下配置 Nacos 集群,核心步驟與 Linux 類似,主要是配置持久化數據庫(推薦 MySQL)、設置集群節點列表、修改配置文件并分別啟動各個 Nacos 實例。

為什么你的微服務需要這個方案?

在分布式系統中,注冊中心就是微服務的地圖導航。一旦它宕機:

  • 服務發現機制崩潰 😱

  • 配置更新全面停滯 ??

  • 整個系統陷入癱瘓 💥

傳統單點部署的Nacos就像走鋼絲,而我們的方案提供:

  • ??99.99%高可用性?- 集群自動故障轉移

  • ??動態擴展能力?- 隨時添加新節點

  • ??零感知升級?- 逐個節點滾動更新

  • ??智能流量分配?- Nginx負載均衡策略

前置準備

  1. 安裝 JDK 8+

    • 下載?Oracle JDK?或?OpenJDK

    • 安裝并配置環境變量:

      • JAVA_HOME?= JDK 安裝路徑(如?C:\Program Files\Java\jdk-17

      • 在?Path?中添加?%JAVA_HOME%\bin

    • 驗證:打開 CMD,執行?java -version,輸出版本信息即成功。

  2. 下載 Nacos Server

    • 訪問?Nacos GitHub Releases

    • 下載最新穩定版?nacos-server-x.x.x.zip(如?nacos-server-2.2.3.zip

    • 解壓到?三個獨立目錄(模擬三節點集群):

      • D:\nacos-cluster\node1

      • D:\nacos-cluster\node2

      • D:\nacos-cluster\node3

  3. 安裝 MySQL 數據庫

    • 下載?MySQL Installer

    • 安裝 MySQL Server 5.7+(推薦 8.0)

    • 記住設置的?root?密碼

    • 創建 Nacos 專用數據庫

      CREATE DATABASE nacos_config CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
    • 執行初始化腳本

      • 找到 Nacos 目錄下的?conf/nacos-mysql.sql

      • 在 MySQL 命令行或工具中執行:

        mysql -u root -p nacos_config < D:\nacos-cluster\node1\conf\nacos-mysql.sql

配置 Nacos 集群節點

1. 配置數據庫連接(每個節點)
  • 打開?node1/conf/application.properties

  • 修改以下配置(取消注釋并填寫真實信息):

# 啟用 MySQL 數據源
spring.datasource.platform=mysql# 數據庫數量(單庫填1)
db.num=1# 數據庫連接(重點修改以下三行!)
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=your_mysql_password  # 替換為你的密碼
  • 重復操作:對?node2node3?的?application.properties?做相同修改。

2. 配置集群節點列表(每個節點)
  • 在?node1/conf/?目錄下?新建文件?cluster.conf(若存在則編輯)

  • 添加以下內容(單機模擬需用不同端口,生產環境用不同IP):

  • # 格式:真實IP:端口(同一機器必須不同端口)
    127.0.0.1:8848
    127.0.0.1:8849
    127.0.0.1:8850
  • 復制文件:將?cluster.conf?復制到?node2/conf/?和?node3/conf/?目錄(確保三節點內容完全一致)。

3. 修改節點端口(單機模擬必做)
  • Node1 端口
    打開?node1/conf/application.properties,修改:

    server.port=8848
  • Node2 端口
    打開?node2/conf/application.properties,修改:

    server.port=8849
  • Node3 端口
    打開?node3/conf/application.properties,修改:

    server.port=8850

    啟動 Nacos 集群

    1. 啟動命令(每個節點獨立窗口)
  • Node1 啟動

    cd D:\nacos-cluster\node1\bin startup.cmd -m cluster
  • Node2 啟動

    cd D:\nacos-cluster\node2\bin
    startup.cmd -m cluster
  • Node3 啟動

    cd D:\nacos-cluster\node3\bin
    startup.cmd -m cluster
2. 驗證啟動日志
  • 觀察每個 CMD 窗口輸出:

    • 出現?Nacos started successfully in cluster mode?表示啟動成功。

?訪問Nacos

1. 安裝 Nginx
  1. 下載 Windows 版 Nginx:?nginx.org/en/download.html

  2. 解壓到目錄(如?D:\nginx

  3. 驗證安裝:CMD 執行?D:\nginx\nginx.exe,訪問?http://localhost?看到歡迎頁

2. 配置 Nginx 負載均衡

編輯?D:\nginx\conf\nginx.conf,在?http {}?塊內添加:?

# 配置 Nacos 集群負載均衡
upstream nacos-cluster {# 負載均衡策略(可選:weight輪詢/IP_hash/least_conn)least_conn;  # 使用最少連接數策略# Nacos 集群節點(IP:端口)server 127.0.0.1:8848 max_fails=3 fail_timeout=30s; # 節點1server 127.0.0.1:8849 max_fails=3 fail_timeout=30s; # 節點2server 127.0.0.1:8850 max_fails=3 fail_timeout=30s; # 節點3# 健康檢查(需安裝額外模塊,或使用商業版)# keepalive 32;  # 保持連接數
}server {listen       80;       # 監聽端口server_name  nacos.lb; # 域名(本地需配hosts)# Nacos API 路由location / {proxy_pass http://nacos-cluster; # 指向上游proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;# 重要:超時設置proxy_connect_timeout 5s;proxy_read_timeout 60s;proxy_send_timeout 30s;}# Nacos 控制臺路由location /nacos/ {proxy_pass http://nacos-cluster/nacos/;# 保持相同配置...}
}
3. 本地域名解析(可選)

編輯?C:\Windows\System32\drivers\etc\hosts?添加:

127.0.0.1 nacos.lb
4. 啟動 Nginx

cd D:\nginx
nginx.exe -t         # 驗證配置
nginx.exe -s reload  # 重新加載配置
5. 驗證負載均衡

訪問?http://nacos.lb/nacos?應能輪詢訪問到不同 Nacos 節點(查看節點列表中的訪問 IP)

二、Spring Cloud 配置通過 Nginx 訪問?

1. 修改 Spring Cloud 配置文件

在?application.yml?或?bootstrap.yml?中配置:

spring:cloud:nacos:# 統一使用 Nginx 入口地址discovery:server-addr: nacos.lb:80  # 服務發現地址config:server-addr: nacos.lb:80  # 配置中心地址file-extension: yaml      # 配置文件格式# 高級配置(可選)username: nacospassword: nacosnamespace: public           # 命名空間group: DEFAULT_GROUP        # 配置組

2. 關鍵參數說明
參數說明
server-addrNginx 地址(域名/IP + 端口)
file-extension配置文件后綴(yaml/properties)
namespace對應 Nacos 的命名空間 ID
group配置分組名
3. 添加 Maven 依賴

確保包含最新 Nacos 客戶端:

<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId><version>2022.0.0.0</version>
</dependency>
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId><version>2022.0.0.0</version>
</dependency>

三、全流程驗證

1. 啟動順序

  1. 啟動 MySQL 數據庫

  2. 啟動 Nacos 集群(三個節點)

  3. 啟動 Nginx

  4. 啟動 Spring Cloud 應用

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

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

相關文章

Spark大數據處理實戰指南

Spark 簡介 Apache Spark 是一個開源的分布式計算框架,專為大規模數據處理而設計。它通過內存計算和優化的執行引擎顯著提升了數據處理速度,適用于批處理、實時流處理、機器學習和圖計算等場景。 核心特性 高性能:利用內存計算(In-Memory Processing)減少磁盤 I/O,比傳…

瀏覽器緩存機制全解析:強緩存與協商緩存

瀏覽器緩存是瀏覽器為提升頁面加載速度、減少服務器壓力和節省網絡帶寬&#xff0c;在本地存儲資源&#xff08;如 HTML、CSS、JS、圖片等&#xff09;的機制。其核心分為強緩存和協商緩存&#xff0c;并涉及多種 HTTP 頭字段和存儲位置。以下是詳細解析&#xff1a;?? 一、緩…

知識隨記-----Qt 實用技巧:自定義倒計時按鈕防止用戶頻繁點擊

Qt 技巧&#xff1a;實現自定義倒計時按鈕防止用戶頻繁點擊注冊 項目場景 在一個基于 Qt 開發的聊天應用中&#xff0c;用戶注冊時需要獲取驗證碼。為防止用戶頻繁點擊獲取驗證碼按鈕&#xff0c;需要實現一個倒計時功能&#xff0c;用戶點擊后按鈕進入倒計時狀態&#xff0c;倒…

Linux與Windows應急響應

本人首先進行了linux的應急響應&#xff0c;windows之后再進行 Linux與Windows應急響應初體驗1 linux應急響應1.1 賬戶&#xff1a;1.1.1 使用cat /etc/passwd命令查看passwd文件2.1.2 使用cat /etc/shadow命令查找shadow文件&#xff0c;該文件為密碼文件的存儲項1.2 入侵排查…

計算機網絡1-4:計算機網絡的定義和分類

目錄 計算機網絡的定義 計算機網絡的分類 計算機網絡的定義 計算機網絡的分類 按交換技術分類&#xff1a;電路交換網絡、報文交換網絡、分組交換網絡 按使用者分類&#xff1a;公用網、專用網 按傳輸介質分類&#xff1a;有線網絡、無線網絡 按覆蓋范圍分類&#xff1a;…

在QT中動態添加/刪除控件,伸縮因子該怎么處理

開發中遇到的問題[TOC](開發中遇到的問題)處理方式在我們的界面開發過程中&#xff0c;通常需要開發一些可以動態添加or刪除控件的容器&#xff0c;類似Tab頁一樣&#xff0c;為了美觀的話&#xff0c;我們通常使用伸縮因子將容器中的控件往一個方向擠&#xff0c;類似下面的控…

【設計模式精解】什么是代理模式?徹底理解靜態代理和動態代理

目錄 靜態代理 動態代理 JDK動態代理 CGLIB代理 JDK動態代理和CGLIB代理的區別 總結 代理模式簡單來說就是 我們使用代理對象來代替對真實對象(real object)的訪問&#xff0c;這樣就可以在不修改原目標對象的前提下&#xff0c;擴展目標對象的功能。 代理模式有靜態代理…

MCU AI/ML - 彌合智能和嵌入式系統之間的差距

作者&#xff1a;芯科科技產品營銷高級經理Gopinath Krishniah 人工智能&#xff08;AI&#xff09;和機器學習&#xff08;ML&#xff09;是使系統能夠從數據中學習、進行推理并隨著時間的推移提高性能的關鍵技術。這些技術通常用于大型數據中心和功能強大的GPU&#xff0c;但…

Redis中的sdshdr的len和alloc那塊的知識點詳解

文章目錄核心比喻&#xff1a;一個可以伸縮的水瓶場景一&#xff1a;創建一個新字符串場景二&#xff1a;追加字符串&#xff08;觸發“空間預分配”&#xff09;場景三&#xff1a;再次追加字符串&#xff08;利用空閑空間&#xff09;場景四&#xff1a;縮短字符串&#xff0…

在Linux下訪問MS SQL Server數據庫

Linux作為一個免費的Unix類操作系統&#xff0c;以其開放性源代碼、多任務、X window等特點為眾多的用戶所采用&#xff0c;并有很多企業采用Linux來作為其內部網的全功能服務器(WWW&#xff0c;FTP&#xff0c;Email、DNS)。企業的內部網不僅要提供文本信息的訪問&#xff0c;…

計算機視覺-OpenCV

一下載第三方庫opencv-python3.4.18.65opencv-contrib-python3.4.18.65import cv2 # 讀取的格式是BGR numpy import numpy as np# 讀取圖片 a cv2.imread(generated_image.jpg) # 讀取圖片 print(a) # NumPy數組&#xff0c;其中存儲了讀取的圖像文件的像素值。cv2.imshow…

解決GitHub無法打開

找到下圖文件&#xff0c;用記事本打開 在最下方粘貼如下代碼140.82.113.4 github.com 20.205.243.166 github.com 140.82.112.4 github.com 151.101.1.6 github.global.ssl.fastly.net 185.199.108.153 assets-cdn.github.com 185.199.109.153 assets-cdn.github.com 185.199.…

AWS VPC Transit Gateway 可觀測最佳實踐

AWS VPC Transit Gateway 介紹 Amazon VPC Transit Gateway 是一個網絡傳輸中心&#xff0c;用于互連虛擬私有云 (VPCs) 和本地網絡。隨著您的云基礎設施在全球擴展&#xff0c;區域間對等互連使用 AWS 全球基礎設施將中轉網關連接在一起。 AWS 數據中心之間的所有網絡流量都在…

WeakRef的作用和使用

文章目錄WeakRef的作用和使用使用 WeakRef 避免強引用&#xff1a;原理與實踐一、WeakRef 的核心特性二、WeakRef 與強引用的對比三、WeakRef 的使用場景與示例1. 非關鍵數據緩存&#xff08;避免緩存導致內存泄漏&#xff09;2. 跟蹤對象生命周期&#xff08;不干擾回收&#…

【華為機試】332. 重新安排行程

文章目錄332. 重新安排行程題目描述示例 1&#xff1a;示例 2&#xff1a;提示&#xff1a;解題思路核心思路算法流程圖歐拉路徑原理DFS回溯機制字典序優化策略復雜度分析算法實現要點完整題解代碼332. 重新安排行程 題目描述 給你一份航線列表 tickets &#xff0c;其中 tic…

通信算法之300:CRC表生成方式-CRC8、CRC16、CRC32-輸入字節

"CRC表的MATLAB生成代碼"生成的查找表可以用于快速計算 CRC 值&#xff0c;通過查表法可以顯著提高 CRC 計算效率&#xff0c;尤其適用于需要處理大量數據的場景。下面是一個生成 CRC 查找表&#xff08;CRC Table&#xff09;的 MATLAB 代碼&#xff0c;該代碼可以根…

國內使用 npm 時配置鏡像源

在國內使用 npm 時&#xff0c;由于網絡限制可能會遇到下載速度慢或連接超時的問題。通過設置國內鏡像源&#xff0c;可以顯著提升下載速度和穩定性。以下是常用的國內 npm 鏡像源及其配置方法。 查詢當前使用的鏡像源 npm get registry 設置為淘寶鏡像源 npm config set reg…

一篇文章入門TCP與UDP(保姆級別)

&#x1f433;第一部分&#xff1a;什么是TCP和UDP? 先給結論&#xff1a;TCP 和 UDP 都是傳輸層協議&#xff0c;負責把數據從一臺電腦 “搬” 到另一臺電腦&#xff0c;但它們的 “搬運風格” 完全不同 &#x1f4e6; 比喻&#xff1a;TCP 像 "打電話"&#xff…

2024年測繪程序設計比賽--空間探索性分析(數據為2025年第三次模擬數據)

想要在2026年參加這個比賽的&#xff0c;可以加入小編和其它大佬所建的群242845175一起來備賽&#xff0c;為2026年的比賽打基礎&#xff0c;也可以私信小編&#xff0c;為你答疑解惑一、讀寫文件 internal class Read {public static List<Point> pts new List<Poin…

力扣 hot100 Day68

84. 柱狀圖中最大的矩形 給定 n 個非負整數&#xff0c;用來表示柱狀圖中各個柱子的高度。每個柱子彼此相鄰&#xff0c;且寬度為 1 。 求在該柱狀圖中&#xff0c;能夠勾勒出來的矩形的最大面積。 class Solution { public:int largestRectangleArea(vector<int>&…