一、Nacos 简介
Nacos是一个更易于帮助构建云原生应用的动态服务发现、配置和服务管理平台,提供注册中心、配置中心和动态DNS服务三大功能。是SpringCloudAlibaba架构中最重要的组件,能够无缝对接Springcloud、Spring、Dubbo等流行框架。
Nacos和Eureka功能对比
功能模块 | Nacos | Eureka | 功能说明 |
---|---|---|---|
注册中心 | √ | √ | 服务治理,服务中心化注册 |
配置中心 | √ | × | Eureka需要配合Springcloud config实现 |
配置动态刷新 | √ | × | Nacos通过netty保持tcp长链接进行推送,Eureka需要配合mq实现配置动态刷新 |
可用区az | √ | √ | 对服务集群划分不同区域,实现区域隔离,并提供灾难级自动切换 |
分组 | √ | × | Nacos根据不同的业务、环境进行分组管理(namespace,group) |
元数据 | √ | √ | 提供服务标签数据(环境、服务标识) |
权重 | √ | × | Nacos提供权重设置,调整承载流量压力 |
健康检查 | √ | √ | Nacos提供服务端或者客户端发起的健康监测,Eureka是有客户端发起心跳 |
负载均衡 | √ | √ | 均提供负载均衡策略,Eureka采用ribbon |
二、Nacos 能做什么?
①服务注册发现和服务健康监测
Nacos支持基于DNS和基于RPC的服务发现,服务端可以通过SDK或者Api进行服务注册,相应的服务消费者可以使用DNS或者Http查找的方式获取服务列表。Nacos同时提供对服务的实时健康检查,阻止想不健康的主机或服务发送请求,与Eureka类似Nacos也有友好的控制台界面。
②动态DNS服务
支持权重路由,更容易地实现中间层负载均衡、更灵活的路由策略、流量控制以及数据中心内网的简单DNS解析服务。
③动态配置服务
接触过SpringCloud应该对config有所了解,那么配置中心也就很好理解,Nacos支持动态的配置管理,将服务的配置信息分环境分类别外部管理,并且支持热更新。不过与Config不同Nacos的配置信息存储与数据库中,支持配置信息的监听和版本回滚。
④服务及元数据管理
Nacos 能让您从微服务平台建设的视角管理数据中心的所有服务及元数据,包括管理服务的描述、生命周期、服务的静态依赖分析、服务的健康状态、服务的流量管理、路由及安全策略、服务的 SLA (服务等级协议)以及最首要的 metrics 统计数据(默认不开启暴露需要修改配置)。可以搭建搭建prometheus采集Nacos metrics数据也可以搭建搭建grafana图形化展示metrics数据。
三、Nacos 安装
3.1 Nacos 环境依赖
Nacos 基于 java 开发的,运行依赖于64 bit JDK 1.8+环境。
前往官网下载JDK: Java Downloads | Oracle
3.2 Nacos 服务端安装
由于Nacos是开源的,可以从github下载源码编译后安装,也可以直接从github下载官方编译好的安装包进行安装,本文直接使用官方编译好的包进行安装,基于目前官方最新release2.0.3版本。请勿使用2.x以下的版本,之前爆出过漏洞。2.x版本相对于1.x版本,性能也提升了10倍。
下载地址:https://github.com/alibaba/nacos/releases
四、Nacos 单例部署
单实例部署不适合生产环境,单点故障是致命的。
Linux 单实例非集群模式启动/关闭命令:
sh startup.sh -m standalone
sh shutdown.sh
访问 nacos 管理页面,初始化用户名密码均为 nacos
访问地址:http://127.0.0.1:8848/nacos/index.html
五、Nacos集群部署
5.1 集群架构
高可用 Nginx 集群
Nacos 集群(至少三个实例)
高可用数据库集群(取代 Nacos 内嵌数据库
5.2 模拟部署
系统版本 | 机器IP | 部署应用 | 应用版本 |
---|---|---|---|
CentOS8.5 | 192.168.230.1 | Nginx | 1.18.0 |
CentOS8.5 | 192.168.230.129 | Nacos | 2.0.3 |
CentOS8.5 | 192.168.230.130 | Nacos | 2.0.3 |
CentOS8.5 | 192.168.230.131 | Nacos | 2.0.3 |
CentOS8.5 | 192.168.230.1 | MySQL | 5.7.32 |
[ps]使用vmware虚拟机模拟以上不同机器环境。
5.3 搭建步骤
1)初始化Nacos数据库
解压下载的安装包nacos-server-2.0.3.tar.gz至/usr/local目录如下图所示:
在MySQL实例创建nacos库并执行/nacos/conf下的nacos-mysql.sql脚本
修改Nacos配置文件,在application.properties中取消注释并修改数据库信息为实际的数据库信息后保存。其他nacos服务实例也需要做同样的修改。
为了达到高可用,通常会有多个MySQL数据库实例,nacos的配置文件也需要指定每一个MySQL实例的信息,例如:
2)集群配置
在/nacos/conf下找到cluster.conf.example文件,将其重命名为cluster.conf
修改cluster.conf文件,将其中的默认的ip信息删除,将nacos集群中每一台nacos实例的ip添加进去。集群中所有nacos实例都需要做以上集群配置,至此关于 nacos 的配置结束了,可以尝试以集群模式启动三个nacos实例了。
切换到/nacos/bin目录下,执行./startup.sh & tail -f /usr/local/nacos/logs/start.out
启动nacos,之后通过浏览器访问每个nacos实例的控制台,例如:http://192.168.230.131:8848/nacos
3)Nginx 配置
修改 Nginx 配置文件 nginx.conf如下:
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
#nacos集群负载均衡
upstream nacos-cluster {
server 192.168.230.129:8848;
server 192.168.230.130:8848;
server 192.168.230.131:8848;
}
server {
listen 80;
server_name 192.168.230.1;
location / {
#root html;
#index index.html index.htm;
proxy_pass http://nacos-cluster;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
4)访问控制台
在浏览器输入Nginx服务所在宿主机的ip即可访问:
http://192.168.230.1/nacos/#/login
默认用户名/密码:nacos/nacos
切换至【集群管理】-【节点列表】,可查看nacos集群节点信息: