Nacos服务管理

news2024/11/26 7:44:29

1.前言

     在当前的分布式系统和微服务架构中,服务发现和管理变得至关重要。Nacos(NAme COntrol Service)作为一个开源的动态服务发现、配置管理和服务管理平台,为解决这些挑战提供了一站式的解决方案。其提供的负载均衡、分环境管理、权重配置、同集群优先访问和健康检测等功能,使得 Nacos 成为了构建高可用性、可扩展性和灵活性的分布式系统的不可或缺的工具。在本文中,我们将深入探讨 Nacos 的这些强大功能,以及它们为什么成为了微服务架构中的关键组件。

 

2. Nacos负载均衡

        生产环境相对是比较恶劣的, 我们需要对服务的流量进行更加精细的控制. Nacos支持多种负载均衡策略, 包括权重, 同机房, 同地域, 同环境等

         2.1 服务下线

当某一个节点上接口的性能较差时, 我们可以第一时间对该节点进行下线.
 
操作步骤: 服务详情 -> 下线
 
b2c55548d7054f4187d261bda4f0a215.png
1c80341e4518406a8506be1b8ba974ea.png
 
  1. 点击下线后, 再次请求接口, 会发现该服务没有请求进来了
  2. 再次单击上线, 该节点会继续收到请求.
 

        2.2  权重配置

 
        除了下线之外, 我们也可以配置这个节点的流量权重。比如一个节点的速度很慢,我可以对其的权重设置的小一点,来减轻该服务器的压力。
 

        2.2.1 配置权重

操作步骤: 找到对应节点 ->编辑 -> 在弹出的窗口修改权重值
 
 
 
e6dd6092877342209fd44c950e39221a.png
 
每个节点默认权重为1, 修改为0.1
 

        2.2.2 开启Nacos负载均衡策略

        由于Spring Cloud LoadBalance组件自身有负载均衡配置方式, 所以不支持Nacos的权重属性配置,运行的是spring_cloud自带的负载均衡,需要在yml配置文件中开启nacos的负载均衡策略。我们需要开启Nacos的负载均衡策略, 让权重配置生效
 
参考链接: 
如何解决MSE Nacos上修改服务实例的权重不生效问题_微服务引擎(MSE)-阿里云帮助中心 (aliyun.com)
 
spring:
  cloud:
    loadbalancer:
      nacos:
        enabled: true
        这段代码配置了Spring Cloud中的负载均衡器(LoadBalancer)使用Nacos作为服务注册中心时的开启状态。当你的微服务需要在Spring Cloud环境下进行负载均衡,并且希望使用Nacos作为
 
服务注册中心时,可以通过设置 spring.cloud.loadbalancer.nacos.enabled为true来启用Nacos的负载均衡策略。
 

       2.2.3 测试权重配置

 启动服务, 访问多次接口, 观察结果, 会发现9091端口号的实例接收请求明显比另外两个实例少。
 
整体流量生效, 局部流量不是严格按照设置的比例进行分配的,就是只是只是概率问题,并不是绝对,比如你有一万个测试用例会按照 10 : 1 进行访问,但你只有两个就很有可能是 1 : 1,
 

        2.2.4 常见的问题

修改权重的时候,可能会报错。
 
报错信息: caused: errCode: 500, errMsg: do metadata operation failed ;caused:
 
com.alibaba.nacos.consistency.exception.ConsistencyException: The Raft Group
 
[naming_instance_metadata] did not find the Leader node;caused: The Raft Group
 
[naming_instance_metadata] did not find the Leader node;
原因: Nacos 采用raft 算法来计算 Leader, 并且会记录前一次启动的集群地址, 当服务器 IP 改变时会导致 raft 记录的集群地址失效, 导致选 Leader 出现问题. (网络环境发生变化时, IP地址也会发生变化)
 
解决办法: 删除 Nacos 根目录下 data 文件夹下的 protocol 文件夹即可.
 
3bb2b5fdfc32499e8c2f7dcf904f2036.png
13da90ef4d3144cd841d6e2b73a12f05.png
 

