Nacos Server部署配置全过程

 更新时间:2025年10月16日 12:21:35   作者:匍匐前进の程序猿  
本文介绍了Nacos的定义、核心功能(服务注册、心跳、发现、健康检查等)、单机和集群部署步骤,以及客户端服务的搭建与配置,旨在帮助用户快速了解和使用Nacos进行服务治理和配置管理

1.什么是Nacos?

官方简介:一个更易于构建云原生应用的动态服务发现(Nacos Discovery )服务配置(Nacos Config)和服务管理平台。

Nacos的关键特性包括

  • 服务发现和服务健康监测
  • 动态配置服务
  • 动态DNS服务
  • 服务及其元数据管理

Nacos的核心功能

  • 服务注册:Nacos Client会通过发送REST请求的方式向Nacos Server注册自己的服务,提供自身的元数据,比如ip地址、端口等信息。Nacos Server接收到注册请求后,就会把这些元数据信息存储在一个双层的内存Map中。
  • 服务心跳:在服务注册后,Nacos Client会维护一个定时心跳来持续通知Nacos Server,说明服务一直处于可用状态,防止被剔除。默认5s发送一次心跳。
  • 服务同步:Nacos Server集群之间会互相同步服务实例,用来保证服务信息的一致性。
  • 服务发现:服务消费者(Nacos Client)在调用服务提供者的服务时,会发送一个REST请求给Nacos Server,获取上面注册的服务清单,并且缓存在Nacos Client本地,同时会在Nacos Client本地开启一个定时任务定时拉取服务端最新的注册表信息更新到本地缓存。
  • 服务健康检查:Nacos Server会开启一个定时任务用来检查注册服务实例的健康情况,对于超过15s没有收到客户端心跳的实例会将它的healthy属性置为false(客户端服务发现时不会发现),如果某个实例超过30秒没有收到心跳,直接剔除该实例(被剔除的实例如果恢复发送心跳则会重新注册)。

2.Nacos Server 单机部署配置

2.1. 相关文件

2.2. 配置流程

  • 修改bin/startup.cmd文件信息,默认是集群模式,需修改为单机模式

  • 启动成功页面

  • 登录页面(默认用户名,密码:nacos)

  • 可选操作:端口修改,数据源设置—>config/application.properties文件

  • sql文件位置

2.3. 搭建Nacos-client 服务

(1)引入依赖

