Nacos基础

介绍

技术 特性 适用场景 说明
Nacos - 服务发现和服务健康监测
- 动态配置服务
- 动态 DNS 服务
- 服务及其元数据管理
- 与Spring Cloud、Kubernetes、Dubbo等无缝的融合与支持
- 支持单机模式、集群模式、多集群模式部署
- 动态服务发现
- 服务配置
- 服务流量治理
- 官网
- Doc
- Github
- 下载

OpenAPI

参考 Open API 指南

示例:

1
2
3
4
5
6
7
8
9
10
11
# 服务注册
$ curl -X POST 'http://127.0.0.1:8848/nacos/v1/ns/instance?serviceName=nacos.naming.serviceName&ip=20.18.7.10&port=8080'

# 服务发现
$ curl -X GET 'http://127.0.0.1:8848/nacos/v1/ns/instance/list?serviceName=nacos.naming.serviceName'

# 发布配置
$ 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"

配置中心

持久化

持久化方式 说明
嵌入式数据库 默认
MySQL 集群

配置示例

配置项 配置值
Data ID com.wanglibing.demo2
Group DEFAULT_GROUP
配置格式 YAML
配置内容 name: wanglibing

多环境配置

多环境配置方式一

Data ID Group 配置格式
com.wanglibing.demo2-dev DEV_GROUP YAML
com.wanglibing.demo2-test TEST_GROUP YAML
com.wanglibing.demo2-pro PRO_GROUP YAML

多环境配置方式二

Data ID Group 配置格式
com.wanglibing.demo2.yml DEFAULT_GROUP YAML
com.wanglibing.demo2.yml DEFAULT_GROUP YAML
com.wanglibing.demo2.yml DEFAULT_GROUP YAML

规则对应

Nacos配置项 配置值 代码加载规则
Data ID com.wanglibing.demo2.yml spring.cloud.nacos.config.prefix
Group DEFAULT_GROUP spring.cloud.nacos.config.group
配置格式 YAML spring.cloud.nacos.config.file-extension

Spring Cloud 配置加载内容

1
2
3
4
5
6
spring.cloud.nacos.config.ext-config[0].data-id=actuator.properties
spring.cloud.nacos.config.ext-config[0].group=DEFAULT_GROUP
spring.cloud.nacos.config.ext-config[0].refresh=true
spring.cloud.nacos.config.ext-config[1].data-id=log.properties
spring.cloud.nacos.config.ext-config[1].group=DEFAULT_GROUP
spring.cloud.nacos.config.ext-config[1].refresh=true

Spring Cloud中共享配置

1
2
spring.cloud.nacos.config.shared-dataids=actuator.properties,log.properties
spring.cloud.nacos.config.refreshable-dataids=actuator.properties,log.properties

集成Sentinel

运维

先决条件

Linux/Mac安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 下载
$ cd /usr/local/
$ wget https://github.com/alibaba/nacos/releases/download/1.1.3/nacos-server-1.1.3.tar.gz

# 解压
$ tar zxvf nacos-server-1.1.3.tar.gz

# 单机模式启动
$ cd nacos/bin
$ sh startup.sh -m standalone

# 检查
$ cat /usr/local/nacos/logs/start.out
$ cat /usr/local/nacos/logs/nacos.log
$ lsof -i:8848

# 设置开机启动
$ vim /etc/profile.d/start-nacos.sh
##### 增加如下内容 #####
#!/bin/sh
#chkconfig: 35 20 80
#description: 启动nacos
sh /usr/local/nacos/bin/startup.sh -m standalone
##### 内容结束 #####
$ chmod +x /etc/profile.d/start-nacos.sh

Docker安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 安装Git
$ yum -y install git

# 安装pip
$ yum -y install epel-release
$ yum -y install python-pip
$ pip -V

# 安装docker-compose
$ pip install docker-compose
$ docker-compose version

# Clone 项目
$ cd /usr/local
$ git clone https://github.com/nacos-group/nacos-docker.git
$ cd nacos-docker

# 单机模式启动
$ docker-compose -f example/standalone-derby.yaml up -d

# 集群模式启动
$ docker-compose -f example/cluster-hostname.yaml up

控制台页面

说明
URL http://127.0.0.1:8848/nacos/
用户名 nacos
密码 nacos

管理

1
2
3
4
5
6
7
8
# 单机模式启动
$ sh startup.sh -m standalone

# 集群模式启动
$ sh startup.sh

# 停止
$ sh shutdown.sh

常见问题

Failed to start database '/usr/local/nacos/data/derby-data'

问题描述

1
2
3
4
5
6
7
8
9
10
11
Caused by: java.lang.RuntimeException: load schema.sql error.org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Failed to start database '/usr/local/nacos/data/derby-data' with class loader org.springframework.boot.loader.LaunchedURLClassLoader@7daf6ecc, see the next exception for details.)
at com.alibaba.nacos.config.server.service.LocalDataSourceServiceImpl.reload(LocalDataSourceServiceImpl.java:110)
at com.alibaba.nacos.config.server.service.LocalDataSourceServiceImpl.init(LocalDataSourceServiceImpl.java:94)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:363)
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:307)
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:136)
... 70 common frames omitted

解决办法

1
2
3
4
$ cd /usr/local/nacos
$ rm -rf data/derby-data

# 然后重新启动

参考

坚持原创技术分享,您的支持将鼓励我继续创作!
0%