在上面两篇文章中 Nacos
基础知识我们已经算是学习完了。
Nacos
支持三种部署模式
- 单机模式 - 用于测试和单机使用。
- 集群模式 - 用于生产环境,确保高可用。
- 多集群模式 - 用于多数据中心场景。
今天我们就开始来搭建一下 Nacos
集群。话不多说,开始今天的学习。
什么是集群
集群是将应用复制成多个相同的应用,一起来工作,从而提高工作能力。即将多个应用程序分散在不同的服务器,每个服务器都独立运行相同的代码。可以分散服务器压力解决高并发的问题,同时也能预防单节点故障,即一台服务器故障不影响其他服务器正常运行。
集群部署架构
nacos官方文档集群结构示意图如下:
其中的服务器负载均衡 SLB,我们可以使用 Nginx
,本文只是为了学习,所以我们使用 ip 直连的方式
# Spring
spring:
application:
# 应用名称
name: cloud-nacos-provider
profiles:
# 环境配置
active: dev
cloud:
nacos:
discovery:
# 服务注册地址
server-addr: 192.168.0.109:8848,192.168.0.109:18848,192.168.0.109:28848
集群搭建
本文为了方便采用我自己电脑来启动不同端口的 Nacos
实例来模拟 Nacos
集群(PS:但其实还不如多机部署方便)。
1、首先复制两份 Nacos
2、修改复制出来的两份 Nacos
端口
在 /conf/application.properties
文件中修改 server.port
为 18848 或 28848
server.port=18848 或 server.port=28848
3、修改 cluster.conf
文件
在三个 Nacos
目录下的 conf 目录下有 cluster.conf.example 文件,复制出来一份把扩展名 .example 都去掉。
修改 cluster.conf
文件
这里的 ip 是我自己电脑的ip,我发现使用 127.0.0.1 有问题。
4、配置使用外部 MySQL
数据源
修改 conf/application.properties
文件
微服务系列:Spring Cloud Alibaba 之 Nacos 配置中心 一文中有详细说明。
你可能会问为什么要使用外部 MySQL
数据源,使用内嵌的数据库不可以吗?
这个还真的不可以,因为使用嵌入式数据库实现数据的存储,集群中的每一个 Nacos
服务都有一个自己单独的内嵌数据库,这样数据存储是存在一致性问题的。
为了解决这个问题,Nacos
采用了集中式存储的方式来支持集群化部署,目前只支持 MySQL 存储
。
我本次模拟集群环境的时候也发现了问题,本次单机部署的伪集群导致数据存储路径冲突,会启动失败,会一直显示 starting… 查看启动日志确实是报错了。这篇文章给出了详细的解释:集群模式内置数据源单机多实例部署问题解决
集群部署最好还是使用外部存储。
5、启动 3 个 Nacos
服务
startup.cmd
查看 3 个控制台集群管理下的节点列表
测试
1、直连 ip 模式
server:
port: 9201
# Spring
spring:
application:
# 应用名称
name: cloud-nacos-provider
profiles:
# 环境配置
active: dev
cloud:
nacos:
discovery:
# 服务注册地址
server-addr: 192.168.0.109:8848,192.168.0.109:18848,192.168.0.109:28848
config:
# 配置中心地址
server-addr: 192.168.0.109:8848,192.168.0.109:18848,192.168.0.109:28848
# 配置文件格式
file-extension: yml
# 共享配置
shared-configs:
- application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
还是使用之前文章的那个项目,启动后访问 http://localhost:9201/config/get
没有问题!
此时我们手动关掉一个 Nacos
服务,模拟下其中一个服务宕机
再次访问 http://localhost:9201/config/get
,没有问题!
2、Nginx 转发
启动一台服务器 192.168.10.100
,安装 Nginx,配置代理转发规则。
#gzip on;
upstream nacos {
server 192.168.0.109:8848;
server 192.168.0.109:18848;
server 192.168.0.109:28848;
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://nacos;
}
}
bootstrap.yml
spring:
application:
# 应用名称
name: cloud-nacos-provider
profiles:
# 环境配置
active: dev
cloud:
nacos:
discovery:
# 服务注册地址
server-addr: 192.168.10.100:80 # Nacos 服务器地址,集群版 Nginx 转发
config:
# 配置中心地址
server-addr: 192.168.10.100:80 # Nacos 服务器地址,集群版 Nginx 转发
# 配置文件格式
file-extension: yml
# 共享配置
shared-configs:
- application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
访问 http://192.168.10.100:80/nacos/index.html
进入 Nacos
控制台。
至此,本文结束。同时我们的 Nacos
系列也结束了,下一篇开始学习新的内容。
PS:都看到这里了,点个赞吧,彦祖!