这个报错的原因:是Nacos采用Raft算法来选举Leader节点,并且会记录上一次启动时的集群地址。当服务器的IP地址发生变化时,会导致之前记录的集群地址失效,从而导致选举Leader节点时出现问题。

具体来说,Nacos在启动时会生成一个唯一标识符(通常是基于机器的IP地址和端口),用于在Raft协议中识别节点。如果服务器的IP地址发生了变化,之前生成的唯一标识符就无法与当前的IP地址匹配,导致Raft协议无法正确选举Leader节点。

解决这个问题的方法是删除Nacos根目录下data文件夹下的protocol文件夹。这样做会清除之前记录的集群地址信息,使得Nacos在下一次启动时重新生成新的唯一标识符,从而解决IP地址变化导致的问题。

总之,当Nacos服务器的IP地址发生变化时,需要手动清除旧的集群地址信息,以确保Raft算法能够正确选举Leader节点。

     2.3 同集群优先访问

        在同一集群内的服务通常具有更低的网络延迟,因为它们之间的数据传输不需要经过长距离的网络链路。通过优先访问同集群的服务,可以减少请求的网络往返时间,提升服务调用的响应速度。离得近,肯定速度要快,可以降低跨机房通信的频率,从而节省网络带宽和成本。

Nacos把同一个机房内的实例, 划分为一个集群. 所以同集群优先访问, 在一定程度上也可以理解为同机房优先访问。
 
微服务架构中, 一个服务通常有多个实例共同提供服务, 这些实例可以部署在不同的机器上, 这些机器可以分布在不同的机房, 比如product-service:
  • 实例1: 分布在上海机房
  • 实例2: 分布在上海机房
  • 实例3: 分布在北京机房
  • 实例4: 分布在北京机房

 20ea3d06d504414cab03937919203bc2.png

       
 
         微服务访问时,应尽量访问同机房的实例,当本机房内实例不可用时,才访问其他机房的实例,比如order-service 在上海机房, product-service 在北京和上海机房都有实例, 那我们希望可以优先访问上海机房, 如果上海机房没有实例, 或者实例不可用, 再访问北京机房的实例. 通常情况下, 因为同一个 机房的机器属于一个局域网, 局域网访问速度更快一点。
 
 

a6099e2e4cf248489c3c0e97b46c13a6.png                 2.3.1 给实例配置集群名称

  1. 为product-service配置集群名称,为模块配置集群名称。

spring:
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:10020
        cluster-name: SH # 集群名称: 上海集群

  • spring: 这是Spring Boot配置的根级别。
  • cloud: 这指定了与Spring Cloud相关的配置。
  • nacos: 在cloud下面,你有nacos部分,其中包含了针对Nacos的设置。
  • discovery: 在nacos部分下,discovery用于与服务发现相关的配置。
  • server-addr: 这指定了用于服务发现的Nacos服务器的地址。在这里,它被设置为127.0.0.1:10020
  • cluster-name: 这指定了集群名称。这里设置为SH,表示集群名称为"上海集群"。

这个配置告诉Spring Cloud使用Nacos作为服务发现机制,并将其指向位于127.0.0.1:10020的Nacos服务器,集群名称为"上海集群"。

2. 重启服务, 观察Nacos控制台, SH集群下多了⼀个实例

53e39ab55f774a3b9b71b21477b573bb.png

复制product-service启动配置, 添加VM Option , 使用命令参数的形式,启动springboot容器并且指定配置内容。设置统一模块的不同配置内容启动。
 
ee21396ed0c44d98a984f4986dc588d2.png
 
22f0151419cb4cc2b554c55968955d1a.png
 
设置启动端口为9091,机房为BJ。
 
-Dserver.port=9091 -Dspring.cloud.nacos.discovery.cluster-name=BJ
 
设置启动端口为9092,机房为BJ。
 
-Dserver.port=9092 -Dspring.cloud.nacos.discovery.cluster-name=BJ

 

查看结果启动成功 

aa1ea005505346bd96de3754932b0689.png 

        2.3.2 开启Nacos负载均衡策略 

 运行的是spring_cloud自带的负载均衡,需要在yml配置文件中开启nacos的负载均衡策略。

