文章目录
部署在最下边,别急,容我介绍下nacos,或者可以直接到最下边
Nacos:微服务架构中的服务发现与配置管理利器
官方网址
引言
随着微服务架构的普及,服务发现与配置管理成为了构建云原生应用不可或缺的一部分。Nacos(Dynamic Naming and Configuration Service)作为阿里巴巴开源的一款中间件,以其强大的服务发现和配置管理能力,为微服务架构提供了全面的解决方案。本文将详细介绍Nacos的功能、原理、使用场景以及如何在项目中集成Nacos。
Nacos简介
Nacos是Dynamic Naming and Configuration Service的首字母简称,是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。Nacos提供了简单易用的特性集,帮助开发者快速实现动态服务发现、服务配置、服务元数据及流量管理。作为阿里开放的一款中间件,Nacos主要提供持久化节点注册、非持久化节点注册和配置管理三大功能。
Nacos的核心功能
1. 服务发现和服务健康监测
Nacos作为服务注册中心,可以帮助服务实例注册和发现,实现微服务架构中的服务注册与发现功能。它支持多种注册方式,如HTTP、DNS等,能够动态地管理服务实例信息,实现服务之间的通信。同时,Nacos还提供了健康检查功能,能够及时发现不健康的服务实例并进行处理,确保服务的可靠性和稳定性。
2. 动态配置服务
Nacos作为配置中心,可以集中管理系统各个服务的配置信息。它支持动态配置更新、配置监听、配置推送等特性,可以实时地更新配置信息,而不需要重启服务。这一功能极大地提高了系统的灵活性和可维护性。
3. 服务及其元数据管理
除了基本的服务注册信息外,Nacos还支持服务实例的元数据管理,例如版本信息、扩展信息等。这些元数据可以帮助客户端更精确地选择服务实例。
Nacos的工作原理
Nacos的工作原理主要涉及Nacos Serve
r和Nacos Client
两个主要部分。
- Nacos Server是服务注册与发现的管理中心,采用Java编写,主要提供注册发现服务和配置服务
- Nacos Client则是在每个微服务中嵌入的,负责实际的服务注册、查询和订阅等操作
当一个服务启动时,它会通过Nacos Client向Nacos Server注册自己的信息,包括IP地址、端口号和元数据等。同时,这个服务也会定期向Nacos Server发送心跳请求,以保持自己的注册信息和服务状态是最新的。Nacos Server接收到心跳请求后,会更新该实例的状态为正常,并记录下最后一次收到心跳的时间。如果在一段时间内没有收到某个实例的心跳请求,则认为该实例已经宕机或者不可用,服务端会将该实例从服务列表中移除。
Nacos的集群部署与高可用性
Nacos支持集群部署,通过增加节点的方式来提高系统的可用性。在集群部署中,Nacos采用了Raft算法
来进行领导选举和数据一致性管理。Raft算法通过“一切以领导者为准
”的方式,实现了一系列值共识和各节点日志一致。
在Nacos集群中,节点角色主要分为Leader
、Candidate
和Follower
三种
- Leader节点负责向其他节点下达指令,维护整个集群的状态和数据一致性
- Candidate节点则参与竞选Leader的角色
- Follower节点则主要用于接收来自Leader或Candidate的请求并进行处理。
Nacos的使用场景
Nacos广泛应用于微服务架构中,特别是在需要服务发现和配置管理的场景中。例如,在Spring Cloud Alibaba生态体系中,Nacos可以无缝接入,提供动态服务发现和配置管理服务。此外,Nacos还支持Kubernetes、ServiceMesh等生态体系,为云原生应用提供了全面的解决方案。
如何使用Nacos
1. 安装Nacos
首先需要在服务器上安装Nacos。可以通过官方提供的可执行文件或者Docker容器进行部署和启动。
2. 服务注册与发现
在微服务项目中,通过引入Nacos的客户端依赖,并在配置文件中配置Nacos服务器的地址,即可实现服务的注册与发现。服务启动时,会自动向Nacos注册自己的信息;服务消费者则可以通过Nacos查询服务实例列表,并进行远程调用。
3. 配置管理
将配置文件上传到Nacos中,应用程序在启动时从Nacos获取配置,并将其应用到应用程序中。同时,应用程序可以通过Nacos提供的API进行配置监听,以便在配置发生变化时实时接收到通知并更新配置。
总结
Nacos作为微服务架构中的服务发现和配置管理利器,以其强大的功能和简单易用的特性集,为开发者提供了全面的解决方案。通过Nacos,开发者可以轻松地实现服务的注册与发现、配置的动态更新和管理,从而构建健壮的分布式系统。无论是对于初创企业还是大型企业,Nacos都是一个值得推荐的中间件产品。
部署工作正式开始
环境
环境 | 内核版本 |
---|---|
10.255.101.102 | CentOS Linux release 7.9.2009 (Core) |
软件 | 版本 |
---|---|
java | 1.8.0_412 |
nacos | 2.4.1 |
mysql | 5.7.34 |
yum安装java环境
选取版本安装
搜索java的jdk版本
yum list | grep java-1.8.0-openjdk
# 安装
yum install java-1.8.0-openjdk-devel.x86_64 -y
配置环境变量
在/etc/profile中配置java环境,增加到最下边即可
JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.362.b08-1.el7_9.x86_64/
JRE_HOME=$JAVA_HOME/jre
CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export JAVA_HOME JRE_HOME CLASS_PATH PATH
加载变量
source /etc/profile
查看版本
java -version
docker安装mysql
docker安装
mysql安装
安装nacos
下载nacos资源包
nacos下载网址
下载完成后,传输到服务器上
unzip nacos-server-2.4.1.zip
解压后得到nacos目录
数据库初始化
登陆数据库创建库
CREATE DATABASE nacos_config CHARACTER SET utf8 COLLATE utf8_general_ci;
source /data/nacos/conf/mysql-schema.sql;
修改配置文件
[root@test conf]# pwd
/data/nacos/conf
[root@test conf]# grep -Ev '^#|^$' application.properties
## 过滤掉了#行和空行,然后备份现有的配置文件,复制写入到新的里边
[root@test conf]# mv application.properties application.properties-bak
[root@test conf]# vim application.properties
application.properties
db.num=1
db.url.0=jdbc:mysql://10.255.101.102:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=nacos123456
server.servlet.contextPath=/nacos
server.error.include-message=ALWAYS
server.port=8848
db.pool.config.connectionTimeout=30000
db.pool.config.validationTimeout=10000
db.pool.config.maximumPoolSize=20
db.pool.config.minimumIdle=2
nacos.config.push.maxRetryTime=50
server.tomcat.mbeanregistry.enabled=true
management.metrics.export.elastic.enabled=false
management.metrics.export.influx.enabled=false
server.tomcat.accesslog.enabled=true
server.tomcat.accesslog.rotate=true
server.tomcat.accesslog.file-date-format=.yyyy-MM-dd-HH
server.tomcat.accesslog.pattern=%h %l %u %t "%r" %s %b %D %{User-Agent}i %{Request-Source}i
server.tomcat.basedir=file:.
nacos.security.ignore.urls=/,/error,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-ui/public/**,/v1/auth/**,/v1/console/health/**,/actuator/**,/v1/console/server/**
nacos.core.auth.system.type=nacos
nacos.core.auth.enabled=true
nacos.core.auth.caching.enabled=true
nacos.core.auth.enable.userAgentAuthWhite=false
nacos.core.auth.server.identity.key=
nacos.core.auth.server.identity.value=
nacos.core.auth.plugin.nacos.token.cache.enable=false
nacos.core.auth.plugin.nacos.token.expire.seconds=18000
nacos.core.auth.plugin.nacos.token.secret.key=
nacos.istio.mcp.server.enabled=false
配置文件详解
# Nacos 数据库配置
db.num=1 # 数据库实例数量
db.url.0=jdbc:mysql://10.255.101.102:3306/nacos_config?characterEncoding=utf8&... # 数据库连接URL,包含数据库地址、端口、数据库名及连接参数
db.user.0=root # 数据库用户名
db.password.0=nacos123456 # 数据库密码
# Nacos 服务端配置
server.servlet.contextPath=/nacos # 服务端上下文路径
server.error.include-message=ALWAYS # 错误信息是否包含异常消息
server.port=8848 # 服务端端口
# 数据库连接池配置
db.pool.config.connectionTimeout=30000 # 连接超时时间(毫秒)
db.pool.config.validationTimeout=10000 # 验证超时时间(毫秒)
db.pool.config.maximumPoolSize=20 # 最大活跃连接数
db.pool.config.minimumIdle=2 # 最小空闲连接数
# Nacos 配置推送重试配置
nacos.config.push.maxRetryTime=50 # 配置推送最大重试次数
# Tomcat 配置
server.tomcat.mbeanregistry.enabled=true # Tomcat MBean 注册表是否启用
management.metrics.export.elastic.enabled=false # 是否导出Elasticsearch指标
management.metrics.export.influx.enabled=false # 是否导出InfluxDB指标
server.tomcat.accesslog.enabled=true # 是否启用访问日志
server.tomcat.accesslog.rotate=true # 是否启用访问日志轮转
server.tomcat.accesslog.file-date-format=.yyyy-MM-dd-HH # 访问日志文件日期格式
server.tomcat.accesslog.pattern=%h %l %u %t "%r" %s %b %D %{User-Agent}i %{Request-Source}i # 访问日志格式
server.tomcat.basedir=file:. # Tomcat 基础目录
# Nacos 安全配置
nacos.security.ignore.urls=/,/error,... # 无需安全验证的URL路径
nacos.core.auth.system.type=nacos # 认证系统类型
nacos.core.auth.enabled=true # 是否启用认证
nacos.core.auth.caching.enabled=true # 是否启用认证缓存
nacos.core.auth.enable.userAgentAuthWhite=false # 是否启用用户代理白名单认证
nacos.core.auth.server.identity.key= # 服务端身份密钥
nacos.core.auth.server.identity.value= # 服务端身份值
nacos.core.auth.plugin.nacos.token.cache.enable=false # 是否启用Nacos插件的Token缓存
nacos.core.auth.plugin.nacos.token.expire.seconds=18000 # Token过期时间(秒)
nacos.core.auth.plugin.nacos.token.secret.key= # Token密钥
# Istio MCP 服务器配置
nacos.istio.mcp.server.enabled=false # 是否启用Istio MCP服务器
启动
/data/nacos/bin 目录下
#停止
sh shutdown.sh
#启动nacos
sh startup.sh -m standalone
测试
IP:port/nacos/
http://10.255.101.102:8848/nacos
很奇怪为什么没有登陆界面吧????
2.2.2版本之前的Nacos默认控制台,无论服务端是否开启鉴权,都会存在一个登录页;这导致很多用户被误导认为Nacos默认是存在鉴权的。在社区安全工程师的建议下,Nacos自2.2.2版本开始,在未开启鉴权时,默认控制台将不需要登录即可访问,同时在控制台中给予提示,提醒用户当前集群未开启鉴权。
鉴权官方文档