1 为什么叫Nacos
英文全称Dynamic Naming and Configuration Service,Na为naming/nameServer即注册中心,co为configuration即注册中心,service是指该注册/配置中心都是以服务为核心。
2 是什么
一个更易于构建云原生应用的动态服务实现、配置管理和服务管理平台。
Nacos就是注册中心 + 配置中心的组合 等价于 Nacos = Eureka + Config + Bus
3 window安装Nacos
a. 先从官网下载Nacos
https://github.com/alibaba/nacos/releases
b. 解压安装包,直接运行bin目录下的startup.cmd
./startup.cmd 或 startup.cmd -m standalone
c. 命令运行成功后直接访问http://localhost:8848/nacos
默认账户密码都是nacos
d. 结果页面
4 使用Nacos
4.1) pom
a, 父POM必须引入SpringCloud Alibaba依赖
com.alibaba.cloud
spring-cloud-alibaba-dependencies
2.2.6.RELEASE
pom
import
b. 本模块POM 引入SpringCloud Alibaba Nacos依赖
com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery
4.2) 配置
server:
port: 9001
spring:
application:
name: nacos-payment-provider
cloud:
nacos:
discovery:
server-addr: localhost:8848 # 配置Nacos地址
management:
endpoints:
web:
exposure:
include: '*'
4.3 )主启动
@SpringBootApplication
@EnableDiscoveryClient
public class PaymentMain9001 {
public static void main(String[] args) {
SpringApplication.run(PaymentMain9001.class, args);
}
}
4.4 )业务类
@RestController
public class PaymentController {
@Value("${server.port}")
private String serverPort;
@GetMapping(value = "/payment/nacos/{id}")
public String getPayment(@PathVariable("id") Integer id) {
return "nacos registry, serverPort: " + serverPort + "t id" + id;
}
}
启动后可看到这个服务已 注册进nacos
5 Nacos 支持负载均衡
因为阿里的nacos整合得特别好,后面技术都会吸收前面技术的优点,天生一出来就自带负载均衡,何以见得?
nacos-discovery包天生集成了netflix-ribbon包,只要是ribbon的话,一支持负载均衡,二支持RestTemplate(RESTful风格的远程调用)
6 Nacos 支持AP和CP模式的切换
C是所有节点在同一时间看到的数据是一致的;而A的定义是所有请求都会收到响应(可用性)。
何时选择使用何种模式?
一般来说,如果不需要存储服务级别的信息且服务实例是通过nacos-client注册,并能够保持心跳上报,那么就可以选择AP模式。当前主流的服务如 Spring Cloud 和 Dubbo 服务,都适用于AP模式,AP模式是为了服务的可用性而减弱了一致性,因此AP模式下只支持注册临时实例。
如果需要在服务级别编辑或者存储配置信息,那么 CP 是必须的,K8s服务和DNS服务则适用于CP模式。
CP模式下则支持注册持久化实例,此时则是以 Raft 协议为集群运行模式,该模式下注册实例之前必须先注册服务,如果服务不存在,则会返回错误。
curl -X PUT ‘$NACOS_SERVER:8848/nacos/v1/ns/operator/switches?entry=serverMode&value=CP’
7 使用Nacos作为配置中心
7.1)pom
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-config
7.2)配置
配置bootstrap.yml和application.yml
Nacos同springcloud-config一样,在项目初始化时,要保证先从配置中心进行配置拉取,拉取配置之后,才能保证项目的正常启动。
springboot中配置文件的加载是存在优先级顺序的,bootstrap优先级高于application
a. 配置bootstrap.yml
# nacos配置
server:
port: 3377
spring:
application:
name: nacos-config-client
cloud:
nacos:
discovery:
server-addr: localhost:8848 #Nacos服务注册中心地址
config:
server-addr: localhost:8848 #Nacos作为配置中心地址
file-extension: yaml #指定yaml格式的配置
#Nacos中DataId要按照以下规则配置
#${spring.application.name}-${spring.profiles.active}-${spring.cloud.nacos.config.file-extension}
b. 配置application.yml
spring:
profiles:
active: dev # 表示开发环境
c 业务类
@RestController
@RefreshScope // 支持Nacos的动态刷新功能(此时我们修改了配置文件,客户端是可以立即更新的,因为Nacos支持Bus总线,会自动发送命令更新所有客户端)
public class ConfigClientController {
@Value("${config.info}")
private String configInfo;
@GetMapping("/config/info")
public String getConfigInfo() {
return configInfo;
}
}
8 Nacos集群和持久化配置
Nacos支持三种部署模式:
单机:用于测试和单机使用
集群:用于生产环境,保证高可用
多集群:用于多数据中心场景
官网说明:https://nacos.io/zh-cn/docs/cluster-mode-quick-start.html
集群部署架构图:
真实情况:
Nacos默认有自带嵌入式数据库,derby,但是如果做集群模式的话,就不能使用自己的数据库
不然每个节点一个数据库,那么数据就不统一了,需要使用外部的mysql
默认Nacos使用嵌入式数据库实现数据的存储。所以,如果启动多个默认配置下的Nacos节点,数据存储是存在一致性问题的。
为了解决这个问题,Nacos采用了集中式存储的方式来支持集群化部署,目前只支持MySQL的存储。
9 Nacos单机版持久化(切换mysql数据库)
1,nacos默认自带了一个sql文件,在nacos安装目录下
将它放到我们的mysql执行
2,修改Nacos安装目录下的安排application.properties,添加:
spring.datasource.platform=mysql db.num=1 db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&serverTimezone=UTC db.user=root db.password=root
3,此时可以重启nacos,那么就会改为使用我们自己的mysql
10 Linux上配置Nacos集群+Mysql数据库
官方架构图:
1,下载安装Nacos的Linux版安装包
2,进入安装目录,现在执行自带的sql文件
进入mysql,执行sql文件
3.修改配置文件,切换为我们的mysql
就是上面windos版要修改的几个属性
4,修改cluster.conf,指定哪几个节点是Nacos集群
这里使用3333,4444,5555作为三个Nacos节点监听的端口
注:IP不能写127.0.0.1,必须是Linux命令hostname -i能够识别的IP
5,我们这里就不配置在不同节点上了,就放在一个节点上
既然要在一个节点上启动不同Nacos实例,就要修改startup.sh,使其根据不同端口启动不同Nacos实例
6,配置Nginx
7,启动Nacos
./startup.sh -p 3333
./startup.sh -p 4444
./startup.sh -p 5555
8,启动nginx
9,将微服务注册到Nacos集群



