1. 初识Nacos
1.1. 什么是Nacos?
Nacos 支持基于 DNS 和基于 RPC 的服务发现(可以作为springcloud的注册中心)、动态配置服务(可以做配置中心)、动态 DNS 服务。
1.2. Nacos入门必知
官网:https://nacos.io/zh-cn/index.html
Nocas文档:https://nacos.io/zh-cn/docs/what-is-nacos.html
Nocas下载:https://github.com/alibaba/nacos/releases
1.3. Nacos原理
Nacos注册中心分为server与client,server采用Java编写,为client提供注册发现服务与配置服务。而client可以用多语言实现,client与微服务嵌套在一起,nacos提供sdk和openApi,如果没有sdk也可以根据openApi手动写服务注册与发现和配置拉取的逻辑
1.3.1. 注册中心原理
服务注册方法:以Java nacos client v1.0.1 为例子,服务注册的策略的是每5秒向nacos server发送一次心跳,心跳带上了服务名,服务ip,服务端口等信息。同时 nacos server也会向client 主动发起健康检查,支持tcp/http检查。如果15秒内无心跳且健康检查失败则认为实例不健康,如果30秒内健康检查失败则剔除实例。
1.3.2. 配置中心原理
2. 安装Nacos
2.1. 预备环境准备
Nacos 依赖 Java 环境来运行。如果您是从代码开始构建并运行Nacos,还需要为此配置 Maven环境,请确保是在以下版本环境中安装使用:
- 64 bit OS,支持 Linux/Unix/Mac/Windows,推荐选用 Linux/Unix/Mac。
- 64 bit JDK 1.8+, 安装java请参考文档:Linux下卸载、安装及配置JDK
2.2. 下载Nocas
在github平台上下载自己所需版本的Nocas,在Nacos的GitHub页面,提供有下载链接,可以下载编译好的Nacos服务端或者源代码:
GitHub主页:https://github.com/alibaba/nacos
GitHub的Release下载页:https://github.com/alibaba/nacos/releases
基于gitee下载, https://gitee.com/gui-js/nacos/releases
2.3. 下载后,解压即可
Linux环境下使用下面命令解压(根据实际文件名解压)
tar -zxvf nacos-server-2.1.0.tar.gz
2.4. Linux下启动&后台启动
-
nocas单机模式启动服务
切换到bin目录,执行命令:sh startup.sh -m standalone
-
nocas单机模式后台运行
切换到bin目录,执行命令:sh startup.sh -m standalone &
2.5. 启动成功
当执行startup命令成功后,则本地通过 localhost:8848/nacos 进行访问。账户密码默认:nacos/nacos。
3. nacos数据库配置
3.1. 创建数据库并导入初始化数据
-
在mysql服务器上创建 nacos_config 数据库
CREATE DATABASE nacos_config DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
-
利用source导入
conf/nacos-mysql.sql
文件use nacos_config; source /opt/nacos/conf/nacos-mysql.sql
-
授权一个用户可以访问
nacos_config
数据库grant all privileges on nacos_config.* to 'lcc'@'%' identified by "Hz571xy00yz"; flush privileges;
3.2. 配置nacos使用mysql数据库
找到 conf/application.properties
配置文件,注意下面这些行
将其修改为:
#*************** Config Module Related Configurations ***************#
### If use MySQL as datasource:
spring.datasource.platform=mysql
### Count of DB:
db.num=1
### Connect URL of DB: 根据自己实际情况配置(注意数据库名称)
db.url.0=jdbc:mysql://127.0.0.1:6006/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=lcc
db.password.0=Hz571xy00yz
### If turn on the access log:
server.tomcat.accesslog.enabled=false
Nacos就是个springboot项目,所以这里配置是相通的。
在 bin/logs
目录下会生成 access_log
日志,该日志产生的量也很大,建议将其关闭,即将配置文件中 server.tomcat.accesslog.enabled
设置为 false
即可,重启nacos。
3.3. 关闭并重新启动nacos
切换到bin目录,执行命令:
# 关闭nacos
sh shutdown.sh
# 启动nacos
sh startup.sh -m standalone &
启动的日志,可以查看logs/start.out
文件。
3.4. 常见问题
-
Nacos Server did not start because dumpservice bean construction failure : No DataSource set
保证数据库连接正确,查看数据库IP地址与端口、数据库名、访问用户名密码;可加长连接超时时间、设置时区。 -
server error: such as timeout. Request nacos server failed
如果是云服务器需要开启 8848、 9848 、9849 端口否则报错 server error: such as timeout. Request nacos server failed:
端口说明:https://nacos.io/zh-cn/docs/2.0.0-compatibility.html
Nacos2.0 (8848、 9848 、9849 )版本相比 1.X (8848)新增了gRPC的通信方式,因此需要增加2个端口。新增端口是在配置的主端口(server.port)基础上,进行一定偏移量自动生成。
端口 | 与主端口的偏移量 | 描述 |
---|---|---|
8848 | nacos 主端口号 | |
9848 | 1000 | 客户端 gRPC 请求服务端端口,用于客户端向服务端发起连接和请求 |
9849 | 1001 | 服务端 gRPC 请求服务端端口,用于服务间同步等 |
4. Nacos使用方法
4.1. 创建命名空间
不同的命名空间逻辑上是隔离的,不特殊设置的情况下,服务不会跨命名空间请求,命名空间主要的作用是区分服务使用的范围,比如开发、测试、生产、灰度可以分别设置四个命名空间来互相隔离。
一个nacos注册中心的命名空间名具有唯一性,即命名空间名不可以重复。新建命名空间时候,如果不填写命名空间id,则系统会自动生成命名空间id,生成规则为UUID方式。
4.2. 命名空间在工程中如何使用
未完待续...