父Pom中支持spring cloud&spring cloud alibaba, 引入依赖

	<!--项目依赖管理,父项目只是声明依赖,子项目需要写明需要的依赖(可以省略版本信息)-->
    <dependencyManagement>
        <dependencies>
            <!--spring cloud alibaba 版本管理器-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${spring.cloud.alibaba.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <!--spring cloud 版本管理器-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring.cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <!--springboot 版本管理器-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-parent</artifactId>
                <version>${spring.boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

        </dependencies>
    </dependencyManagement>

子Pom中引入依赖

		<!--nacos 服务注册与发现-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

        <!--负载均衡器-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-loadbalancer</artifactId>
            <version>3.1.1</version>
        </dependency>

(2) application.yml中配置

server:
  port: 8020

# 应用名称 (nacos会将该名称当做服务名称)
spring:
  application:
    name: order-service
  cloud:
    nacos:
      server-addr: 172.16.10.132:8848 # 服务地址
      discovery:
        username: nacos
        password: nacos
#        namespace: public
#        ephemeral: false # 永久实例 哪怕宕机了也不会删除该实例?

#        service: # 默认取${spring.application.name}的值,也可以通过该选项配置 服务名称
#        group: #默认DEFAULT_GROUP  分组管理

更多Nacos相关配置: https://github.com/alibaba/spring-cloud-alibaba/wiki/Nacos-discovery

(3) 启动springboot应用,nacos管理端界面查看是否成功注册

(4)代码

@RestController
@RequestMapping("/order")
public class OrderController {

    @Autowired
    RestTemplate restTemplate;

    @RequestMapping("/add")
    public String add() {
        System.out.println("下单成功");
        String msg = restTemplate.getForObject("http://stock-service/stock/reduct", String.class);
        return "Hello World" + msg;
    }
}

注意!!! 需要加上@LoadBalanced

	@Bean
    @LoadBalanced
    public RestTemplate restTemplate(RestTemplateBuilder builder){
        RestTemplate restTemplate = builder.build();
        return restTemplate;
    }

(5) 测试

3.Nacos Server 集群部署配置(Windows环境)

3.1.环境准备

(1) jdk1.8+

(2) maven 3.3+

(3) nginx 作为负载均衡

(4) mysql

  • 集群部署架构图

3.2. 配置流程

(1) 复制 Nacos安装包,修改为 nacos8840、nacos8850、nacos8860

(2) 以nacos8840为例,进入nacos8840目录

(2.1) 修改conf\application.properties的配置,使用外置数据源 要使用mysql5.7+(包括)

(2.2) 将conf\cluster.conf.example复制一份,并改名为cluster.conf,添加节点配置

nacos8850,nacos8860 按同样的方式配置。

(3) 创建mysql数据库,sql文件位置:conf\nacos mysql.sql

(4)如果出现内存不足:修改启动脚本(bin\startup.sh)的jvm参数

5) 分别启动nacos8840,nacos8850,nacos8860

(6) 测试,出现以下界面,则表示Nacos集群已创建成功

登录 http://172.16.10.132:8840/nacos/index.html ,用户名和密码都是nacos

(7) 使用Nginx实现负载均衡

3.3. 搭建Nacos-client 服务

(1) 配置同上。

(2) application.yml中配置

server:
  port: 8020

# 应用名称 (nacos会将该名称当做服务名称)
spring:
  application:
    name: order-service
  cloud:
    nacos:
      server-addr: 172.16.10.132:8848 # nginx 服务地址
      discovery:
        username: nacos
        password: nacos
#        namespace: public
#        ephemeral: false # 永久实例 哪怕宕机了也不会删除该实例?

#        service: # 默认取${spring.application.name}的值,也可以通过该选项配置 服务名称
#        group: #默认DEFAULT_GROUP  分组管理

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java毕业设计实战之在线网盘系统的实现

    Java毕业设计实战之在线网盘系统的实现

    这是一个使用了java+JSP+Springboot+maven+mysql+ThymeLeaf+FTP开发的在线网盘系统,是一个毕业设计的实战练习,具有网盘该有的所有功能,感兴趣的朋友快来看看吧
    2022-01-01
  • Java通过调用FFMPEG获取视频时长

    Java通过调用FFMPEG获取视频时长

    这篇文章主要为大家详细介绍了Java通过调用FFMPEG获取视频时长,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-04-04
  • Netty通道的容器属性Attribute详解

    Netty通道的容器属性Attribute详解

    这篇文章主要介绍了Netty通道的容器属性Attribute详解,Netty中的Channel通道类,有类似于Map的容器功能,可以通过键值对的形式来保存任何Java Object的值,一般来说可以存放一些与通道实例相关联的属性,比如说服务期端的ServerSession会话实例,需要的朋友可以参考下
    2023-12-12
  • Java数据结构之最小堆和最大堆的原理及实现详解

    Java数据结构之最小堆和最大堆的原理及实现详解

    在计算机科学中,堆(heap) 的实现是一种基于树的特殊的数据结构,它可以在数组上构建出树的结构体,并满足堆的属性。本文就来和大家详细聊聊Java数据结构中的堆,感兴趣的可以了解一下
    2022-09-09
  • Spring Boot Actuator未授权访问漏洞的问题解决

    Spring Boot Actuator未授权访问漏洞的问题解决

    Spring Boot Actuator 端点的未授权访问漏洞是一个安全性问题,可能会导致未经授权的用户访问敏感的应用程序信息,本文就来介绍一下解决方法,感兴趣的可以了解一下
    2023-09-09
  • 什么情况下会出现java.io.IOException : Broken pipe这个错误以及解决办法

    什么情况下会出现java.io.IOException : Broken pipe这个错误以及解决办法

    这篇文章主要介绍了什么情况下会出现java.io.IOException : Broken pipe这个错误以及解决办法的相关资料,这个错误表示通信另一端已关闭连接,常发生在客户端关闭连接、网络超时或资源不足等情况,文中将解决办法介绍的非常详细,需要的朋友可以参考下
    2024-10-10
  • Mybatis模糊查询和动态sql语句的用法

    Mybatis模糊查询和动态sql语句的用法

    今天小编就为大家分享一篇关于Mybatis模糊查询和动态sql语句的用法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • Spring Boot 3 整合 Spring Cloud Gateway实践过程

    Spring Boot 3 整合 Spring Cloud 

    本文介绍了如何使用SpringCloudAlibaba2023.0.0.0版本构建一个微服务网关,包括统一路由、限流防刷和登录鉴权等功能,并通过一个项目实例进行详细说明,感兴趣的朋友一起看看吧
    2025-02-02
  • 解决IDEA 2020.1版本 maven Test命令出现导包错误的问题

    解决IDEA 2020.1版本 maven Test命令出现导包错误的问题

    这篇文章主要介绍了IDEA 2020.1版本 maven Test命令出现导包错误的问题及解决方法,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-08-08
  • Java异常处理机制throws举例详解

    Java异常处理机制throws举例详解

    这篇文章主要介绍了Java中异常处理机制,包括finally的使用、异步处理的方式(throws)、以及手动抛出异常,finally用于确保资源释放,throws用于声明方法可能抛出的异常,由调用者处理,手动抛出异常则是在特定条件下主动抛出异常对象,需要的朋友可以参考下
    2024-11-11

最新评论