Nacos简介、安装部署和配置优先级

目录

一、什么是Nacos

二、Nacos安装部署

环境准备

安装方法

下载Nacos

初始化数据库

修改配置

设置MySQL数据源连接

开启认证鉴权

启动服务器

扫描二维码关注公众号,回复: 17219173 查看本文章

验证日志

验证登录

关闭服务器

配置systemctl管理服务

Nacos配置优先级

多个配置加载优先级

本地配置文件优先级

配置文件优先级修改


一、什么是Nacos

Nacos/nɑ:kəʊs/的全称为Dynamic Naming and Configuration Service,它是阿里开源的一个整合了动态服务发现、配置管理和服务管理的基础服务平台。服务(Service)是Nacos世界的一等公民,它提供了服务注册与发现、配置管理、动态 DNS服务、服务元数据及流量管理等功能,用于满足微服务架构和云原生应用的需求。

其关键特性如下:

  1. 服务注册与发现:Nacos 支持多种服务注册发现,包括基于DNS、基于RPC和基于K8s的服务发现。

  2. 动态配置服务:Nacos 提供了一个集中式的配置管理平台,UI简洁易用,支持动态配置,消除了配置变更时重新部署应用的需要,从而提高了应用的灵活性和可管理性。

  3. 动态 DNS 服务:Nacos 提供了轻量级的动态DNS服务,可以将服务名映射到实际的网络地址,实现服务的动态访问和负载均衡,支持权重路由,更容易实现灵活的路由策略和流量控制。

  4. 服务及元数据管理:Nacos提供了数据中心所有服务及元数据的管理功能,包括服务的描述、生命周期、静态依赖分析、健康状态、流量管理、路由及安全策略、服务SLA 以及metrics统计数据,并提供可视化界面展示。

  5. 服务健康检查:Nacos 内置了健康检查功能,支持传输层 (PING 或 TCP)和应用层 (如 HTTP、MySQL、用户自定义)的健康检查,可以对服务实例的健康状态进行监控和管理。

二、Nacos安装部署

Nacos支持单机(开发和测试环境)、集群(推荐生产环境)和多集群(推荐多数据中心场景)三种部署模式,本文以单机部署为例,详细介绍Nacos安装部署方法。

环境准备

安装方法

下载Nacos

Nacos Github Assets下载nacos-server-2.2.0.tar.gz安装包并解压

# 下载
wget https://github.com/alibaba/nacos/releases/download/2.2.0/nacos-server-2.2.0.tar.gz
# 解压
tar xvf nacos-server-2.2.0.tar.gz

初始化数据库

首先创建数据库nacos_config和用户nacos,授权所有权限给用户nacos。

# 创建数据库nacos_config
CREATE DATABASE nacos_config DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
# 授权
grant all privileges on nacos_config.* to 'nacos'@'%' identified by 'nacos' with grant option;
# 刷新权限
flush privileges;

数据库初始化sql文件位于./nacos/conf/mysql-schema.sql,执行如下命令导入表结构和数据。

# 导入sql文件,输入密码nacos
mysql -u nacos -p -D nacos_config < ./nacos/conf/mysql-schema.sql

修改配置

Nacos本质上是一个SpringBoot应用,全局配置位于./nacos/conf/application.properties。

设置MySQL数据源连接

务必先启用数据源MySQL,设置spring.datasource.platform=mysql,从2.2.1版本开始设置spring.sql.init.platform=mysql,否则不生效,默认将保存到内嵌的derby数据库。

db.num=1
db.url.0=jdbc:mysql://192.168.5.10:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=nacos
db.password.0=nacos

Nacos支持多种数据源配置

db.num表示数据源数目。

db.url.<index>表示第index+1个数据源Url配置,index默认从0开始。

db.user.<index>表示第index+1个Url的用户名。

db.password.<index>表示第index+1个Url的密码。

注意:如果db.user和db.password没有设置index,所有Url使用db.userdb.password认证,多个用户名和密码会根据逗号切割。如果数据库名称、用户名或密码错误,会报No DataSource set异常,请检查连接是否正确。 

开启认证鉴权

Nacos适合内网运行,不可暴露在公网环境,否则会带来安全风险,Nacos内置了默认鉴权插件,通过以下方式开启服务认证鉴权。

# 开启默认鉴权插件
nacos.core.auth.system.type=nacos
nacos.core.auth.enabled=true
# key和value可以自定义,本例中请求api时header需要携带serverIdentity=security
nacos.core.auth.server.identity.key=serverIdentity
nacos.core.auth.server.identity.value=security
# 2.1.0版本后还需要配置插件密钥
nacos.core.auth.plugin.nacos.token.secret.key=VGhpc0lzTXlDdXN0b21TZWNyZXRLZXkwMTIzNDU2Nzg=
启动服务器

standalone表示单机模式运行,非集群模式。

# 启动
bin/startup.sh -m standalone
验证日志

启动日志位于/opt/nacos/logs/start.out,出现Nacos started successfully表示启动成功。

2023-08-28 17:16:06,648 INFO Exposing 1 endpoint(s) beneath base path '/actuator'

2023-08-28 17:16:06,678 INFO Tomcat started on port(s): 8848 (http) with context path '/nacos'

2023-08-28 17:16:06,694 INFO Nacos started successfully in stand alone mode. use external storage
验证登录

浏览器打开登录界面:http://192.168.5.10:8848/nacos/index.html#/login,默认登录用户名/密码是nacos/nacos。

关闭服务器
bin/shutdown.sh
配置systemctl管理服务

创建Nacos服务的Unit配置文件/lib/systemd/system/nacos.service

可能异常:ERROR: Please set the JAVA_HOME variable in your environment, We need java(x64)! jdk8。

解决方法:通过设置Environment=JAVA_HOME=/path/to/jdk
加载JAVA_HOME环境变量。

[root@node1 nacos]# vim /lib/systemd/system/nacos.service
[Unit]
Description=nacos
After=network.target

[Service]
Environment=JAVA_HOME=/usr/java/jdk1.8.0_181-cloudera
Type=forking
ExecStart=/opt/nacos/bin/startup.sh -m standalone
ExecReload=/opt/nacos/bin/shutdown.sh
ExecStop=/opt/nacos/bin/shutdown.sh
PrivateTmp=true

[Install]
WantedBy=multi-user.target

加载Unit配置文件

systemctl daemon-reload

启动nacos.service

systemctl status nacos.service

设置开机启动

systemctl enable nacos.service

Nacos配置优先级

多个配置加载优先级

本地配置文件优先级

spring:
  application:
    name: nacos-config-multi
  main:
    allow-bean-definition-overriding: true
  cloud:
    nacos:
      username: ${nacos.username}
      password: ${nacos.password}
      config:
        server-addr: ${nacos.server-addr}
        namespace: ${nacos.namespace}
        # 用于共享的配置文件
        shared-configs:
          - data-id: common-1.yaml
            group: SPRING_CLOUD_EXAMPLE_GROUP
 
          - data-id: common-2.yaml
            group: SPRING_CLOUD_EXAMPLE_GROUP
 
          - data-id: common-3.yaml
            group: SPRING_CLOUD_EXAMPLE_GROUP
		......
 
        # 常规配置文件
        # 优先级大于 shared-configs,在 shared-configs 之后加载
        extension-configs:
          - data-id: nacos-config-1.yaml
            group: SPRING_CLOUD_EXAMPLE_GROUP
            refresh: true
 
          - data-id: nacos-config-2.yaml
            group: SPRING_CLOUD_EXAMPLE_GROUP
            refresh: true

          - data-id: nacos-config-3.yaml
            group: SPRING_CLOUD_EXAMPLE_GROUP
            refresh: true
  • 优先级:扩展配置(extension-configs) > 共享配置(shared-configs)
  • 同为扩展配置,下标越大优先级越高:extension-configs[3] > extension-configs[2] > extension-configs[1] > extension-configs[0]
  • 同为共享配置,下标越大优先级越高:shared-configs[3] > shared-configs[2] > shared-configs[1] > shared-configs[0]

配置文件优先级修改

spring:
  cloud:
    config:
      # 如果本地配置优先级高,那么 override-none 设置为 true,包括系统环境变量、本地配置文件等配置
      override-none: true
      # 如果想要远程配置优先级高,那么 allow-override 设置为 false,如果想要本地配置优先级高那么 allow-override 设置为 true
      allow-override: true
      # 只有系统环境变量或者系统属性才能覆盖远程配置文件的配置,本地配置文件中配置优先级低于远程配置;注意本地配置文件不是系统属性
      override-system-properties: false

猜你喜欢

转载自blog.csdn.net/BlogPan/article/details/132528345