SpringCloud-Nacos集群搭建
本文详细介绍了如何在SpringCloud环境中搭建Nacos集群,为读者提供了一份清晰而详尽的指南。通过逐步演示每个关键步骤,包括安装、配置以及Nginx的负载均衡设置,读者能够轻松理解并操作整个搭建过程。
一、Nacos集群示意图
Nacos(Naming and Configuration Service)是一个用于服务发现、动态配置管理以及可视化服务管理的开源平台。Nacos支持构建弹性的、动态的、易于维护的微服务架构,并为大规模微服务体系的管理提供了完整的解决方案。在Nacos的集群视图中,Nacos可以通过横向扩展的方式构建多个节点,形成一个高可用的集群,以确保系统的稳定性和可靠性。

Nacos集群特点:
| 特点 | 特点详述 |
| 节点同步 | 集群中的各个节点能够相互同步数据,确保配置信息和服务实例的一致性。 |
| 负载均衡 | Nacos集群可以通过负载均衡机制,将服务请求合理分发到各个节点,提高系统的整体性能和吞吐量。 |
| 高可用性 | Nacos集群通过多节点的部署,实现高可用性,即使某个节点发生故障,集群仍能保持正常运行。 |
| 水平扩展 | 集群中的节点可以随着需求的增加而动态扩展,实现系统的横向扩展,以适应不断增长的服务规模。 |
| 故障转移 | 集群中的节点能够感知其他节点的状态,当某个节点发生故障时,其他节点可以接管其工作,确保系统的连续性。 |
通过Nacos的集群视图,可以更好地管理和维护微服务架构,提供了一个稳定、高效、可靠的服务治理平台。
二、Nacos集群搭建
1、安装Nacos
首先,我们需要从 Nacos 的官方网站下载发布版本。下载地址:Releases · alibaba/nacos · GitHub

选择合适的版本并下载,解压缩得到 Nacos 的安装包。
在解压后的 Nacos 目录中,找到 bin 文件夹。
用写字板编辑 startup.cmd,将 set MODE= "cluster" 修改为:
set MODE= "standalone"
这将在启动 Nacos Server 时,默认使用 standalone 模式运行。
修改完成后,切换 cmd 到 bin 目录下启动 Nacos Server:
C:\Users\Damon.Liu>d:
D:\>cd D:\Tools\Nacos\bin
D:\Tools\Nacos\bin>startup.cmd -m standalone
这里提醒我需要配一个 java8以上 的 JAVA_HOME 环境变量。

简单配一下:

再次尝试启动 Nacos,这次成功了!

2、复制客户端
复制两份Nacos的客户端,用端口号命名做区分。
注意端口号需要最少间隔一位,原因是 Nacos 2.0 之后,启动 Nacos 时会占用 +1000/1001 两个端口,如果相邻,会导致启动了一个 Nacos 之后,启动不了相同端口的另一个 Nacos。
官方文档说明如下:

所以,我们命名为 Nacos_8844、Nacos_8846,间隔两位,同时和默认的 8848 端口的 Nacos 区分开来,方便我们辨认。

下面,对三个客户端分别进行修改。
3、创建Nacos数据库
MySQL 创建名为 Nacos 的数据库。
将 conf 文件夹下的 mysql-schema.sql 导入到这个库里。

