本文详细介绍了如何在SpringCloud环境中搭建Nacos集群。通过清晰的步骤和详尽的说明,帮助读者在SpringCloud中成功搭建Nacos集群。文章详细介绍了安装和配置的每个步骤,确保了高可用性和可伸缩性。通过清晰的说明和示例,读者能够轻松理解复杂的集群搭建过程,实现微服务体系的稳固运行。这篇文章是搭建Nacos集群的理想参考,为构建可靠的分布式系统提供了关键信息。
一、Nacos集群示意图
Nacos(Naming and Configuration Service)是一个用于服务发现、动态配置管理以及可视化服务管理的开源平台。Nacos支持构建弹性的、动态的、易于维护的微服务架构,并为大规模微服务体系的管理提供了完整的解决方案。在Nacos的集群视图中,Nacos可以通过横向扩展的方式构建多个节点,形成一个高可用的集群,以确保系统的稳定性和可靠性。
Nacos集群特点:
特点 | 特点详述 |
节点同步 | 集群中的各个节点能够相互同步数据,确保配置信息和服务实例的一致性。 |
负载均衡 | Nacos集群可以通过负载均衡机制,将服务请求合理分发到各个节点,提高系统的整体性能和吞吐量。 |
高可用性 | Nacos集群通过多节点的部署,实现高可用性,即使某个节点发生故障,集群仍能保持正常运行。 |
水平扩展 | 集群中的节点可以随着需求的增加而动态扩展,实现系统的横向扩展,以适应不断增长的服务规模。 |
故障转移 | 集群中的节点能够感知其他节点的状态,当某个节点发生故障时,其他节点可以接管其工作,确保系统的连续性。 |
通过Nacos的集群视图,可以更好地管理和维护微服务架构,提供了一个稳定、高效、可靠的服务治理平台。
二、Nacos集群搭建
1、安装Nacos
首先,我们需要从 Nacos 的官方网站下载发布版本。下载地址:Releases · alibaba/nacos · GitHub
选择合适的版本并下载,解压缩得到 Nacos 的安装包。
在解压后的 Nacos 目录中,找到 bin 文件夹。
用写字板编辑 startup.cmd,将 set MODE= “cluster” 修改为:
set MODE="standalone"
这将在启动 Nacos Server 时,默认使用 standalone 模式运行。
修改完成后,切换 cmd 到 bin 目录下启动 Nacos Server:
C:\Users\Damon.Liu>d:
D:\>cd D:\Tools\Nacos\bin
D:\Tools\Nacos\bin>startup.cmd -m standalone
这里提醒我需要配一个 java8以上 的 JAVA_HOME 环境变量。
简单配一下:
再次尝试启动 Nacos,这次成功了!
2、复制客户端
复制两份Nacos的客户端,用端口号命名做区分。
注意端口号需要最少间隔一位,原因是 Nacos 2.0 之后,启动 Nacos 时会占用 +1000/1001 两个端口,如果相邻,会导致启动了一个 Nacos 之后,启动不了相同端口的另一个 Nacos。
官方文档说明如下:
所以,我们命名为 Nacos_8844、Nacos_8846,间隔两位,同时和默认的 8848 端口的 Nacos 区分开来,方便我们辨认。
下面,对三个客户端分别进行修改。
3、创建Nacos数据库
MySQL 创建名为 Nacos 的数据库。
将 conf 文件夹下的 mysql-schema.sql 导入到这个库里。
4、修改每个客户端application.properties
① 修改端口号
首先,修改三个客户端为不同的端口号。
端口在 conf 目录下的 application.properties 下修改:
② 修改数据库连接信息
放开数据库的三处注释。
这里有个数据库连接数,我们就一个数据库所以填1;
下面的 jdbc 连接信息,改为我们数据库的账号密码,连接的就是我们刚刚创建的 Nacos 数据库。
5、修改每个客户端集群配置
再对每个客户端 conf 目录下的 cluster.conf.example 文件复制一份,改名为 cluster.conf。
修改复制出来的 cluster.conf 文件,把三个 nacos 服务端地址都添加到里面:
192.168.0.107:8844
192.168.0.107:8846
192.168.0.107:8848
启动三个nacos服务端,如果之前是单机模式运行的,修改过启动器的代码,则需要改回来。
比如我的 startup.cmd 里之前指定了默认启动方式,这里需要修改这一行为:
set MODE= "cluster"
6、逐一启动Nacos服务
修改之后,我们双击 Stratup.cmd 启动 Nacos:
启动成功之后,我们可以访问已经启动的 Nacos 控制台查看:localhost:8848/nacos
三、Nginx反向代理
1、下载安装Nginx
访问 Nginx官网(nginx.org/en/download.html) 下载最新的稳定版本。
2、修改Nginx默认端口
解压Nginx压缩包,修改默认端口。
Nginx的配置文件是conf目录下的nginx.conf,默认配置的nginx监听的端口为80,根据端口占用情况,我们可以修改位其他端口,这里我修改位40。
修改之前我们可以输入cmd指令,查询端口占用状态:
#查看80端口是否被占用的命令是:
netstat-ano | findstr 0.0.0.0:80 netstat-ano | findstr "80"
如果被占用了,我们可以修改 Nginx\conf\nginx.conf 文件里的监听端口号,来指定默认端口。
比如,我这里换为40端口。
但建议大家还是给 Nginx 80端口,默认端口最终我还是用的默认80端口。
3、启动Nginx
启动Nginx,验证服务是否成功开启。
双击根目录下的nginx.exe,双击后一个黑色的弹窗一闪而过就消失了,启动就完成了。
然后我们访问80端口,看到Nginx服务已经成功运行了。
4、Nginx对Nacos负载均衡的配置
我们这里要配置 Nginx\conf\nginx.conf 文件。
listen:监听的端口;
(监听端口需要避免占用,尤其是 win-server,需要关闭IIS在80端口的默认项目)
server_name:监听的域名(填写 localhost 即为公网IP);
location 里 proxy_pass:设置转发的目标地址;
默认端口我还是用的默认80端口。
upstream nacos-cluster {
server 127.0.0.1:8844;
server 127.0.0.1:8846;
server 127.0.0.1:8848;
}
server {
listen 80;
server_name localhost;
location /nacos {
proxy_pass http://nacos-cluster;
}
}
这里给出的例子的意思是:当收到 /naocs 请求时,自动转发请求到 Nacos 集群,通过负载均衡指定具体哪个端口的 Nacos 响应。
修改完配置后,我们要停止之前的 Nginx 服务,重启后配置才能刷新。
5、浏览器访问测试
访问 localhost/nacos,如果显示是 Nacos 的控制台页面,则说明配置成功。
四、Nacos控制台新建配置
1、Nacos控制台新建配置
我们访问 Nacos 的控制台页面,因为我们刚刚用 Nginx 转达到集群,所以 Nacos 控制台地址变为 localhost/nacos,我们点击新建配置。
配置起名为:test-service.yaml,类型选为 YAML 类型,配置内容我们写一个时间格式:
pattern:
dateformat: yyyy-MM-dd HH:mm:ss
2、查看配置是否存入数据库
我们打开我们刚刚创建的 Nacos 数据库,查看 config-info 表:
可以看到配置已经写入表内了。
至此,我们的Nacos集群搭建成功!
五、Nacos集群的应用场景
Nacos集群在微服务架构中具有广泛的应用场景,其中一些关键的应用场景包括:
场景 | 场景下功能描述 |
服务注册 服务发现 | Nacos集群作为注册中心,可以用于服务的注册与发现。微服务在启动时将自身注册到Nacos集群,其他微服务通过Nacos发现和调用这些服务。 |
动态配置管理 | Nacos提供了分布式配置管理功能,允许在运行时动态调整应用程序的配置。Nacos集群可以用于集中式管理配置信息,实现配置的动态更新和热加载。 |
健康检查 故障恢复 | Nacos集群通过定期的健康检查,能够检测服务的状态并及时发现故障节点。当某个微服务发生故障时,Nacos能够自动剔除不可用的节点,确保系统的高可用性。 |
动态路由 | 基于Nacos集群,可以实现动态路由策略,根据服务的状态和负载情况,动态调整请求的路由,实现流量的均衡和优化。 |
分布式锁 与协调 | Nacos提供了分布式锁和协调的功能,可以应用于分布式系统中的同步、协作和资源竞争场景,确保多个微服务之间的有序执行。 |
事件驱动架构 | Nacos支持事件监听机制,可以通过订阅Nacos集群中的事件,实现微服务架构中的事件驱动,提高系统的解耦性和可维护性。 |
综上所述,Nacos集群不仅仅是服务注册中心,还在微服务架构中发挥着关键的角色,支持多种场景下的服务治理和协调。
Damon, Chinese, Liu Guangzhi, Software development engineer, CSDN quality creator, Ali Cloud expert blogger, Microsoft Technology Associate, Good at C#, Java, PHP, Python, etc, Love sports, Workaholic, Communist.