什么是Nacos
以下部分解释摘自于Nacos官方文档:
下载解压后,直接运行startup即可,界面如下:
知识点汇总:
Nacos默认登录地址:http://127.0.0.1:8848/nacos/
Nacos手册地址:https://nacos.io/zh-cn/docs/deployment.html
Dataid名称:默认的情况
服务名称-版本.yml|properties
版本:dev/test/pre/prd等
切换数据源之前的配置都会丢掉,切换成mysql或者本地
@RefreshScope 刷新配置文件
默认加载propertity
nacos中默认嵌入小型数据库
nacos集群到同一个mysql
Nacos、Eureka的区别
相同点:都可以实现分布式服务注册中心
不同点:Nacos从1.0版本开始支持CP/AP混合模式集群,默认AP模式保证服务可用性,CP的形式底层集群使用raft协议(选举)保证数据的一致性。在网络分区产生抖动的情况下不可以继续注册服务。AP模式仅支持服务临时注册的,注册中心列表存在内存里,不是持久化的,在网络分区产生抖动的情况下仍然可以继续注册我们的服务列表。
什么情况下选择AP和CP呢?
必须要求读取的接口的地址保证强一致性的问题,可以采用CP模式。
如何切换模式?
‘192.168.3.100:8848/nacos/v1/ns/operator/switches?entry=serverMode&value=CP’
‘192.168.3.100:8849/nacos/v1/ns/operator/switches?entry=serverMode&value=CP’
‘192.168.3.100:8850/nacos/v1/ns/operator/switches?entry=serverMode&value=CP’
必须使用post
Eureka与Nacos有哪些区别
1、Eureka采用ap模式形式实现注册中心
2、Nacos默认采用Ap模式,在1.0版本之后采用ap+cp模式混合实现注册中心。
Nacos怎么做集群
通过Nginx做反向代理
默认单机模式
注册中心没有必要将数据持久化到数据库中,是持久化到本地的硬盘。
分布式配置中心,默认是将数据持久化到本地嵌入式的数据库,通常会数据源到同一个Mysql中。
Nacos在不同的版本下运行集群是不一样的:
1、在linux版本中运行的时候默认是集群模式,如果需要改为单机启动,需要修改配置
2、在Windows版本中运行的时候默认是单机模式()
3、使用命令startup.cmd -m cluster、startup.cmd -m standlone
配置集群时,nacos,conf目录下的cluster.conf文件中不能使用127.0.0.1,必须使用准确的ip地址,比如192.168.3.100
注册中心:
Eureka、nacos、consul、Zookeeper
1、分布式配置中心有哪些?
(1)spring cloud config的最大缺点是没有界面(常用),需要去github上配置
(2)Nacas属于轻量级配置中心(常用)
(3)携程阿波罗重量级(常用)
(4)disConfig
2、轻量级和重量级的区别?
(1)轻量级:部署、架构设计原理都比较简单,学习成本比较低(小项目)
(2)重量级:部署、架构设计、体量都是非常大,学习成本比较高(大项目)
3、分布式配置中心要有
视图层(门户网站)
服务器(接口)
Mysql服务器
本地应用,启动时去服务器中读取配置,缓存到jvm和本地硬盘中
使用长连接,一旦配置文件发生变化,通知本地应用,
4、怎么判断配置文件是否发生变化?
(1)版本号
(2)MD5
(3)时间戳
5、分布式配置中心实现原理
(1)本地应用读取我们云端分布式配置中心文件(第一次建立长连接)
(2)本地应用读取到配置文件之后,本地jvm和硬盘中都会缓存一份。
(3)本地应用与分布式配置中心服务器端一直保持长连接.
(4)当我们的配置文件发生变化(MD5|版本号)实现区分,将变化结果通知给我们的本地应用及时的刷新我们的配置文件。
6、注意事项
naocs-config不需要在本地配置,如果本地也配置的话,会抛nacos异常,因为它不知道要读本地的还是配置中心上的。
7、bootstrap和application的区别
(1)bootstrap是属于整个应用程序配置,最先被加载,属于整个应用程序的上下文,优先启动
(2)application是属于spring的上下文
8、nacos默认支持三种部署形式
(1)单机-用于测试和单机试用
(2)集群模式-用于生产环境,确保高可用
(3)多集群模式-用于多数据中心场景,跨网络集群比如上海和武汉(很少用)
9、nacos集群
1、使用nginx进行负载均衡
2、集群访问的是同一个Mysql,实现数据共享
SpringBoot2.2.0如何使用Nacos-config呢?
Maven配置:
org.springframework.boot
spring-boot-starter-parent
2.2.1.RELEASE
org.springframework.boot
spring-boot-starter-web
${spring-boot-version}
org.springframework.cloud
spring-cloud-starter-alibaba-nacos-discovery
0.9.0.RELEASE
org.springframework.cloud
spring-cloud-starter-alibaba-nacos-config
0.9.0.RELEASE
bootstrap.yml文件配置
spring:
application:
###服务的名称
name: infosys-nacos-client
cloud:
nacos:
discovery:
###nacos注册地址
server-addr: 192.168.234.135:8848
enabled: true
config:
###配置中心连接地址
server-addr: 192.168.234.135:8848
###分组
group: DEFAULT_GROUP
###类型
file-extension: Properties
# profiles:
# active: prd
代码调用直接在方法中加上注解即可@RefreshScope:
/**
* 文件名:NacosClient.java 版权:Company Technologies Co.,Ltd.Copyright YYYY-YYYY,All
* rights reserved 版权:Copyright (c) 2020, [email protected] All Rights
* Reserved. 描述:<描述> 修改人:Administrator 修改时间:2020年4月11日 修改内容:<修改内容>
*/
package com.infosys.china;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* <一句话功能简述> <功能详细描述>
*
* @author Jiayoubing
* @version [版本号,2020年4月11日]
* @see [相关类/方法]
* @since [产品/模块版本]
*/
@RestController
@SpringBootApplication
@RefreshScope
public class NacosClient
{
@Value("${infosys.name}")
private String userName;
@RequestMapping("/getConfig")
public String getConfig() {
return userName;
}
public static void main(String[] args) throws Exception
{
SpringApplication.run(NacosClient.class, args);
}
}
在Nacos中增加配置项如下:
测试效果,可以读取配置文件了!
修改nacos-server-1.2.1\nacos\conf目录下文件
application.properties:配置mysql数据库连接
#*************** Config Module Related Configurations ***************#
### If user MySQL as datasource:
# spring.datasource.platform=mysql
### Count of DB:
# db.num=1
### Connect URL of DB:
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://192.168.234.135:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=jiayoubing
cluster.conf:配置nacos集群
###ip和端口号
192.168.234.135:8848
192.168.234.135:8849
192.168.234.135:8850
配置完毕后登陆任意一台nacos可以看到集群信息
在数据库config_info表中,可以看到保存的配置信息。
只需要在bootstrap.yml配置如下,把cluster的信息加入即可!
spring:
application:
###服务的名称
name: infosys-nacos-client
cloud:
nacos:
discovery:
###nacos注册地址
server-addr: 192.168.234.135:8848,192.168.234.135:8849,192.168.234.135:8850
enabled: true
config:
###配置中心连接地址
server-addr: 192.168.234.135:8848,192.168.234.135:8849,192.168.234.135:8850
###分组
group: DEFAULT_GROUP
###类型
file-extension: Properties
# profiles:
# active: prd
客户端的使用和单机版一样,无非就是把Server-addr都加进去即可
http {
include mime.types;
default_type application/octet-stream;
upstream infosysnacosaddr {
server 192.168.234.135:8848;
server 192.168.234.135:8849;
server 192.168.234.135:8850;
}
server {
listen 80;
server_name infosys.nacos.com;
location / {
proxy_pass http://infosysnacosaddr/nacos/;
}
}
}
配置host中的域名映射关系
在C:\Windows\System32\drivers\etc\hosts添加一条数据
127.0.0.1 infosys.nacos.com
直接在浏览器访问infosys.nacos.com即可实现Nginx负载均衡