Nacos 介绍

发布时间: 更新时间: 总字数:1512 阅读时间:4m 作者: IP属地: 分享 复制网址

Nacos(/nɑ:kəʊs/,Dynamic Naming and Configuration Service)由阿里云开源的一个更易于构建云原生应用的动态服务发现配置管理服务管理平台,使用Java开发。

介绍

功能:

  • 服务发现和服务健康检测
    • 服务(Service)是 Nacos 世界的一等公民
      • Kubernetes Service
      • gRPC & Dubbo RPC Service
      • Spring Cloud RESTful Service
    • Nacos 支持传输层 (PING 或 TCP)和应用层 (如 HTTP、MySQL、用户自定义)的健康检查
      • agent 上报模式
      • 服务端主动检测
  • 动态配置服务
  • 动态 DNS 服务
    • 支持权重路由,让您更容易地实现中间层负载均衡、更灵活的路由策略、流量控制以及数据中心内网的简单DNS解析服务
  • 服务及元数据管理
  • 服务注册中心 (Service Registry):服务实例在启动时注册到服务注册表,并在关闭时注销
  • 配置管理 (Configuration Management)
    • 在数据中心中,系统中所有配置的编辑、存储、分发、变更管理、历史版本管理、变更审计等所有与配置相关的活动统称为配置管理

其他:

  • Nacos 概念
  • Nacos 架构
  • 数据模型 Key 由三元组唯一确定 NameSpace -> Group -> Service / DataId
    • Namespace默认是空串,公共命名空间(public)
    • 分组默认是 DEFAULT_GROUP
  • Nacos支持三种部署模式
    • 单机模式 - 用于测试和单机试用
    • 集群模式 - 用于生产环境,确保高可用
    • 多集群模式 - 用于多数据中心场景
  • 两种启动模式:Nacos 支持将注册中心(Service Registry)与配置中心(Config Center) 在一个进程合并部署或者将2者分离部署的两种模式
  • https://nacos.io/zh-cn/docs/v2/guide/user/faq.html

部署

  • Nacos 1.X 是老版本,建议您使用2.X版本
  • Nacos 依赖 Java、Maven 环境来运行
  • 运行需要以至少 2C4g60g*1/3 的机器配置下运行
  • https://nacos.io/zh-cn/docs/v2/quickstart/quick-start.html
  • 集群部署说明
  • 数据源:Nacos默认提供Derby以及MySQL的实现
    • 使用内置数据源,Derby(Apache Derby是Apache软件基金会所研发的开放源码数据库管理系统;由于Derby是一个纯Java程序,因此只需要操作系统支持Java虚拟机,Derby便可执行),无需进行任何配置
    • 使用外置数据源,生产使用建议至少主备模式,或者采用高可用数据库
  • 配置文件
    • {nacos.home}/conf/application.properties

单机部署

https://github.com/alibaba/nacos/releases 下载安装包

unzip nacos-server-$version.zip 或者 tar -xvf nacos-server-$version.tar.gz
cd nacos/bin

# 启动
sh startup.sh -m standalone

# 停止
sh shutdown.sh
  • 控制台:http://127.0.0.1:8848/nacos/
  • 默认的账号密码:nacos/nacos
  • 修改默认用户名/密码方法,在 com.alibaba.nacos.console.utils.PasswordEncoderUtil.main 函数中,将 nacos 改成你要改成的密码,运行即可得到加密有算法

Docker

git clone https://github.com/nacos-group/nacos-docker.git
cd nacos-docker
  • 单机模式 Derby
export NACOS_VERSION=2.1.2
docker-compose -f example/standalone-derby.yaml up
  • 单机模式 MySQL 5.7
docker-compose -f example/standalone-mysql-5.7.yaml up

mysql 表结构参考

k8s 部署

API

调用示例

  • 服务注册
curl -X POST 'http://127.0.0.1:8848/nacos/v1/ns/instance?serviceName=nacos.naming.serviceName&ip=20.18.7.10&port=8080' | jq .
  • 服务发现
curl -X GET 'http://127.0.0.1:8848/nacos/v1/ns/instance/list?serviceName=nacos.naming.serviceName'  | jq .

# 没有服务注册时
{
  "name": "DEFAULT_GROUP@@nacos.naming.serviceName",
  "groupName": "DEFAULT_GROUP",
  "clusters": "",
  "cacheMillis": 10000,
  "hosts": [],
  "lastRefTime": 1582311111116,
  "checksum": "",
  "allIPs": false,
  "reachProtectionThreshold": false,
  "valid": true
}

# 服务注册后的结果
{
  "name": "DEFAULT_GROUP@@nacos.naming.serviceName",
  "groupName": "DEFAULT_GROUP",
  "clusters": "",
  "cacheMillis": 10000,
  "hosts": [
    {
      "instanceId": "20.18.7.10#8080#DEFAULT#DEFAULT_GROUP@@nacos.naming.serviceName",
      "ip": "20.18.7.10",
      "port": 8080,
      "weight": 1,
      "healthy": true,
      "enabled": true,
      "ephemeral": true,
      "clusterName": "DEFAULT",
      "serviceName": "DEFAULT_GROUP@@nacos.naming.serviceName",
      "metadata": {},
      "instanceHeartBeatInterval": 5000,
      "instanceIdGenerator": "simple",
      "instanceHeartBeatTimeOut": 15000,
      "ipDeleteTimeout": 30000
    }
  ],
  "lastRefTime": 1582311111116,
  "checksum": "",
  "allIPs": false,
  "reachProtectionThreshold": false,
  "valid": true
}
  • 发布配置
curl -X POST "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test&content=HelloWorld"
  • 获取配置
curl -X GET "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test"
HelloWorld

其他:通过 tenant 可以指定namespace ID

认证鉴权

通过配置 NACOS_AUTH_ENABLE=true 启动认证鉴权

  • Open-API鉴权
curl -X POST '127.0.0.1:8848/nacos/v1/auth/login' -d 'username=nacos&password=nacos'
{
  "accessToken": "eyJhbGciOiJIUzI1NiJ9.abc.xyz",
  "tokenTtl": 18000,
  "globalAdmin": true,
  "username": "nacos"
}
  • 调用其他接口时,在url后添加参数accessToken={accessToken},其中{accessToken}为登录时返回的token信息
curl -X GET '127.0.0.1:8848/nacos/v1/cs/configs?accessToken=eyJhbGciOiJIUzI1NiJ9.abc.xyz&dataId=nacos.example.1&group=nacos_group'

NacosSync

NacosSync 是一个支持多种注册中心的同步组件,目前已支持的同步类型:

  • Nacos数据同步到Nacos
  • Zookeeper数据同步到Nacos
  • Nacos数据同步到Zookeeper
  • Eureka数据同步到Nacos
  • Consul数据同步到Nacos

Nacos DNS

将Nacos上注册的服务导出为DNS域名,参考

扩展

阿里云商业软件实现:

  • 应用配置管理(Application Configuration Manangement,简称ACM),已下线
  • 微服务引擎MSE(Microservices Engine) Nacos
  • 企业级分布式应用服务EDAS(Enterprise Distributed Application Service)

参考

  1. https://nacos.io/zh-cn/docs/what-is-nacos.html
Home Archives Categories Tags Statistics
本文总阅读量 次 本站总访问量 次 本站总访客数