当前位置:首页 » 云服务器 » 如何在服务器上部署nacos

如何在服务器上部署nacos

发布时间: 2022-12-24 22:29:43

① nacos服务搭建

编辑启动文件,startup.cmd
set MODE="standalone"

解压压缩包,执行bin目录下的startup.cmd 命令 启动nacos

执行bin目录下的shutdown.cmd 命令 停止nacos

C:\Users\wqf\Desktop\nacos-server-1.4.2\nacos\bin

访问nocas的服务端 http://服务器ip:8848/nacos/index.html,默认的用户名密码是 nocas/nocas

补充:windows 启动如果出现问题 编辑start.cmd文件 修改图示行

② 3. nacos服务发现

1. nacos服务发现原理

2. spring cloud服务协作流程

3.搭建nacos服务端

4. 搭建nacos服务发现客户端

5. nacos服务发现的数据模型

有两个微服务A和B, A调用B, 那么A是如何调用B的呢?我们可以通过http请求,进行调用. 也可以使用rpc进行调用.

不管使用什么方式, A需要知道B的地址和端口号. 那么A是如何知道B的地址和端口好的呢? 如上图:

1. B服务启动的时候, 会注册到服务发现中心, 告诉他,我的ip和端口号是什么?这里应该也是接口调用,通知服务发现中心的.

2. A服务启动的时候, 也会注册的服务发现中心, 告诉他, 我的ip和端口号是什么? 同时, 服务发现中心会告诉我, 当前已注册的服务的ip和端口号. 这里通过一个接口请求和参数返回就可以实现.

3. 拿到了B服务的ip和port, 接下来就可以调用服务B了.

我们要基于spring cloud生态环境进行开发. 所以,先来了解spring cloud的服务写作流程

前面注册和发现就都不说了, 上面说过了, 这里多了两个东西, 一个是Ribbon, 另一个是feign.

Ribbon是负载均衡器, Feign是远程调用, 自动进行http请求.

客户端Service A 要调用ServiceB的实例1和实例2. 那么到底调用ServiceB的哪个实例呢? 使用Ribbon负载均衡, 要看使用什么样的算法了, 可以使用轮询算法, 或者其他算法, 如加权算法

负载均衡有两种: 服务端负载均衡, 客户端负载均衡

在负载均衡中维护一个可用的服务实例清单, 当客户端请求来临时, 负载均衡服务器按照某种配置好的规则(负载均衡算法), 从可用服务实例清单中, 选取其一去处理客户端请求, 这就是服务端负载均衡, 例如Nginx. 通过nginx进行负载均衡, 客户端发送请求值Nginx, nginx通过负载均衡算法, 在多个服务器之间选择一个进行访问.

接下来, 我们要讲的ribbon, 就属于客户端负载均衡, 在ribbon客户端会有一个服务实例地址列表, 在发送请求前, 通过负载均衡算法, 选择一个服务实例, 然后进行访问, 这是客户端负载均衡. 即在客户端进行负载均衡算法分配.

服务的调用方, 我们就可以理解为是一个客户端.

负载均衡算法:

可通过下面的方式, 在spring boot配置中修改默认的负载均衡的策略

<pre style="color: rgb(0, 0, 0); font-family: "Courier New"; font-size: 12px; margin: 5px 8px; padding: 5px;">account-service.ribbon.NFLoadBalanceRuleClassName=com.netflix.loadBalancer.RandomRule</pre>

其中: account-service: 是调用的服务的名称. 后面的组成部分是固定的.

feign是服务端http接口的调用.

feign可以帮助我们更快捷, 优雅的调用httpApi. 原来我们在调用http请求的时候, 需要使用的是RestTemplate, 传输域名和端口号, 进行http调用. 使用feign后, 不用再使用RestTemplate模拟请求了, feign能够通过服务名, 找到对应的接口. 不需要我们在拼接地址+端口了, 提供了简单方便的操作.

使用方法:

2. 声明feign客户端

新建一个类, 声明为FeignClient类型的接口. 指定调用的服务名. 然后将指定接口. 这样在调用的时候, 就可以通过服务名, + 接口, 自动找到对应的项目接口了.

