Nacos 2.5.0 全文详解及配置(并解决WebServerException: Unable to start mbedded Tomcat)
Nacos 2.5.0 下载:
已放置在博文中:https://download.csdn.net/download/xxiaobaibaibai/90299781
启动报错:
修改内容参考下方 Windows 配置 Nacos
中 第四项(将Nacos启动修改为单机模式)
。
Nacos 概述
什么是 Nacos?
Nacos 是由阿里巴巴开源的一个动态服务发现、配置管理和服务管理平台。它为微服务架构提供了强大的支持,可以简化服务的注册、发现、配置和管理,帮助开发者更轻松地进行微服务架构的管理和维护。Nacos 支持多种服务发现方式(包括 DNS、REST API 等),并且具备强大的配置管理能力,特别是在云原生应用和容器化环境中,Nacos 显得尤为重要。
Nacos 的核心功能
- 服务发现与注册:通过 Nacos,微服务可以在启动时自动注册到注册中心,其他微服务则可以通过 Nacos 查询并访问这些服务。Nacos 支持多种协议(如 HTTP、gRPC)和负载均衡算法,能够动态调整服务实例的可用性。
- 配置管理:Nacos 作为配置中心,支持分布式配置的管理,允许在不同环境下对配置进行集中管理。其支持热更新功能,使得配置的修改可以即时生效,无需重启服务。
- 动态 DNS 服务:Nacos 提供 DNS 服务,支持根据服务实例的 IP 地址和端口号动态创建和更新 DNS 记录,方便客户端进行访问。
- 健康检查:Nacos 定期对服务实例进行健康检查,如果某个服务实例不健康,则会将其从服务发现列表中移除。
Nacos 的应用场景
Nacos 广泛应用于微服务架构、容器化和云原生应用中,尤其适用于如下场景:
- 微服务架构:提供自动化的服务注册与发现机制,简化微服务之间的通信。
- 配置管理:集中管理应用的配置信息,并支持动态刷新,无需重启服务。
- 容器编排:与 Kubernetes 等容器编排平台结合,提供服务发现与配置管理的功能。
- 动态 DNS:为分布式服务提供动态 DNS 解析。
Windows 配置 Nacos
-
初始化数据库:
- **创建数据库:**通过
mysql
可视化工具,例如Navicat
连接数据库,并创建Nacos
数据库。 - 导入数据: 在
Navicat
中选中Nacos
数据库并右键选中后,点击运行SQL文件
,进入nacos\conf
目录下,找到mysql-schema.sql
文件执行(或可以通过scoure
命令进行数据导入)。
- **创建数据库:**通过
-
修改配置文件:
进入
nacos\conf
目录下,找到application.properties
文件,进入其中找到以下内容删除注释:原文:
# spring.datasource.platform=mysql # spring.sql.init.platform=mysql ### Count of DB: # db.num=1 ### Connect URL of DB: # db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=Asia/Shanghai # db.user.0=nacos # db.password.0=nacos
修改后:
spring.datasource.platform=mysql # spring.sql.init.platform=mysql ### Count of DB: db.num=1 ### Connect URL of DB: db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=Asia/Shanghai db.user.0=root db.password.0=nacos
-
修改日志配置:
在
application.properties
文件同级目录下找到nacos-logback.xml
文件,进入其中找到以下内容进行全文替换:${nacos.home} -> .. ${logPath} -> ../logs
-
将Nacos启动修改为单机模式:
进入
nacos\bin
目录下,找到startup.cmd
文件,通过编辑进入其中找到以下内容进行全文替换:set MODE = "cluster" -> set MODE = "standalone"
-
启动Nacos:
点击
startup.cmd
文件,如果启动成功会提示:682 INFO Tomcat initialized with port(s): 8848 (http)
-
进入Nacos注册中心网址确认是否启动成功:
默认URL为:
http://localhost:8848/nacos
Nacos 与 Spring Cloud 集成
Spring Cloud Nacos Starter
Spring Cloud 提供了与 Nacos 的集成支持,用户可以通过 Spring Cloud Nacos Starter 快速将 Nacos 集成到 Spring Boot 项目中,实现服务注册与发现、配置管理等功能。
-
服务注册与发现:Spring Cloud Nacos Starter 提供了自动配置,能够将服务自动注册到 Nacos,客户端也能自动从 Nacos 获取服务实例信息。
-
配置管理:Spring Cloud Nacos Starter 支持将 Nacos 作为配置中心,自动加载 Nacos 上的配置文件,实现配置的动态更新。
-
集成方式:
-
在
pom.xml
中添加 Nacos 依赖:<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency>
-
配置
application.yml
文件:spring: cloud: nacos: discovery: server-addr: localhost:8848 config: server-addr: localhost:8848 file-extension: yaml
-
使用
@NacosValue
注解从 Nacos 获取配置:@NacosValue(value = "${user.name}", autoRefreshed = true) private String userName;
-
通过这种集成方式,Spring Boot 项目可以轻松地与 Nacos 配合,实现微服务架构下的服务注册、发现和配置管理。
Nacos 架构设计
Nacos 的架构概述
Nacos 的架构由多个模块组成,其中主要包括服务发现与注册、配置管理、健康检查等模块。Nacos 作为一个分布式系统,支持高可用部署,能够应对大规模的服务注册和配置管理需求。
- 服务发现与注册模块:服务注册时会提供服务的基本信息(如 IP 地址、端口、元数据等),Nacos 会定期进行健康检查,保证服务的有效性。服务发现客户端可以向 Nacos 查询服务的最新状态。
- 配置管理模块:Nacos 提供统一的配置管理平台,可以将配置文件存储在 Nacos 中,并通过 API 或管理控制台进行修改,修改后的配置可以自动刷新,客户端无需重启即可获取最新的配置。
- 集群管理模块:Nacos 支持多节点部署,保证高可用性和负载均衡。服务实例和配置文件都存储在集群中,保证数据的一致性和可靠性。
- Web 控制台:提供 Web 控制台界面,用户可以方便地查看和管理服务、配置、健康检查等信息。
服务发现与注册
Nacos 的服务发现与注册模块基于以下几个关键功能:
- 服务注册:每个服务实例在启动时会向 Nacos 注册自己的信息,如服务名称、IP 地址、端口、元数据等。服务实例通过心跳机制向 Nacos 维持活跃状态。
- 服务发现:服务客户端可以通过 Nacos 查询服务的最新实例信息,获取服务的地址和端口,进行负载均衡和健康检查。
- 健康检查:Nacos 会定期向服务实例发送心跳请求,检查服务是否可用。如果服务实例未响应心跳或返回不健康状态,Nacos 会将该实例从注册列表中移除,避免请求被路由到不可用的服务。
配置管理
Nacos 的配置管理模块包括以下核心功能:
- 配置存储:Nacos 支持分布式的配置存储,支持多种配置格式(如 Properties、YAML、JSON 等)。所有配置文件都集中存储在 Nacos 的配置中心中。
- 动态更新:配置文件可以动态更新,修改后的配置会立即生效,所有注册的服务会自动获取新的配置,而无需重启服务。
- 灰度发布:Nacos 提供灰度发布的支持,可以通过 Nacos 控制台或 API 实现配置的逐步发布,降低配置变更带来的风险。
- 配置加密:Nacos 支持配置加密,用户可以对敏感配置(如密码、密钥等)进行加密处理,确保数据安全。
Nacos 服务发现与注册
服务注册
服务实例启动时,客户端会向 Nacos 注册自己的信息,注册信息包括服务名称、IP 地址、端口号、健康状态、元数据等。Nacos 支持基于 HTTP、gRPC 等协议的服务注册,可以支持多种微服务框架,如 Spring Cloud 和 Dubbo。
心跳检测与健康检查
心跳检测是 Nacos 中服务发现与注册的重要机制。每个服务实例在注册时会启动一个定时任务,定期向 Nacos 发送心跳请求。通过这种方式,Nacos 可以实时掌握各个服务实例的健康状态。
- 健康检查的工作原理:
- 服务实例通过向 Nacos 发送心跳请求,表示自己是活跃的。
- 如果某个服务实例在规定的时间内未发送心跳请求,Nacos 会认为该实例已经不可用,并将其标记为不可用。
- Nacos 可以根据用户配置的健康检查方式(如 HTTP 检查、TCP 检查等)来进行定期的健康检测。
- 健康检查的类型:
- 服务实例健康检查:通过心跳机制或指定的健康检查 API 来判断服务实例的可用性。
- 负载均衡与路由:Nacos 会根据服务实例的健康状态来路由请求,保证请求不会被发送到不可用的服务实例。
- 服务实例下线:当 Nacos 发现某个服务实例不可用时,会立即从注册列表中将其移除,避免服务请求被路由到不健康的实例。
服务发现与客户端 SDK
Nacos 提供了多种客户端 SDK,支持不同语言的服务注册与发现。客户端 SDK 会定期从 Nacos 查询服务实例的最新状态,并进行负载均衡,保证高可用和容错。
- Java 客户端 SDK:通过
NacosDiscoveryClient
实现服务的注册与发现。 - 其他语言的客户端 SDK:包括 Go、Python、PHP 等语言的 SDK,支持跨语言的微服务发现。
Nacos 高可用与容错机制
高可用架构设计
Nacos 提供了高可用部署方案,支持多节点集群部署。在高可用模式下,Nacos 会将服务实例和配置存储在共享的数据库(如 MySQL 或 Redis)中,确保数据的一致性。
- 多节点部署:通过配置多个 Nacos 实例,保证系统的高可用性。在一个实例宕机的情况下,其他实例可以继续提供服务。
- 数据同步:Nacos 在集群模式下,所有实例共享同一份数据(服务实例信息、配置文件等),并通过一致性协议保证数据同步。
- 负载均衡:Nacos 支持负载均衡,将请求分配到不同的实例,提高系统的吞吐量。
Nacos 安全管理
用户认证与权限控制
Nacos 提供了用户认证和权限管理功能,可以控制谁能访问 Nacos 的管理控制台、配置文件和服务信息。
- LDAP 集成:Nacos 支持集成 LDAP,保证只有经过认证的用户才能访问控制台和 API。
- 访问控制列表(ACL):Nacos 允许配置权限控制列表,限制不同角色用户对服务和配置的访问权限。
安全加固
Nacos 还提供了访问控制、数据加密等安全措施,确保服务的安全性。
低版本与高版本 Nacos 的区别
随着 Nacos 的不断发展,低版本与高版本之间有了一些显著的变化:
- 功能增强:高版本 Nacos 增强了对多种协议的支持,增加了更多的配置管理功能,如灰度发布、配置加密等。
- 性能优化:高版本在性能和扩展性方面进行了优化,能够处理更多的并发请求和大规模的微服务实例。
- API 改进:高版本对 Nacos 的 API 进行了改进和优化,增加了更多的功能接口和更丰富的文档支持。
- 容错与高可用性增强:高版本提供了更强的容错能力,支持更多的数据库和缓存后端,以确保服务的高可用性。
总结
Nacos 是一个功能强大、易于扩展的服务发现与配置管理平台,广泛应用于微服务架构、云原生应用以及容器化环境中。它通过提供动态服务发现、配置管理、健康检查等功能,帮助开发者简化了微服务架构的部署和管理工作。随着版本的更新,Nacos 在功能、性能和安全性方面不断改进,已经成为微服务架构中不可或缺的基础组件之一。