spring:
  cloud:
    loadbalancer:
      nacos:
        enabled: true

  • spring: 这是Spring Boot配置的根级别。
  • cloud: 这指定了与Spring Cloud相关的配置。
  • loadbalancer: 在cloud下面,您有loadbalancer部分,用于配置负载均衡器。
  • nacos: 在loadbalancer部分下,nacos用于指定Nacos作为负载均衡器的配置。
  • enabled: 这指定了Nacos负载均衡器的启用状态,设置为true表示启用。

这个配置告诉Spring Cloud将Nacos作为负载均衡器,并将其启用。

        

3. Nacos的健康检查

3.1 两种健康检查机制

Nacos作为注册中心,需要感知服务的健康状态,才能为服务调用方提供良好的服务。

Nacos 中提供了,两种健康检查机制:

  1. 客户端主动上报机制(用于临时实例(临时工)):
    1. 客户端会向服务端(nacos)发送心跳包,默认心跳间隔是5秒。
    2. nacos会在超过15秒未收到心跳后将实例设置为不健康的状态,超过30秒将会删除。
    3. 举例:员工主动上报,员工每天主动汇报自己的工作状态。
  2. 服务器反向探测机制(永久实例(正式工)):
    1. nacos主动探知客户端的状态,默认是20秒。
    2. 健康检测失败后实例会被标记为不健康,不会立即删除。
    3. 举例:领导每周向员工了解工作进度。

be7da523272642a592d81954792c454c.png 

Nacos 中的健康检查机制不能主动设置,健康检查机制是和 Nacos 的服务实例类型强相关的。

 

3.2 Nacos服务实例类型 

Nacos的服务实例(注册的节点)分为临时实例和非临时实例.
 
  • 临时实例: 如果实例宕机超过一定时间, 会从服务列表剔除, 默认类型.
  • 非临时实例: 如果实例宕机,不会从服务列表剔除,也可以叫永久实例
Nacos对临时实例,采取的是 客户端主动上报机制, 对非临时实例, 采取服务器端反向探测机制.
 
25030e577b01457695b928912cc43058.png
 
 
配置一个服务实例为永久实例(默认是临时实例)
 
spring:
  cloud:
    nacos:
      discovery:
        ephemeral: false # 设置为非临时实例

设置了Nacos服务发现中实例的生命周期为非临时实例。

  • spring: 这是Spring Boot配置的根级别。
  • cloud: 这指定了与Spring Cloud相关的配置。
  • nacos: 在cloud下面,您有nacos部分,其中包含了针对Nacos的设置。
  • discovery: 在nacos部分下,discovery用于与服务发现相关的配置。
  • ephemeral: 这个属性指定了Nacos中实例的生命周期。将其设置为false表示非临时实例,即实例将长期存在。

配置完,删除nacos 目录下 /data/protocol/raft 信息, 里面会保存应用实例的元数据信息.    

原因是: Nacos会记录每个服务实例的IP和端口号,当发现IP和端口都没有发生变化时,Nacos不允许一个服务实例类型发生变化,比如从临时实例,变为非临时实例,或者从非临时实例,变成临

时实例。

小问题:服务正常, Nacos健康检查失败,显示false

a34c0086332943778f083f030027a32f.png

具体参考:如何解决Nacos持久化实例HTTP/TCP的健康检查不通过问题_微服务引擎(MSE)-阿里云帮助中心 (aliyun.com)

6.Nacos环境隔离

企业开发中, ⼀个服务会分为开发环境, 测试环境和生产环境.
 
  1. 开发环境:开发人员用于开发的服务器, 是最基础的环境. 一般目志级别设置较低, 可能会开启一些调试信息.
  2. 测试环境:测试人员⽤来进行测试的服务器, 是开发环境到生产环境的过渡环境.
  3. 生产环境:正式提供对外服务的环境, 通常关掉调试信息.
  4. 预发布环境(不对外开放)
  5. 发布环境(对外开放)
通常情况下, 这几个环境是不能互相通信的. Nacos提供了namespace(命名空间)来实现环境的隔离.
 
不同的namaspace的服务不可见.

        6.1 创建Namespace

默认情况下,所有服务都在同⼀个namespace,名为public
 