这里上一节已经搭建过了(地址: https://www.cnblogs.com/ITPower/articles/12630193.html ), 在服务的最后, 我们搭建了nacos的集群

因为对于服务发现来说, 有很多配置都是公用的, 因此, 我们搭建一个父工程, 将通用的配置都添加到里面取.

创建一个maven工厂, 引入jar包即可. pom文件如下

在父工程下创建一个子工程. 我们要做一下三件事

指定服务端口号, nacos服务的地址

需要增加两个引入. 一个启用服务发现, 另一个是启用feign

最终项目结构如下:

其中前3步骤和创建服务生产者是一样的

在父工程下创建一个子工程. 我们要做一下三件事

指定服务端口号, nacos服务的地址

需要增加两个引入. 1个启用服务发现, 另一个是启用feign

nacos生产上已经注册发现了两题服务

同时调用接口, 可以获取到proctor返回的内容.

我们可以通过启动多个服务的方式, 来测试服务的负载均衡策略.

1. 修改proctor的启动端口号为动态端口号. 目的是方便启动的时候动态配置端口号, 启动集群

** 2. 修改配置, 添加动态端口号**

vm options配置中设置动态端口号为-Dport=56010, 56011. 点击复制按钮, 可以增加一个应用, 然后配置参数后, 启动两个应用.

3. 在nacos控制台查看启动效果

我们看到, nacos的proctor 有两台服务实例. 点击详情可查看具体的服务实例信息:

4. 调用consumer的接口, 访问proctor, 默认采用轮询的负载均衡算法

http://localhost:56020/consumer

nacos的注册发现是一种三层模型: 即 服务--集群--实例.如下图:

nacos最外层是服务. 最里层是多台实例. 多个实例之间组成一个服务集群.

命名空间不仅适用于配置管理, 同样适用于服务发现. namespace的常用场景之一是不同环境的配置隔离.如: 开发, 生成, 测试环境资源的隔离.

proctor启动了两个实例, 点击详情进去可以看到他是一个集群. 集群里有两台实例.

5.2 服务.

在命名空间下, 有各个服务.比如我们上面定义的是在public命名空间下, 定义了两个服务. 一个是proctor, 一个是consumer.

服务有 服务名 实例. ****远程调用的时候, 需要指定服务名.

5.3 实例

实例是基于网络协议通讯, 所以必须要有一个ip:端口号

5.4 元信息

在及群里点击某一个实例-->编辑, 可以看到如下页面, 可以设置元信息

那么元信息是什么呢? 每台服务器都可能会设置自己的个性化的信息. 这就是每台服务器的元数据信息

5.5 实操---指定集群的命名空间为dev

只需要在配置中增加命名空间就可以了.

我们也可以修改集群的名字, 集群的默认名字是DEFAULT. 我们这里将其修改为default. 在控制台dev命名空间下, 可以看到启动了服务customer.

③ 2021-11-22 spring-cloud-nacos配置优先级

最近有项目组同学问到为什么自己配置了nacos,但配置不生效?我简单看了下,发现问题出在相关配置的优先级模式不同。
spring-boot项目,有bootstrap、application两个配置文件,结合profile,和支持的文件格式properties、yaml,已经有6个配置文件了。然后使用了spring-cloud-starter-alibaba-nacos-config 后,又提供了三级配置。这些配置之间的组合关系,将在无形中影响配置的效果。很多同学只知道其中的一种,因此在无意识引入两种或以上的配置后,就会发现有奇怪的配置不生效问题发生。

spring-boot项目依赖bootstrap.yml 用于应用程序上下文的引导阶段,由父Spring ApplicationContext加载,其工作的阶段为父ApplicationContext 被加载到使用application.yml的之前。也就是说 bootstrap 加载优先于 applicaton。

bootstrap 主要用于从额外的资源来加载配置信息,还可以在本地外部配置文件中解密属性。这两个上下文共用一个环境,它是任何Spring应用程序的外部属性的来源。bootstrap 里面的属性会优先加载,它们默认也不能被本地相同配置覆盖。

bootstrap 配置文件有以下几个应用场景:

由于spring-boot支持多种文件格式,所以多种格式之间,其优先级是平等的,只要找到了一个,就会被使用。一般有:.properties、.yaml、.xml等格式。

应用级别的spring-boot配置文件,主要用于 Spring Boot 项目的自动化配置,其加载优先级低于bootstrap.yaml。

nacos作为外部配置服务器,通过spring-boot的bootstrap.yaml引入。但nacos本身,也提供了三级配置体系:主配置(只有一个,但会按照不同后缀名,去找到相关配置)、扩展配置、共享配置。

三级配置的优先级如下:主配置 > 扩展配置 > 共享配置

nacos提供的配置路径 spring.cloud.nacos.config 下,有一系列的属性用于定位主配置。基于 prefix(默认为 ${spring.application.name} 的值)、namespace、group(默认为字符串 DEFAULT_GROUP )、file-extension(默认为字符串 .properties ),按组装规则 ${prefix}-${spring.profiles.active}.${file-extension} 去找到一个配置。

在nacos的所有配置中,主配置(存在的情况下)具有最高的优先级,其同名配置值不能被扩展配置或共享配置中定义的同名属性所覆盖。

上述两类配置都支持三个属性: data-id 、 group (默认为字符串 DEFAULT_GROUP )、 refresh (默认为 true )。

实际上,nacos中并未对 extension-configs 和 shared-configs 的差别进行详细阐述。我们从他们的结构,看不出本质差别;除了优先级不同以外,也没有其他差别。那么,nacos项目组为什么要引入两个类似的配置呢?我们可以从当初 该功能的需求(issue) 上找到其原始目的。
摘要其核心内容如下:

④ SpringCloud Alibaba 实战,来自尚硅谷电商项目理解

电商项目常见解决技术搭配方案:

SpringCloud Alibaba --nacos:注册中心

SpringCloud Alibaba --nacos:配置中心

SpringCloud --Ribbon:负载均衡

SpringCloud Alibaba --Sentinel:服务容错(限流、降级、熔断)

SpringCloud --Gateway:API网关(webflux编程模式)

SpringCloud --Sleuth(调用链监控)

SpringCloud Alibaba --Seata:分布式事务解决方案

作用:因为都会用到springcloud alibaba,所以将 放到公共服务中,统一管理版本

Nacos 文档地址: https://nacos.io/zh-cn/docs/quick-start.html

Nacos 下载地址:https://github.com/alibaba/nacos/releases

第一步:在需要注册到nacos的服务pom文件中添加相应的nacos依赖

作用:将我们的服务注册到注册中心中,同时也可以从注册中心中发现其他服务

第二步:将 Nacos 服务器地址配置添加到 /src/main/resources/application.properties 文件中,

给当前服务命名

第三步:使用@EnableDiscoveryClient 注解开启服务注册和发现

启动 Nacos 服务器

下载 Nacos Server下载页面

将下载的文件解压,进入nacos/bin文件夹(),并根据操作系统的实际情况

Linux/Unix/Mac , 执行 sh startup.sh -m standalone

Windows , 执行 cmd startup.cmd

查询服务

http://127.0.0.1:8848/nacos

用户名和密码默认都是nacos

如:member会员服务需要调用coupon优惠券服务的方法

1.在member服务和coupon服务的pom文件中引入feign依赖

2.开启feign功能,在member服务上开启

@FeignClient("gulimall-coupon"):其中gulimall-coupon为nacos注册的被调用的服务名,@RequestMapping("/coupon/coupon/member/list")路径为gulimall-coupon服务中membercoupons()方法的调用全路径(添加上controller上的请求路径)

对应的在gulimall-coupon服务中有membercoupons()方法的具体实现

第一步:引入 Nacos Config 进行配置管理

第二步:在需要管理配置的服务下,添加bootstrap.properties

第三步:需要给配置中心添加数据集(Data Id)gulimall-coupon.properties

第四步:给 应用名.properties 添加任何配置

第五步:在需要读取配置的类上添加注解@RefreshScope,实时刷新获取配置文件内容

@RefreshScope:动态获取并刷新配置

@Value("${配置项的名}")

细节部分:

1.命名空间:主要用来做配置隔离

默认是public(保留空间);默认新增的所有配置都在public空间

a:开发、测试、生产:利用命名空间来做环境隔离

b:每一个微服务之间互相隔离配置,每一个微服务都创建自己的命名空间,只加载自己命名空间下的所有配置

2.配置集

一组相关或者不相关的配置项的集合称为配置集。在系统中,一个配置文件通常就是一个配

置集,包含了系统各个方面的配置。例如,一个配置集可能包含了数据源、线程池、日志级

别等配置项。

3.配置集ID

Nacos 中的某个配置集的 ID。配置集 ID 是组织划分配置的维度之一。Data ID 通常用于组

织划分系统的配置集。一个系统或者应用可以包含多个配置集,每个配置集都可以被一个有

意义的名称标识。Data ID 通常采用类 java 包(如 com.taobao.tc.refund.log.level)的命名

规则保证全局唯一性。此命名规则非强制。

4.配置组

Nacos 中的一组配置集,是组织配置的维度之一。通过一个有意义的字符串(如 Buy 或

Trade )对配置集进行分组,从而区分 Data ID 相同的配置集。当您在 Nacos 上创建一个

配置时,如果未填写配置分组的名称,则配置分组的名称默认采用 DEFAULT_GROUP 。配置

分组的常见场景:不同的应用或组件使用了相同的配置类型,如 database_url 配置好

MQ_topic 配置。

加载多配置文件:

官方文档:https://github.com/alibaba/Sentinel/wiki/%E4%BB%8B%E7%BB%8D

项目地址:https://github.com/alibaba/Sentinel

随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点,

从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。

什么是熔断降级

除了流量控制以外,降低调用链路中的不稳定资源也是关键 Sentinel 的使命之一。由于调用关系的复杂性,如果调用链路中的某个资源出现了不稳定,最终会导致请求发生堆积。

Sentinel 和 Hystrix 的原则是一致的: 当检测到调用链路中某个资源出现不稳定的表现,例如

如请求响应时间长或异常比例升高的时候,则对这个资源的调用进行限制,让请求快速失败,

避免影响到其它的资源而导致级联故障。

熔断降级设计理念

在限制的手段上,Sentinel 和 Hystrix 采取了完全不一样的方法。

Hystrix 通过 线程池隔离 的方式,来对依赖(在 Sentinel 的概念中对应 资源)进行了隔

离。这样做的好处是资源和资源之间做到了最彻底的隔离。缺点是除了增加了线程切换的成

本(过多的线程池导致线程数目过多),还需要预先给各个资源做线程池大小的分配。

Sentinel 对这个问题采取了两种手段

a.通过并发线程数进行限制

b.通过响应时间对资源进行降级

步骤:

1、引入依赖

2、使用 Nacos 注册中心

3、定义 fallback 实现

在服务消费者中,实现 feign 远程接口,接口的实现方法即为调用错误的容错方法

4、定义 fallbackfactory 并放在容器中

5、改造 fallback 类接受异常并实现容错方法

6、远程接口配置 feign 客户端容错

7、开启 sentinel 代理 feign 功能;在 application.properties 中配置

测试熔断效果。当远程服务出现问题,会自动调用回调方法返回默认数据。

⑤ spring cloud集成nacos

MODE:设置使用单机模式
注意:如果服务器是多网卡,配置NACOS_SERVER_IP参数来指定IP,否则可能会导致外网无法访问;

启动成功后,访问 http://114.116.119.117:8848/nacos/index.html 默认登录账号密码 nacos/nacos

准备3台服务器;分别执行如下命令;

参数说明:

版本问题可参考:
1. 版本说明
2. spring-boot、spring-cloud、spring-cloud-alibaba版本对应

注意: 引入 nacos管理配置时,要 同时 引入 spring-cloud-starter-bootstrap 这个 jar,不引入这个 jar,bootstrap.properties 配置文件不生效,会导致读取不到配置。

新建 bootstrap.properties 代替 application.properties(bootstrap是 application 的父类,项目启动加载配置文件时,先加载父类)
配置如下:

在class 类上添加@RefreshScope 标签。当 nacos 中修改 downloadExcelUrl 的值时,运行的项目会同步修改对应的值。

版本问题可参考:
1. 版本说明
2. spring-boot、spring-cloud、spring-cloud-alibaba版本对应

在启动类 ***Application 上添加 @EnableDiscoveryClient 注解,开启服务注册与发现相关功能。

⑥ 【Nacos专题】Nacos 快速入门

Nacos 英文全称 Dynamic Naming and Configuration Service,它是 Spring Cloud Alibaba 的核心组件之一,致力于微服务架构中的服务注册与发现、配置管理。

Nacos 将注册中心和配置中心整合在一起,提供了两个核心功能,即服务注册与发现和动态配置服务。

Nacos 支持基于 DNS 和 基于 RPC 的服务发现,服务提供者向 Nacos 服务端注册服务后,服务消费者可以从 Nacos 服务端获取注册列表。

提供了一个简洁易用的 UI,方便用户管理所有环境的应用配置和服务配置,消除了配置变更时服务需重新部署的过程。还提供了包括 配置版本跟踪 金丝雀发布 一键回滚配置 以及 客户端配置更新状态跟踪 在内的一系列开箱即用的配置管理特性,大大降低配置变更带来的风险。

Nacos 分为服务端和客户端,服务端用来提供服务发现与注册等功能,客户端就是不同的应用和服务。

在 Nacos 的 Release Notes 可以看到每个版本的相关介绍。当前最新的稳定版本是 1.4.0。

Nacos 服务需要 Java 运行环境,因此,在启动服务之前需要确保你的服务器已经有了 Java 运行环境,并且配置好了 JAVA_HOME 。

参数说明:

-m:指定运行模式,standalone 表示单机模式

在 Nacos 配置文件中配置服务器ip,默认的端口号为8848,默认的用户名和密码均为nacos,访问 http://ip:8848/nacos/index.html 便能够成功登Nacos管理后台。

(1) 引入依赖

在 SpringBoot 项目中引入 Nacos 客户端依赖,pom.xml 添加如下内容:

(2) 修改配置

在 application.properties 配置文件中添加 Nacos 的基本配置 (也可以是 application.yml )

1)application.properties

