"当你的注册中心挂了,整个微服务就变成了无头苍蝇。" 这是我在生产环境踩坑后最痛的领悟。今天,我将分享如何用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>&…