4、修改每个客户端application.properties
① 修改端口号
首先,修改三个客户端为不同的端口号。
端口在 conf 目录下的 application.properties 下修改:
② 修改数据库连接信息
放开数据库的三处注释。
这里有个数据库连接数,我们就一个数据库所以填1;
下面的 jdbc 连接信息,改为我们数据库的账号密码,连接的就是我们刚刚创建的 Nacos 数据库。
5、修改每个客户端集群配置
再对每个客户端 conf 目录下的 cluster.conf.example 文件复制一份,改名为 cluster.conf。
修改复制出来的 cluster.conf 文件,把三个 nacos 服务端地址都添加到里面:
192.168.0.107:8844
192.168.0.107:8846
192.168.0.107:8848
启动三个nacos服务端,如果之前是单机模式运行的,修改过启动器的代码,则需要改回来。
比如我的 startup.cmd 里之前指定了默认启动方式,这里需要修改这一行为:
set MODE= "cluster"
6、逐一启动Nacos服务
修改之后,我们逐一双击 Stratup.cmd 启动 Nacos:
启动成功之后我们可以访问已经启动的 Nacos 控制台查看:localhost:8848/nacos
三、Nginx对Nacos反向代理
1、下载解压Nginx
访问 Nginx官网(nginx.org/en/download.html) 下载最新的稳定版本。
2、修改默认端口
解压Nginx压缩包好后,我们来修改Nginx的默认端口。Nginx的配置文件是conf目录下的nginx.conf,默认配置的nginx监听的端口为80,根据端口占用情况,我们可以修改位其他端口,这里我修改位40。
修改之前我们可以输入cmd指令,查询端口占用状态:
#查看80端口是否被占用的命令是:
netstat -ano | findstr 0.0.0.0:80
netstat -ano | findstr "80"
如果被占用了,我们可以修改 Nginx\conf\nginx.conf 文件里的监听端口号,来指定默认端口。
比如,我这里换为40端口。
但建议大家还是给 Nginx 80端口,默认端口最终我还是用的默认80端口。
3、启动Nginx
接下来,我们启动Nginx,验证服务是否成功开启.。双击根目录下的nginx.exe,双击后一个黑色的弹窗一闪而过就消失了,启动就完成了。
然后我们访问80端口,看到Nginx服务已经成功运行了。
4、配置对Nacos的反向代理
我们这里要配置 Nginx\conf\nginx.conf 文件。
listen:监听的端口;
(监听端口需要避免占用,尤其是 win-server,需要关闭IIS在80端口的默认项目)
server_name:监听的域名(填写 localhost 即为公网IP);
location 里 proxy_pass:设置转发的目标地址;
upstream nacos-cluster {server 127.0.0.1:8844;server 127.0.0.1:8846;server 127.0.0.1:8848;
}server {listen 80;server_name localhost;location /nacos {proxy_pass http://nacos-cluster;}
}
这里给出的例子的意思是:当收到 /naocs 请求时,自动转发请求到 Nacos 集群,通过负载均衡指定具体哪个端口的 Nacos 响应。
修改完配置后,我们要停止之前的 Nginx 服务,重启后配置才能刷新。
5、浏览器访问测试
访问 localhost/nacos,如果显示是 Nacos 的控制台页面,则说明配置成功。
四、Nacos控制台新建配置
1、Nacos控制台新建配置
我们访问 Nacos 的控制台页面,因为我们刚刚用 Nginx 转达到集群,所以 Nacos 控制台地址变为 localhost/nacos,我们点击新建配置。
配置起名为:test-service.yaml,类型选为 YAML 类型,配置内容我们写一个时间格式:
pattern:dateformat: yyyy-MM-dd HH:mm:ss

2、查看配置是否存入数据库
我们打开我们刚刚创建的 Nacos 数据库,查看 config-info 表:

可以看到配置已经写入表内了。
至此,我们的Nacos集群搭建成功!
五、Nacos集群的应用场景
Nacos集群在微服务架构中具有广泛的应用场景,其中一些关键的应用场景包括:
| 场景 | 场景下功能描述 |
| 服务注册 服务发现 | Nacos集群作为注册中心,可以用于服务的注册与发现。微服务在启动时将自身注册到Nacos集群,其他微服务通过Nacos发现和调用这些服务。 |
| 动态配置管理 | Nacos提供了分布式配置管理功能,允许在运行时动态调整应用程序的配置。Nacos集群可以用于集中式管理配置信息,实现配置的动态更新和热加载。 |
| 健康检查 故障恢复 | Nacos集群通过定期的健康检查,能够检测服务的状态并及时发现故障节点。当某个微服务发生故障时,Nacos能够自动剔除不可用的节点,确保系统的高可用性。 |
| 动态路由 | 基于Nacos集群,可以实现动态路由策略,根据服务的状态和负载情况,动态调整请求的路由,实现流量的均衡和优化。 |
| 分布式锁 与协调 | Nacos提供了分布式锁和协调的功能,可以应用于分布式系统中的同步、协作和资源竞争场景,确保多个微服务之间的有序执行。 |
| 事件驱动架构 | Nacos支持事件监听机制,可以通过订阅Nacos集群中的事件,实现微服务架构中的事件驱动,提高系统的解耦性和可维护性。 |
综上所述,Nacos集群不仅仅是服务注册中心,还在微服务架构中发挥着关键的角色,支持多种场景下的服务治理和协调。
相关文章:
SpringCloud-Nacos集群搭建
本文详细介绍了如何在SpringCloud环境中搭建Nacos集群,为读者提供了一份清晰而详尽的指南。通过逐步演示每个关键步骤,包括安装、配置以及Nginx的负载均衡设置,读者能够轻松理解并操作整个搭建过程。 一、Nacos集群示意图 Nacos࿰…...
第十五届蓝桥杯全国软件和信息技术专业人才大赛个人赛(软件赛)软件测试组竞赛规则及说明
第十五届蓝桥杯全国软件和信息技术专业人才大赛个人赛 (软件赛)软件测试组竞赛规则及说明 目录...
【算法与数据结构】496、503、LeetCode下一个更大元素I II
文章目录 一、496、下一个更大元素 I二、503、下一个更大元素II三、完整代码 所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。 一、496、下一个更大元素 I 思路分析:本题思路和【算法与数据结构】739、LeetCode每日温度类似…...
当AGI遇到人形机器人
为什么人类对人形机器人抱有执念 人形机器人是一种模仿人类外形和行为的机器人,它的研究和开发有着多方面的目的和意义。 人形机器人可以更好地适应人类的环境和工具。人类的生活和工作空间都是根据人的尺寸和动作来设计的,例如门、楼梯、桌椅、开关等…...
Pytorch卷积层原理和示例 nn.Conv1d卷积 nn.Conv2d卷积
内容列表 一,前提 二,卷积层原理 1.概念 2.作用 3. 卷积过程 三,nn.conv1d 1,函数定义: 2, 参数说明: 3,代码: 4, 分析计算过程 四,nn.conv2d 1, 函数定义 2, 参数: 3, 代码 4, 分析计算过程 …...
Qt 实现无边框窗口1.0
目录 项目需求: 1、没有边框; 2、点击windows系统的状态栏的程序运行图标可实现最大最小化; 3、可以移动窗口; 项目实现: 1、实现 无边框 2、实现 点击windows系统的状态栏的程序运行图标可实现最大最小化 3、实现 窗…...
Flume(二)【Flume 进阶使用】
前言 学数仓的时候发现 flume 落了一点,赶紧补齐。 1、Flume 事务 Source 在往 Channel 发送数据之前会开启一个 Put 事务: doPut:将批量数据写入临时缓冲区 putList(当 source 中的数据达到 batchsize 或者 超过特定的时间就会…...
静态时序分析:SDC约束命令set_clock_transition详解
相关阅读 静态时序分析https://blog.csdn.net/weixin_45791458/category_12567571.html?spm1001.2014.3001.5482 在静态时序分析:SDC约束命令create_clock详解一文的最后,我们谈到了针对理想(ideal)时钟,可以使用set_clock_transition命令直…...
web 发展阶段 -- 详解
1. web 发展阶段 当前处于 移动 web 应用阶段。也是个风口(当然是针对有能力创业的人来说的),如 抖音、快手就是这个时代的产物。 2. web 发展阶段引出前后端分离的过程 2.1 传统开发方式 2.2 前后端分离模式 衍生自移动 web 应用阶段。 3.…...
车载软件架构 —— Adaptive AUTOSAR软件架构中操作系统
车载软件架构 —— Adaptive AUTOSAR软件架构中操作系统 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师(Wechat:gongkenan2013)。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师&…...
前缀和算法-截断数组
5057. 截断数组 - AcWing题库 给定一个长度为 n 的正整数数组 a1,a2,…,an 和一个正整数 p。 现在,要将该数组从中间截断,得到两个非空子数组。 我们规定,一个数组的价值等于数组内所有元素之和模 p 的结果。 我们希望,将给定数组…...
Kubernetes实战:Kubernetes中网络插件calico Daemon Sets显示异常红色
目录 一、排查步骤与解决方案1.1、POD排查问题定位1.2、针对问题解决错误1.3、继续针对问题解决错误 一、排查步骤与解决方案 1.1、POD排查问题定位 我的k8s集群由3个节点组成的,calico在每个节点上都有一个pod,通过kubectl get pod -A命令发现有一个pod的READY 为…...
深入探究:JSONCPP库的使用与原理解析
君子不器 🚀JsonCPP开源项目直达链接 文章目录 简介Json示例小结 JsoncppJson::Value序列化Json::Writer 类Json::FastWriter 类Json::StyledWriter 类Json::StreamWriter 类Json::StreamWriterBuilder 类示例 反序列化Json::Reader 类Json::CharReader 类Json::Ch…...
字节UC伯克利新研究 | Magic-Me:简单有效的主题ID可控视频生成框架
在生成模型领域,针对特定身份(ID)创建内容已经引起了极大的兴趣。在文本到图像生成(T2I)领域,以主题驱动的内容生成已经取得了巨大的进展,使图像中的ID可控。然而,将其扩展到视频生成…...
2024免费人像摄影后期处理工具Portraiture4.1
Portraiture作为一款智能磨皮插件,确实为Photoshop和Lightroom用户带来了极大的便利。通过其先进的人工智能算法,它能够自动识别并处理照片中的人物皮肤、头发和眉毛等部位,实现一键式的磨皮美化效果,极大地简化了后期处理的过程。…...
Spring Boot 笔记 010 创建接口_更新用户头像
1.1.1 usercontroller中添加updateAvatar,校验是否为url PatchMapping("updateAvatar")public Result updateAvatar(RequestParam URL String avatarUrl) {userService.updateAvatar(avatarUrl);return Result.success();} 1.1.2 userservice //更新头像…...
认识并使用HttpLoggingInterceptor
目录 一、前情回顾二、HttpLoggingInterceptor1、HttpLoggingInterceptor拦截器是做什么的?2、如何使用HttpLoggingInterceptor?2.1 日志级别2.2 如何看日志?2.2.1 日志级别:BODY2.2.2 日志级别:BASIC2.2.3 日志级别&a…...
内存块与内存池
(1)在运行过程中,MemoryPool内存池可能会有多个用来满足内存申请请求的内存块,这些内存块是从进程堆中开辟的一个较大的连续内存区域,它由一个MemoryBlock结构体和多个可供分配的内存单元组成,所有内存块组…...
【FPGA开发】HDMI通信协议解析及FPGA实现
本篇文章包含的内容 一、HDMI简介1.1 HDMI引脚解析1.2 HDMI工作原理1.3 DVI编码1.4 TMDS编码 二、并串转换、单端差分转换原语2.1 原语简介2.2 原语:IO端口组件2.3 IOB 输入输出缓冲区2.4 并转串原语OSERDESE22.4.1 OSERDESE2 工作原理2.4.2 OSERDESE2 级联示意图2.…...
[NSSRound#16 Basic]Web
1.RCE但是没有完全RCE 显示md5强比较,然后md5_3随便传 md5_1M%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%D3o%A7%B2%1B%DCV%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%00%A8%28K%F3n%8EKU%B3_Bu%93%D8Igm%A0%D1U%5D%83%60%FB_%07%FE%A2&md5_2M%C9h%FF%0E%E3%5C%20%95r%D4w…...
Java 语言特性(面试系列2)
一、SQL 基础 1. 复杂查询 (1)连接查询(JOIN) 内连接(INNER JOIN):返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...
UDP(Echoserver)
网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...
P3 QT项目----记事本(3.8)
3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...
Qt Http Server模块功能及架构
Qt Http Server 是 Qt 6.0 中引入的一个新模块,它提供了一个轻量级的 HTTP 服务器实现,主要用于构建基于 HTTP 的应用程序和服务。 功能介绍: 主要功能 HTTP服务器功能: 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...
python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...
Matlab | matlab常用命令总结
常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...
Swagger和OpenApi的前世今生
Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章,二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑: 🔄 一、起源与初创期:Swagger的诞生(2010-2014) 核心…...
AI书签管理工具开发全记录(十九):嵌入资源处理
1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...
python执行测试用例,allure报乱码且未成功生成报告
allure执行测试用例时显示乱码:‘allure’ �����ڲ����ⲿ���Ҳ���ǿ�&am…...
JavaScript 数据类型详解
JavaScript 数据类型详解 JavaScript 数据类型分为 原始类型(Primitive) 和 对象类型(Object) 两大类,共 8 种(ES11): 一、原始类型(7种) 1. undefined 定…...