2)application.yml

(3) @EnableDiscoveryClient 注解

在 SpringBoot 的启动类上添加 @EnableDiscoveryClient 注解来开启服务注册。

Nacos Discovery 默认集成了 Netflix Ribbon,服务消费者可以使用 RestTemplate 或 OpenFeign 进行服务的调用。

(1) Nacos 启动时报如下错误

问题原因:通过yum命令安装的普通的openJDK没有javac等工具,而且安装完以后连环境变量都不需要配置,就能使用 java -version 验证。

解决方案:重新安装devel开发版openJDK,开发版的openJDK有javac工具,然后配置java环境变量即可。

(2) Nacos Provider 启动报错

问题原因:没有配置 Nacos 服务端的地址,因此,当 Nacos Provider 启动的时候,无法与注册中心通信

解决方案:在配置文件中配置 Nacos 服务端地址,如下所示:

热点内容
极光大数据库 发布:2025-03-15 10:11:48 浏览:581
智e付忘了登录密码在哪里修改 发布:2025-03-15 10:05:20 浏览:649
手机热点密码忘了怎么办 发布:2025-03-15 09:28:26 浏览:363
缓解压力锻炼方法 发布:2025-03-15 09:23:01 浏览:426
impdp存储过程 发布:2025-03-15 09:20:05 浏览:741
pythoniris 发布:2025-03-15 09:05:27 浏览:190
浪淘沙服务器怎么没有了 发布:2025-03-15 09:05:26 浏览:100
ftprpm安装包下载 发布:2025-03-15 09:03:53 浏览:723
如何判断背包配置 发布:2025-03-15 09:03:00 浏览:900
淘宝api源码 发布:2025-03-15 09:00:00 浏览:160