Nacos是什么?
一下截取Nacos官网的介绍
服务(Service)是 Nacos 世界的一等公民。Nacos 支持几乎所有主流类型的“服务”的发现、配置和管理:
…
在微服务架构下,各个服务间通过各种RPC框架(如Dubbo)进行远程服务调用,而如果需要调用一个远程的服务提供的方法,总得需要知道它的ip,端口吧?而在集群模式下一个服务可能有几十上百个,如果需要程序员自己来实现这些的管理,那必然是很麻烦并且可能费尽心思实现的还是会有很多问题,而Nacos所做的就是给需要进行rpc(远程过程调用)的实例提供对应的ip和端口,并实现对这些服务实例的管理,如健康检测。
这便是Nacos作为服务管理中心的作用,除此之外,Nacos还有作为配置中心的作用,以下是Nacos官网对于其作为配置中心的介绍
动态配置服务可以让您以中心化、外部化和动态化的方式管理所有环境的应用配置和服务配置。
动态配置消除了配置变更时重新部署应用和服务的需要,让配置管理变得更加高效和敏捷。
配置中心化管理让实现无状态服务变得更简单,让服务按需弹性扩展变得更容易。
Nacos 提供了一个简洁易用的UI (控制台样例 Demo) 帮助您管理所有的服务和应用的配置。Nacos 还提供包括配置版本跟踪、金丝雀发布、一键回滚配置以及客户端配置更新状态跟踪在内的一系列开箱即用的配置管理特性,帮助您更安全地在生产环境中管理配置变更和降低配置变更带来的风险。
作为配置中心Nacos可以在项目在运行时热更新项目的配置。
Nacos部署单机版本
要部署单机版本的Nacos从git上下载对应版本的Nacos
https://github.com/alibaba/nacos/releases
这里选择下载2.2.23版本的nacos
下载好后,进行解压,这里解压到G:\micro-service\nacos-test目录下,解压后目录很明了
目录名 | 介绍 |
---|---|
bin | 用来控制Nacos启动停止的可执行文件 |
conf | Nacos启动的配置文件 |
target | Nacos是用java写的,里面保存Nacos打包后的jar包 |
了解了这些文件夹的作用后,就可以开始尝试部署了,首先,因为我们要部署单机版本的Nacos,所以要先在bin目录下的startup.cmd文件进行一些修改(Nacos默认是以集群模式部署)
=》
然后,在shell中尝试运行startup.cmd文件
出乎意料的一次性成功,现在用浏览器尝试打开localhost:8848/nacos
可以看到,根据它的提醒默认是没有开启鉴权的,查阅Nacos官网给出的文档
https://nacos.io/zh-cn/docs/v2/guide/user/auth.html
可以知道要开启鉴权需要配置nacos.core.auth.enabled为true
接下来,打开conf文件夹,这里面保存的是nacos启动的一些配置,在这里可以看到一个熟悉的文件:application.properties
在这里Ctrl+F可以找到我们想要的属性,可以看到他被配置为false
修改为true后,在运行startup.cmd,报错了
根据报错的提醒(Caused by: com.alibaba.nacos.api.exception.NacosException: Empty identity, Please set nacos.core.auth.server.identity.key
and nacos.core.auth.server.identity.value
, detail: https://nacos.io/zh-cn/docs/v2/guide/user/auth.html),去application.properties中进行寻找
发现这两个属性并没有被配置任何的值,所以此时去查阅官方手册
参数名 | 默认值 | 启止版本 | 说明 |
---|---|---|---|
nacos.core.auth.enabled | false | 1.2.0 ~ latest | 是否开启鉴权功能 |
nacos.core.auth.system.type | nacos | 1.2.0 ~ latest | 鉴权类型 |
nacos.core.auth.plugin.nacos.token.secret.key | SecretKey012345678901234567890123456789012345678901234567890123456789(2.2.0.1后无默认值) | 2.1.0 ~ latest | 默认鉴权插件用于生成用户登陆临时accessToken所使用的密钥,使用默认值有安全风险 |
nacos.core.auth.plugin.nacos.token.expire.seconds | 18000 | 2.1.0 ~ latest | 用户登陆临时accessToken的过期时间 |
nacos.core.auth.enable.userAgentAuthWhite | false | 1.4.1 ~ latest | 是否使用useragent白名单,主要用于适配老版本升级,置为true时有安全风险 |
nacos.core.auth.server.identity.key | serverIdentity(2.2.1后无默认值) | 1.4.1 ~ latest | 用于替换useragent白名单的身份识别key,使用默认值有安全风险 |
nacos.core.auth.server.identity.value | security(2.2.1后无默认值) | 1.4.1 ~ latest | 用于替换useragent白名单的身份识别value,使用默认值有安全风险 |
nacos.core.auth.default.token.secret.key | SecretKey012345678901234567890123456789012345678901234567890123456789 | 1.2.0 ~ 2.0.4 | 同nacos.core.auth.plugin.nacos.token.secret.key |
nacos.core.auth.default.token.expire.seconds | 18000 | 1.2.0 ~ 2.0.4 | 同nacos.core.auth.plugin.nacos.token.expire.seconds |
现在可以明白我们控制台需要我们配置的是用于替换useragent白名单的身份识别key,使用默认值有安全风险以及用于替换useragent白名单的身份识别value,使用默认值有安全风险
先使用默认值进行替换后,尝试运行,发现此时还是会报错,现在再去看看文档,发现还有一个属性在新版本中没有默认值(nacos.core.auth.plugin.nacos.token.secret.key),他是用于登录时生成Token的密钥,猜测是否是因为这个没有值导致
这里采用默认值,再次尝试运行startup.cmd,运行成功
此时要进入nacos的管理界面会发现已经需要我们输入用户名和密码了
默认用户名:nacos
默认密码:nacos
nacos默认用来保存服务等信息的数据库是用的Derby数据库。
这里引用其他博主的总结
Derby 数据库的优缺点
1 、 Derby 定位是小型数据库 , 特别是嵌入式 . 支持的数据库小于 50GB, 对于小型网站 , 事务不复杂的应用 , 使用它的还是很不错的 . 另外大型桌面应用也可以用它来保存配置和其他数据 , 可以做到与文件格式无关 ,
因为都是访问数据库 .
2 、功能: Derby 支持标准 SQL92, SQL1999, SQL2003, 支持临时表 , 索引 , 触发器 , 视图 , 存储过程 ,
外键 , 约束 , 并行 , 事务 , 加密与安全等 . 只要有 JDK(>=1.3), 就可以运行 Derby.
3 、安全性: Derby 的安全性也做得很到位 , 包括用户鉴权和加密解密 .
4 、性能: Derby 的性能也是不错的 . 在插入 100 万条记录时 , CPU 的占用率一直低于 40%, 平均每插一条
记录耗时小于 0.3 毫秒 . 这对于满足桌面应用程序是绰绰有余的 . 但是比 Oracle 、 MySql 等专业数据库性能要低
可以知道,这个数据库的性能比Mysql要低,并且该数据库是将数据存在内存中的,这意味着加入Nacos宕机,所有服务数据会消失(Derby是以jar包的形式内嵌在Nacos中),而nacos是支持使用mysql数据源的,我们可以尝试在application.properties中修改nacos的数据源配置,但首先,我们需要先导入nacos提供的mysql数据库sql文件(我下的2.2.3版本的Nacos中mysql的sql文件名叫mysql-schema.sql)
导入后:
然后在application.properties中修改数据源
![在这里插入图片描述](https://img-blog.csdnimg.cn/8b290d544f7148a7a711e055fedb2663.png
最后运行startup.cmd,运行成功
Nacos部署集群版本
新建一个G:\micro-service\nacos-cluster目录,用来存放多个nacos文件目录
刚刚的单机版本我们只修改了Nacos的数据源以及开启了鉴权,所以可以直接使用刚刚配置好的Nacos来做进一步的修改。
Nacos的集群至少需要有三个Nacos实例,所以我们在这个目录拷贝三份刚刚的Nacos,分别使用8849,8850,8851端口
首先我们要做的,便是将刚刚修改为单机模式启动的startup.cmd文件改回cluster(集群)模式
修改完这个,我们还需要修改每个实例的端口,分别修改为8849、8850、8851
配置完不同的端口,还需要让每一台Nacos知道:他的伙伴在哪里(其他nacos的ip和端口)
在conf目录下有一个cluster.conf.example文件,没错,他就是集群配置的样例文件,我们拷贝一份改名叫做cluster.conf文件
打开里面很干净,只记录了几个IP和端口
照葫芦画瓢,我们将刚刚创建的几个实例的端口和ip填进去
此时尝试启动,发现题型
“nacos is starting with cluster”
Error occurred during initialization of VM
Initial heap size set to a larger value than the maximum heap size
大概是给这个nacos分配的堆空间太大了
可能会等待一段时间,但是会成功的
重要!
在启动了第一个8849端口的nacos后,会发现无法启动第二个8850端口的nacos,原因如下:
也就是说如果第一个是8849端口那么第二个应该是8851(8849会占用)
https://blog.csdn.net/weixin_43933728/article/details/121927770
最后将三个端口改为8849 8851 8853后,成功部署集群
可以在这个git仓库中找到这个例子的成品
https://gitee.com/sususz/windows-nacos-cluster