Nacos 入门教程 - 配置管理高级篇
大纲
技术资源
Nacos Server 集群
部署模式
Nacos Server 支持三种部署模式:
- 单机模式 - 用于测试和单机试用
- 集群模式 - 用于生产环境,确保高可用
- 多集群模式 - 用于多数据中心场景
集群搭建
安装 Nacos Server
集群环境下,至少需要安装三台以上的 Nacos Server,一般情况下复制三份 Nacos Server 解压后的文件夹即可,分别命名为 nacos-1、nacos-2、nacos-3。
配置 IP 与 端口
- 若是单机搭建 Nacos Server 集群,则需要更改每台 Nacos Server 目录的
conf
目录下的application.properties
配置文件,通过server.port
参数让每台 Nacos Server 使用不同的端口,以此来避免端口冲突。 - 在生产环境中,若每台 Nacos Sever 都有独立的真实 IP 地址,或者单台 Nacos Server 拥有多块网卡时,则需要在每台 Nacos Server 目录的
conf
目录下的application.properties
配置文件里通过nacos.inetutils.ip-address
参数绑定真实的 IP 地址。
1 | server.port=8848 |
配置集群配置文件
在所有 Nacos Server 目录的 conf
目录下找到 cluster.conf.example
配置文件,将其重命名为 cluster.conf
,并将所有 Nacos Server 的 IP 地址以 ip:port
的格式写到配置文件里,配置示例如下:
特别注意:这里的 IP 不能写 127.0.0.1
,必须是 Linux 命令 hostname -i
能够识别的 IP
1 | 192.168.1.124:8848 # Nacos Server 1 |
配置 MySQL 数据源
Nacos Server 默认使用嵌入式数据库(Derby)实现数据的存储,若直接启动多个默认配置下的 Nacos Server 节点,数据存储会存在一致性的问题。为了解决这个问题,Nacos Server 采用了集中存储的方式来支持集群化部署,目前只支持 MySQL 的存储(5.6.5+)。由于前面的教程已经介绍过 Nacos Server 如何配置 MySQL 数据源,这里不再累述。值得一提的是,每台 Nacos Server 都需要单独配置 MySQL 数据源。
集群模式下启动
启动 Nacos Server 集群,需要分别在每台 Nacos Server 目录的 bin
目录下执行启动脚本
1 | $ sh nacos-1/bin/startup.sh |
若每台 Nacos Server 在启动时输出以下日志信息,说明 Nacos Server 是以集群模式启动了
1 | nacos is starting with cluster |
集群模式下关闭
若希望关闭 Nacos Server 集群,同样分别在每台 Nacos Server 目录的 bin
目录下执行关闭脚本即可
1 | $ sh nacos-1/bin/shutdown.sh |
Spring Cloud 配置集群
Spring Cloud 配置 Nacos 集群的示例如下:
1 | spring: |
集群启动的失败解决方案
若机器不能同时启动三个 Nacos Server 实例,建议检查是否内存不够,此时可以在每台 Nacos Server 目录的 bin
目录下的 startup.sh
启动脚本里适当调整 JVM 的内存参数
1 | $ vim startup.sh |
集群部署架构(高可用)
多种部署模式
http://ip1:port/openAPI
:直连 IP 模式,机器宕机则需要修改 IP 才可以使用http://VIP:port/openAPI
:挂载 VIP 模式,直连 VIP 即可,下面挂载 Server 真实 IP,可读性不好http://nacos.com:port/openAPI
:域名 + VIP 模式,可读性好,而且换 IP 方便,当 Nacos 集群迁移时客户端也无需修改,推荐使用此模式,部署架构图如下图所示:
Nginx 反向代理配置
在 Nacos Server 的集群启动完毕之后,根据上面的部署架构图所示,还需要提供一个统一的入口给 Spring Cloud 应用访问。简单地说,就是需要为上面启动的的三个 Nacos Server 节点做一个可以为它们实现负载均衡的访问点。这个实现的方式非常多,可以考虑使用 Nginx 来实现,配置示例如下。特别注意,考虑到 Nginx 的高可用性,建议使用 Nginx + Keepalive 来搭建 Nginx 集群。
1 | upstream nacos { |
MySQL 数据库高可用
在 Nacos Server 集群模式下,当采用 MySQL 作为外置数据源时,为了确保数据库的高可用性,在生产环境下建议 MySQL 至少使用主备模式,或者采用高可用数据库。可通过修改 ${nacos-home}/conf/application.properties
配置文件,让 Nacos Server 拥有多个数据源,配置示例如下:
1 | spring.datasource.platform=mysql |
特别注意:若 MySQL 配置了主从库(主从同步),当主库宕机后,切换到从库,此时切到从库后会导致主库的数据比从库少,即会出现数据不一致的问题。
集群高可用部署架构图
多集群模式
Nacos Server 支持 NameServer 路由请求模式,通过它可以设计一个有用的映射规则来控制请求转发到相应的集群,在映射规则中可以按命名空间或租户等分片请求。
多网卡 IP 选择
当本地环境比较复杂的时候,Nacos 服务在启动的时候需要选择运行时使用的 IP 或者网卡。Nacos Server 从多网卡获取 IP 参考了 Spring Cloud 设计,通过 nacos.inetutils
参数,可以指定 Nacos 使用的网卡和 IP 地址,目前支持的配置参数有:
ip-address
参数可以直接设置 Nacos 的 IP
1 | nacos.inetutils.ip-address=10.11.105.155 |
use-only-site-local-interfaces
参数可以让 Nacos 使用局域网 IP,这个在 Nacos 部署的机器有多网卡时很有用,可以让 Nacos 选择局域网网卡
1 | nacos.inetutils.use-only-site-local-interfaces=true |
ignored-interfaces
支持网卡数组,可以让 Nacos 忽略多个网卡
1 | - nacos.inetutils.ignored-interfaces[0]=eth0 |
preferred-networks
参数可以让 Nacos 优先选择匹配的 IP,支持正则匹配和前缀匹配
1 | nacos.inetutils.preferred-networks[0]=30.5.124. |