在上面两篇文章中 Nacos 基础知识我们已经算是学习完了。

Nacos 支持三种部署模式

  • 单机模式 - 用于测试和单机使用。
  • 集群模式 - 用于生产环境,确保高可用。
  • 多集群模式 - 用于多数据中心场景。

今天我们就开始来搭建一下 Nacos 集群。话不多说,开始今天的学习。

什么是集群

集群是将应用复制成多个相同的应用,一起来工作,从而提高工作能力。即将多个应用程序分散在不同的服务器,每个服务器都独立运行相同的代码。可以分散服务器压力解决高并发的问题,同时也能预防单节点故障,即一台服务器故障不影响其他服务器正常运行。

集群部署架构

nacos官方文档集群结构示意图如下:

微服务系列:Spring Cloud Alibaba 之 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

微服务系列:Spring Cloud Alibaba 之 Nacos 集群搭建_java_02

2、修改复制出来的两份 Nacos 端口

/conf/application.properties文件中修改 server.port 为 18848 或 28848

server.port=18848 或 server.port=28848

3、修改 cluster.conf 文件

在三个 Nacos 目录下的 conf 目录下有 cluster.conf.example 文件,复制出来一份把扩展名 .example 都去掉。

微服务系列:Spring Cloud Alibaba 之 Nacos 集群搭建_集群_03

修改 cluster.conf 文件

微服务系列:Spring Cloud Alibaba 之 Nacos 集群搭建_spring cloud alibaba_04

这里的 ip 是我自己电脑的ip,我发现使用 127.0.0.1 有问题。

4、配置使用外部 MySQL 数据源

修改 conf/application.properties 文件

微服务系列:Spring Cloud Alibaba 之 Nacos 配置中心 一文中有详细说明。

你可能会问为什么要使用外部 MySQL 数据源,使用内嵌的数据库不可以吗?

这个还真的不可以,因为使用嵌入式数据库实现数据的存储,集群中的每一个 Nacos 服务都有一个自己单独的内嵌数据库,这样数据存储是存在一致性问题的。

为了解决这个问题,Nacos 采用了集中式存储的方式来支持集群化部署,目前只支持 MySQL 存储

我本次模拟集群环境的时候也发现了问题,本次单机部署的伪集群导致数据存储路径冲突,会启动失败,会一直显示 starting… 查看启动日志确实是报错了。这篇文章给出了详细的解释:集群模式内置数据源单机多实例部署问题解决

集群部署最好还是使用外部存储。

微服务系列:Spring Cloud Alibaba 之 Nacos 集群搭建_Nacos_05

5、启动 3 个 Nacos 服务

startup.cmd

微服务系列:Spring Cloud Alibaba 之 Nacos 集群搭建_集群_06

查看 3 个控制台集群管理下的节点列表

微服务系列:Spring Cloud Alibaba 之 Nacos 集群搭建_服务器_07

测试

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

微服务系列:Spring Cloud Alibaba 之 Nacos 集群搭建_spring cloud alibaba_08

没有问题!

此时我们手动关掉一个 Nacos 服务,模拟下其中一个服务宕机

微服务系列:Spring Cloud Alibaba 之 Nacos 集群搭建_Nacos_09

再次访问 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:都看到这里了,点个赞吧,彦祖!