f1ae2facc9ea40d88a1f9eb4cf98874f.png
 
点击左侧命名空间, 可以对namespace进行操作
 
 
faf97bfc3706498f85d558ece6a92483.png

 

        6.2 配置namespace

namespace创建完成后, 对服务进行配置,设置分发的环境
 
常用场景之一是不同环境的注册的区分隔离, 例如开发测试环境和生产环境的资源(如配 置、服
 
务)隔离等。
 
sping:
 cloud:
   nacos:
     discovery:
	   namespace: 8a61ef37-2daa-402f-8b1d-5363629c5c87 #通过设置名命名空间来划分所属的环境
哪个模块的配置文件设置这个代码就是代表哪个代码会被分配到该ID的环境中。只有相同环境下才可以进行服务发现。
 

7. 总结

本文深入探讨了 Nacos(NAme COntrol Service)作为一个开源的动态服务发现、配置管理和服务管理平台的强大功能,以及为什么它成为了微服务架构中的关键组件。

  1. Nacos负载均衡

    • Nacos支持多种负载均衡策略,包括权重、同机房、同地域、同环境等。
    • 可以通过服务下线或配置节点的流量权重来实现负载均衡调控。
  2. Nacos的健康检查

    • Nacos提供了两种健康检查机制:客户端主动上报和服务器端反向探测。
    • 服务实例分为临时实例和非临时实例,对应不同的健康检查机制。
  3. Nacos环境隔离

    • 使用namespace(命名空间)实现不同环境的服务隔离,确保各环境的服务不可见,从而实现环境间的隔离和管理。

总的来说,Nacos作为一个集服务发现、配置管理和服务管理于一体的平台,通过其丰富的功能和灵活性,为构建高可用性、可扩展性和灵活性的分布式系统提供了便利和支持。

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1795525.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

接口自动化框架封装思想建立(全)

httprunner框架(上) 一、什么是Httprunner? 1.httprunner是一个面向http协议的通用测试框架,以前比较流行的是2.X版本。 2.他的思想是只需要维护yaml/json文件就可以实现接口自动化测试,性能测试,线上监…

elementplu父级页面怎么使用封装子组件原组件的方法

