IT序号网

Nacos 知识点笔记知识解答

luoye 2021年06月11日 编程语言 139 0

0.1、Nacos 名称由来

Nacos 名字的由来: `Dynamic Naming and Configuration Service` 直译 `动态命名和配置服务`,取其中的na co 和 s。a 

0.2、Nacos 实现的功能:

一、Nacos服务注册与发现

1.1、Nacos服务端安装&启动

前往 https://github.com/alibaba/nacos/releases ,下载安装包并解压。

1.2、Nacos支持三种部署模式

  • 单机模式 - 用于测试和单机试用。
  • 集群模式 - 用于生产环境,确保高可用。
  • 多集群模式 - 用于多数据中心场景。

1.3、单机模式下运行Nacos

Linux/Unix/Mac启动Standalone means it is non-cluster Mode

启动命令:. * sh startup.sh -m standalone

Windows启动

根据您的操作系统,到 bin 目录执行cmd startup.cmd或者双击startup.cmd文件,即可启动Nacos。

启动后,访问 http://127.0.0.1:8848/nacos 即可看到登录界面。

输入账号密码:nacos/nacos ,即可登录Nacos

特别注意:

linux环境默认启动的是集群模式,所以如果启动单机模式,一定要添加参数-m standalone

1.4、集群模式下运行Nacos

集群模式下运行Nacos

IT虾米网

1)多集群模式

Nacos支持NameServer路由请求模式,通过它您可以设计一个有用的映射规则来控制请求转发到相应的集群,在映射规则中您可以按命名空间或租户等分片请求...

2)多网卡IP选择

当本地环境比较复杂的时候,Nacos服务在启动的时候需要选择运行时使用的IP或者网卡。Nacos从多网卡获取IP参考Spring Cloud设计,通过nacos.inetutils参数,可以指定Nacos使用的网卡和IP地址。目前支持的配置参数有:

ip-address参数可以直接设置nacos的ip

nacos.inetutils.ip-address=10.11.105.155

use-only-site-local-interfaces参数可以让nacos使用局域网ip,这个在nacos部署的机器有多网卡时很有用,可以让nacos选择局域网网卡

nacos.inetutils.use-only-site-local-interfaces=true

ignored-interfaces支持网卡数组,可以让nacos忽略多个网卡

nacos.inetutils.ignored-interfaces[0]=eth0

nacos.inetutils.ignored-interfaces[1]=eth1

preferred-networks参数可以让nacos优先选择匹配的ip,支持正则匹配和前缀匹配

nacos.inetutils.preferred-networks[0]=30.5.124.

nacos.inetutils.preferred-networks[0]=30.5.124.(25[0-5]|2[0-4]\\d|((1d{2})|([1-9]?\\d))),30.5.124.(2

1.5. 服务注册&发现和配置管理

服务注册

curl -X PUT '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/instances?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"

关闭服务器Linux/Unix/Mac

sh shutdown.sh

1.6、如何自定义Nacos默认的账号密码?

默认启动的Nacos,所使用的数据库是Derby。而Derby是一款内嵌式数据库,因此本文所搭建的Nacos显然是不适用生产的,生产环境中的数据库又改如何配置呢?

1)修改nacos\conf目录下面application.properties配置文件

### If user MySQL as datasource:

spring.datasource.platform=mysql

db.url.0=jdbc:mysql://localhost:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true

db.user=root

db.password=root

2)初始化数据库脚本

schema.sql、nacos-mysql.sql

2、使用Nacos实现服务注册与发现

IT虾米网

IT虾米网

IT虾米网

3、支持的几种服务消费方式

Nocas支持RestTemplate、WebClient、Feign等几种服务通信方式

4Nacos元数据

4.1、什么是元数据?

Nacos数据(如配置和服务)描述信息,如服务版本、权重、容灾策略、负载均衡策略、鉴权配置、各种自定义标签 (label),从作用范围来看,分为服务级别的元信息、集群的元信息及实例的元信息。

级别:服务级别、集群级别、实例级别

4.2、元数据的作用?

提供描述信息

让微服务调用更加灵活(例如:微服务版本控制)

v1 --->v1

4.3、如何配置元数据

方式一:通过Nacos控制台方式配置

方式二:通过配置文件方式配置,如下所示:

cloud:
nacos:
discovery:
# 指定nacos server的地址
server-addr: localhost:8848
# 指定namespace
# namespace: 56116141-d837-4d15-8842-94e153bb6cfb
# NJ
# 指定集群名称
cluster-name: BJ
metadata:
instance: c
haha: hehe
version: v1

4、深入思考

如果之前已经用过Spring Cloud,肯定会这样的感受:不论我用的是RestTempalte也好、还是用的WebClient也好,还是用的Feign也好,似乎跟我用不用Nacos没啥关系?我们在之前介绍Eureka和Consul的时候,也都是用同样的方法来实现服务调用的,不是吗?

