Nacos(Dynamic Naming and Configuration Service)是阿里巴巴开源的一个动态服务发现、配置管理和服务管理平台。
Nacos特性- 支持配置中心管理(含图形化界面)
- 部署交付简单
- 包含注册中心,不用独自搭建配置和注册中心。
- 完美集成spring cloud和dubbo,拓展性好
Nacos作为注册中心分为server与client。 Server采用Java编写,为client提供注册发现服务与配置服务。而client可以用多语言实现,client与微服务嵌套在一起,nacos提供sdk和openApi,如果没有sdk也可以根据openApi手动写服务注册与发现和配置拉取的逻辑。
服务注册方法:服务注册的策略的是每5秒向nacos server发送一次心跳,心跳带上了服务名,服务ip,服务端口等信息。同时 nacos server也会向client 主动发起健康检查,支持tcp/http检查。如果15秒内无心跳且健康检查失败则认为实例不健康,如果30秒内健康检查失败则剔除实例。
1.2、配置中心原理
Nacos依赖Java环境来运行,需要保证JDK版本在1.8以上。
Nacos Server有两种运行模式:standalone模式和cluster模式。
2.1、下载nacos-serverwget https://github.com/alibaba/nacos/releases/download/2.0.3/nacos-server-2.0.3.tar.gz
2.2、解压nacos-server安装包到指定目录
tar -zxvf nacos-server-2.0.3.tar.gz -C /usr/local/
2.3、配置startup.sh和application.properties脚本
startup.sh 在解压后的bin目录
/usr/local/nacos/bin
application.properties 在解压后的conf目录
/usr/local/nacos/conf
修改startup.sh脚本JAVA_HOME的内容,替换成服务器中java安装目录的绝对路径,可通过以下命令寻找服务器中java的安装目录
whereis java
2.4、启动nacos-server ,并进行登录验证
./startup.sh -m standalone
查看日志
tail -n 50 -f /usr/local/nacos/logs/start.out
输入nacos访问地址:http://127.0.0.1:8848/nacos 默认用户名/密码:nacos/nacos
2.5、cluster 模式开发和测试,我们直接用standalone 模式没什么问题。但是生产环境,为了保证Nacos的高可用,我们就得使用cluster模式。 cluster 模式必须要用MySQL,MySQL数据导入和上面一致,然后修改配置文件:
conf/cluster.conf
填入要运行Nacos Server机器的IP
2.6、创建nacos-server数据库初始化脚本在nacos-server解压后的conf子目录下,本例子中的全路径是:
/usr/local/nacos/conf/nacos-mysql.sql
数据库自己先在mysql服务中提前创建好 我创建的数据库是nacos-server(自己根据实际情况命名) 然后在nacos-server数据库中执行初始化脚本nacos-mysql.sql
修改application.properties中有关数据库的内容。 首先,删除数据库中相关配置的注释,以打开mysql数据配置,然后将mysql数据库中的地址替换成nacos-server所在数据库的地址,用户名以及密码也要改成对应的。
spring.datasource.platform=mysql
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos-server?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=root
Nacos采用的一个Leader节点,多个Follower节点的集群架构,数据一致性算法采用的是Raft。
(1)添加依赖
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-config
(2)配置application.properties文件或者bootstrap.properties文件
#配置服务的名字
spring.application.name=provider-service
#nacos配置中心的地址
spring.cloud.nacos.config.server-addr=nacos.ailijie.top
#nacos配置的编码方式
spring.cloud.nacos.config.encode=utf-8
#配置组名子,需要在nacos的配置设置,不然找不到
spring.cloud.nacos.config.group=PROVIDER_GROUP
#配置后缀,properties不需要
spring.cloud.nacos.config.file-extension=yml
#加载nacos多个配置文件
spring.cloud.nacos.config.shared-dataids=provider-service.properties,test.properties
#刷新加载的其他环境
spring.cloud.nacos.config.refreshable-dataids=provider-service.properties,test.properties
bootstrap.properties是nacos远程配置文件,假如选择这个,则需登录nacos控制台添加配置文件。
(3)使用nacos配置中心,客户端会定时心跳拉取配置,环境变量会动态刷新,但是在bean中需要使用 @RefreshCode注解去刷新,不然不生效。数据库配置可以自定义数据源。加载其他配置文件的话,需要使用refres-dataids去刷新环境。
@RefreshScope
@RestController
public class TestController {
@Value("${name}")
private String name;
@RequestMapping(value = "/test", method = GET)
public String test(){
return name;
}
}
3.2、nacos实现注册中心
(1)添加依赖
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-discovery
(2)在启动类上添加 @EnableDiscoveryClient 注解
@SpringBootApplication
@EnableDiscoveryClient
public class TestDemoApplication {
public static void main(String[] args) {
SpringApplication.run(TestDemoApplication.class, args);
}
}
(3)配置application.properties文件
#配置服务名字
spring.application.name=xxx-service
#配置服务集群名字
spring.cloud.nacos.discovery.cluster-name=consumer-service
#配置注册中心地址
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848