当前位置: 首页 > news >正文

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) 下载最新的稳定版本。

nginx 001 1024x630 - Windows安装Nginx


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 002 1024x656 - Windows安装Nginx

但建议大家还是给 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&#xff0…...

第十五届蓝桥杯全国软件和信息技术专业人才大赛个人赛(软件赛)软件测试组竞赛规则及说明

第十五届蓝桥杯全国软件和信息技术专业人才大赛个人赛 (软件赛)软件测试组竞赛规则及说明 目录...

【算法与数据结构】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…...

[职场] 会计学专业学什么 #其他#知识分享#职场发展

会计学专业学什么 会计学专业属于工商管理学科下的一个二级学科,本专业培养具备财务、管理、经济、法律等方面的知识和能力,具有分析和解决财务、金融问题的基本能力,能在企、事业单位及政府部门从事会计实务以及教学、科研方面工作的工商管…...

docker (五)-docker存储-数据持久化

将数据存储在容器中,一旦容器被删除,数据也会被删除。同时也会使容器变得越来越大,不方便恢复和迁移。 将数据存储到容器之外,这样删除容器也不会丢失数据。一旦容器故障,我们可以重新创建一个容器,将数据挂…...

飞行路线(分层图+dijstra+堆优化)(加上题目选数复习)

飞行路线 这一题除了堆优化和dijstra算法和链式前向星除外还多考了一个考点就是,分层图,啥叫分层图呢?简而言之就是一个三维的图,按照其题意来说有几个可以免费的点就有几层,而且这个分层的权值为0(这样就相…...

云计算基础-快照与克隆

快照及克隆 什么是快照 快照是数据存储的某一时刻的状态记录,也就是把虚拟机当前的状态保存下来(快照不是备份,快照保存的是状态,备份保存的是副本) 快照优点 速度快,占用空间小 快照工作原理 在了解快照原理前,…...

使用 RAG 创建 LLM 应用程序

如果您考虑为您的文件或网站制作一个能够回应您的个性化机器人,那么您来对地方了。我可以帮助您使用Langchain和RAG策略来创建这样一个机器人。 了解ChatGPT的局限性和LLMs ChatGPT和其他大型语言模型(LLMs)经过广泛训练,以理解…...

第13章 网络 Page744~746 asio核心类 ip::tcp::endPoint

2. ip::tcp::endpoint ip::tcp::socket用于连接TCP服务端的 async_connect()方法的第一个入参是const endpoint_type& peer_endpoint. 此处的类型 endpoint_type 是 ip::tcp::endpoint 在 在 ip::tcp::socket 类内部的一个别名。 libucurl 库采用字符串URL表达目标的地…...

面试浏览器框架八股文十问十答第一期

面试浏览器框架八股文十问十答第一期 作者:程序员小白条,个人博客 相信看了本文后,对你的面试是有一定帮助的!关注专栏后就能收到持续更新! ⭐点赞⭐收藏⭐不迷路!⭐ 1)什么是 XSS 攻击&#…...

多线程的基本原理学习

由一个问题引发的思考 线程的合理使用能够提升程序的处理性能,主要有两个方面,第一个是能够利用多核cpu以及超线程技术来实现线程的并行执行;第二个是线程的异步化执行相比于同步执行来说,异步执行能够很好的优化程序的处理性能提…...

C/C++进制转换

十进制转化为二进制 进制转化#include <iostream> using namespace std;void change(int); int main() {int num;cout << "请输入一个十进制数: ";cin >> num;cout << "转化后的二进制数为: ";change(num);return 0; } void chan…...

使用 Coze 搭建 TiDB 助手

导读 本文介绍了使用 Coze 平台搭建 TiDB 文档助手的过程。通过比较不同 AI Bot 平台&#xff0c;突出了 Coze 在插件能力和易用性方面的优势。文章深入讨论了实现原理&#xff0c;包括知识库、function call、embedding 模型等关键概念&#xff0c;最后成功演示了如何在 Coze…...