确实是这样,对于Spring Cloud老手来说,就算我们更换了Nacos作为新的服务注册中心,其实对于我们应用层面的代码是没有影响的。那么为什么Spring Cloud可以带给我们这样的完美编码体验呢?实际上,这完全归功于Spring Cloud Common的封装,由于在服务注册与发现、客户端负载均衡等方面都做了很好的抽象,而上层应用方面依赖的都是这些抽象接口,而非针对某个具体中间件的实现。所以,在Spring Cloud中,我们可以很方便的去切换服务治理方面的中间件。

二、使用Nacos作为配置中心

1、简介

Nacos除了实现了服务的注册发现之外,还将配置中心功能整合在了一起。通过Nacos的配置管理功能,我们可以将整个架构体系内的所有配置都集中在Nacos中存储。这样做的好处,在以往的教程中介绍Spring Cloud Config时也有提到,主要有以下几点:

  • 分离的多环境配置,可以更灵活的管理权限,安全性更高。
  • 应用程序的打包更为纯粹,以实现一次打包,多处运行的特点。
  • 配置动态刷新(可以在读取配置的类上面添加注解@RefreshScope来实现动态刷新)
  • 配置回滚(可以再历史版本里面查看到配置文件修改的记录,可以选择对应的版本回滚)。

Nacos的配置管理,基础层面都通过DataId和Group来定位配置内容,除此之外还增加了很多其他的管理功能。

2,分布式配置中心实现原理

  1. 本地应用读取云端分布式配置中心文件(第一次读取时建立长连接)
  2. 本地应用读取到配置文件后,本地jvm和硬盘都会缓存一份。
  3. 本地应用于分布式配置中心服务器端一直保持长连接
  4. 当我们的配置文件发生变化(根据版本号|MID判断)。将变化结果通知本地应用及时刷新配置文件。

3、创建应用

IT虾米网

IT虾米网

IT虾米网

三、Nacos的集群部署

1、windows环境集群搭建

根据官方文档的介绍,Nacos的集群架构大致如下图所示(省略了集中化存储信息的MySQL)

1.1、对MySQL数据源的初始化和配置

在进行集群配置之前,先完成对MySQL数据源的初始化和配置。主要分以下两步:

第一步:初始化MySQL数据库,数据库初始化文件:nacos-mysql.sql,该文件可以在Nacos程序包下的conf目录下获得。

第二步:修改conf/application.properties文件,增加支持MySQL数据源配置,添加(目前只支持mysql)数据源的url、用户名和密码。配置样例如下:

### If user MySQL as datasource:
spring.datasource.platform=mysql
### Connect URL of DB:
db.url.0=jdbc:mysql://localhost:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=root

1.2、集群配置

在Nacos的conf目录下有一个cluster.conf.example,可以直接把example扩展名去掉来使用,也可以单独创建一个cluster.conf文件,然后打开将后续要部署的Nacos实例地址配置在这里。

本文以在本地不同端点启动3个Nacos服务端为例,可以如下配置:

127.0.0.1:8841、127.0.0.1:8842、127.0.0.1:8843

1.3、启动实例

在完成了上面的配置之后,我们就可以开始在各个节点上启动Nacos实例,以组建Nacos集群来使用了。由于本文中我们测试学习采用了本地启动多实例的情况,与真正生产部署会有一些差异,所以下面分两种情况说一下,如何启动各个Nacos实例。

1.4、本地测试

本文中,在集群配置的时候,我们设定了3个Nacos的实例都在本地,只是以不同的端口区分,所以我们在启动Nacos的时候,需要修改不同的端口号。

下面介绍一种方法来方便地启动Nacos的三个本地实例,我们可以将bin目录下的startup.sh脚本复制三份,分别用来启动三个不同端口的Nacos实例,为了可以方便区分不同实例的启动脚本,我们可以把端口号加入到脚本的命名中,比如:

startup-8841.sh、startup-8842.sh、startup-8843.sh(windows版本修改对应cmd文件)

然后,分别修改这三个脚本中的参数,具体如下图的红色部分(端口号根据上面脚本命名分配):

这里以windows命令方式为例:startup8841.cmd

set "JAVA_OPT=%JAVA_OPT% -Dserver.port=8841"

2、linux环境集群搭建

集群模式下运行Nacos

官方文档地址:https://nacos.io/zh-cn/docs/cluster-mode-quick-start.html

集群模式部署

这个快速开始手册是帮忙您快速在你的电脑上,下载安装并使用Nacos,部署生产使用的集群模式。

集群部署架构图

因此开源的时候推荐用户把所有服务列表放到一个vip下面,然后挂到一个域名下面

http://ip1:port/openAPI 直连ip模式,机器挂则需要修改ip才可以使用。

http://VIP:port/openAPI 挂载VIP模式,直连vip即可,下面挂server真实ip,可读性不好。

http://nacos.com:port/openAPI 域名 + VIP模式,可读性好,而且换ip方便,推荐模式

参考链接:IT虾米网


发布评论
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!

nacos一直频繁的打印日志 get changegroupkeys知识解答
你是第一个吃螃蟹的人
发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。