一、使用原因: 封装了el-table,表格中有多选,父级要根据指定状态,让其选择不上,需要用到elementplus中table原方法toggleRowSelection 附加小知识点:(el-tree刷新树后之前选中的保持高亮setCurr…

【荒原之梦考研数学】感谢 CSDN 的小伙伴们

自 2016 年在 CSDN 上开设账号至今,荒原之梦网获得了很多同学们的支持和肯定,以及意见或建议,荒原之梦网一路走来,是大家给予了我们不断前进的动力。 当前这个 CSDN 账号,是荒原之梦考研数学网目前在 CSDN 的第一个也…

css 中clip 属性和替代方案 clip-path属性使用

clip clip 属性概述 作用:clip 属性用于定义一个裁剪区域,该区域外的元素内容将不可见。适用元素:clip 属性只对绝对定位(position: absolute)或固定定位(position: fixed)的元素有效&#xf…

JVM学习-Arthas

Arthas Alibaba开源的Java诊断工具,在线排查问题,无需重启,动态跟踪Java代码,实时监控JVM状态Arthas支持JDK6,支持Linux/Mac/Windows,采用命令行交互模式,同时提供丰富的Tab自动补全功能&#…

MogoTemplate基本入门(Mongodb数据库基本增删改查)

nosql 因为没有标准的 sql,各有各的操作方式,所以学习成本比较高。实际应用也不会去命令行直接操作,而是用编程语言的 api。 所以我们可以简单了解一下Mongodb,然后用java的Api去操作就行了 没必要花很大功夫在命令行上操作执行…

创意SQL,高考祝福!一起为学子们加油助威!

📢📢📢📣📣📣 作者:IT邦德 中国DBA联盟(ACDU)成员,10余年DBA工作经验, Oracle、PostgreSQL ACE CSDN博客专家及B站知名UP主,全网粉丝10万 擅长主流Oracle、My…

rman恢复后,少部分数据文件状态为MISSING000**

客户有套一体机,每天晚上21点开始做rman完全备份,大约第2天上午9点多完成备份,rman备份保留策略保留一份完全备份 6月1日晚21点自动发起备份,6月2日上午10点15分完成备份,并生成了一个控制文件备份 c-4063271871-2024…

Navicat修改数据库主键

在MySQL数据库,主键ID默认自增(最大的数字自增),但是,在某些情况下,我们想将其从头开始………… 借助Navicat修改数据库主键即可! 1. 找到数据库,点击需要更改的表:点击…

二重,三重积分和曲面,曲线积分的关系和区别

这是我在学习完曲面曲线积分概念后容易和二重三重积分混淆而大概总结和区分了一下,如果有错误请大佬指出,多谢!!!

I2C通信外设

I2C外设介绍 主机,就是拥有主动控制总线的权利。从机,只能在从机允许的情况下,才能控制总线。 多主机模型可分为固定多主机和可变多主机。固定多主机就是总线上,有2个或2个以上固定的主机,上面固定为主机,下…

GIF录屏工具Gif123 v3.3.0单文件

软件介绍 GIF的优势是小、轻、快,适合时间短、画面小、需要嵌入其他页面,打开就自动循环播放的动画。Gif123可录制合成鼠标轨迹,可调整鼠标指针大小,可在设置中打开鼠标指针高亮光圈功能,高亮光圈可跟随鼠标移动以指示鼠标位置。软件极其简单&#xff0…

使用 IPSET 添加 CDN 节点 IP(IPv4/IPv6)到防火墙白名单

明月的服务器一直使用的是 iptables,随着近几年 IPv6 的普及,明月切身体会到还是 IPSET 最方便了,无论你是 IPv4 还是 IPv6 都可以方便的管理,无论你是加入白名单还是黑名单,都非常的简单高效!今天就参照明月自己的实操…

高校运维赛 2024 pyssrf

没有环境,简单过一遍思路吧 考点: pickle反序列化urllib库注入redis缓存 from flask import Flask,request from redis import Redis import hashlib import pickle import base64 import urllib app Flask(__name__) redis Redis(host127.0.0.1, port6379)def get_result(u…

安全测试 之 安全漏洞 CSRF

1. 背景 安全测试是在功能测试的基础上进行的,它验证软件的安全需求,确保产品在遭受恶意攻击时仍能正常运行,并保护用户信息不受侵犯。 2. CSRF 定义 CSRF(Cross-Site Request Forgery),中文名为“跨站请…

halo进阶-主题插件使用

开始捣鼓捣鼓halo,换换主题,加个页面 可参考:Halo 文档 安装/更新主题 主题如同壁纸,萝卜青菜各有所爱,大家按需更换即可; Halo好在一键更换主题,炒鸡方便。 安装/更新插件 此插件还扩展了插件…

神经网络 torch.nn---损失函数与反向传播

torch.nn - PyTorch中文文档 (pytorch-cn.readthedocs.io) torch.nn — PyTorch 2.3 documentation Loss Function的作用 每次训练神经网络的时候都会有一个目标,也会有一个输出。目标和输出之间的误差,就是用Loss Function来衡量的。所以,…

超简单白话文机器学习 - 模型检验与评估(含算法介绍,公式,源代码实现以及调包实现)

1. 模型检验 1.1 Holdout交叉验证 1.1.1 算法 在这种交叉验证技术中,整个数据集被随机划分为训练集和验证集。根据经验,整个数据集的近 70% 用作训练集,其余 30% 用作验证集。 优点:可以快速进行区分,仅仅通过一次区…

【cmake】cmake cache

cmake cache是什么 cmake cache是cmake在配置好后生成的一个CMakeCache.txt的文件,里面存储了一堆变量,这些变量一般都是关于项目的配置和环境的。 比如你用的什么编译器,编译器选项,还有项目目录。 例如(在cmakelist…

06- 数组的基础知识详细讲解

06- 数组的基础知识详细讲解 一、基本概念 一次性定义多个相同类型的变量,并且给它们分配一片连续的内存。 int arr[5];1.1 初始化 只有在定义的时候赋值,才可以称为初始化。数组只有在初始化的时候才可以统一赋值。 以下是一些示例规则: …