Nacos 1.3.2 的安装和部署 —— 集群 Docker 版

本文详细介绍Nacos集群的部署过程,包括集群架构设计、环境准备、前置条件及具体操作步骤。涉及Nginx代理实现高可用及MySQL配置要点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、集群部署架构图示

  在进行生产环境部署时,一般都需要采用集群的方式来提高服务器高可用性,Nacos 也不例外。在进行集群部署时,至少需要三个节点来部署 Nacos 集群。然后采用 VIP 的方式访问集群中的各个节点。

二、集群部署环境清单
  • 服务器规划

    服务器名称开放端口号备注
    node10080Nginx 代替 VIP
    node1018848安装 MySQL MIC Router
    node1028848安装 MySQL MIC Router
    node1038848安装 MySQL MIC Router
    node104、node105、node1063306、6446、6447、64460、64470MySQL 5.7.x MIC
  • 部署架构图

    1

三、集群部署前置基础
  1. node100 安装 Nginx 编译 --strem 模块并安装

  2. node101node102node103 分别安装 JAVA_HOME 环境变量并配置 Router 访问node104node105node106MySQL 5.7.x 数据库

    配置 JAVA 环境变量步骤省略

  3. node104node105node106 分别安装 MySQL 5.7.x MIC

    • 安装 MySQL 5.7.x MIC 步骤请自行查找官网资源

    • 查看 官方关于移除数据库主从镜像配置的声明

    • 大概内容是在 Nacos 1.1.4 版本之前(不包含),后续所有的镜像版本都会移除主从镜像的相关属性,具体移除和替换的属性如下:

      移除属性新属性
      MYSQL_MASTER_SERVICE_HOSTMYSQL_SERVICE_HOST
      MYSQL_MASTER_SERVICE_PORTMYSQL_SERVICE_PORT
      MYSQL_MASTER_SERVICE_DB_NAMEMYSQL_SERVICE_DB_NAME
      MYSQL_MASTER_SERVICE_USERMYSQL_SERVICE_USER
      MYSQL_MASTER_SERVICE_PASSWORDMYSQL_SERVICE_PASSWORD
      MYSQL_SLAVE_SERVICE_HOST
      MYSQL_SLAVE_SERVICE_PORT默认:3306
    • 获取 Nacos MySQL 初始化脚本(镜像中没有提供创建数据库初始化的脚本文件)

      • 方式一:

        官网下载脚本并导入到数据库(一般都是最新版本的兼容,如果使用较老的 Nacos 组件,建议采用第二种方案

      • 方式二:

        GitHub 下载 指定版本的 Windows zip 包,解压后在 conf 文件夹中拿到创建数据库的脚本文件 nacos-mysql.sql

      P.S
      MYSQL_DATABASE_NUM 默认数量从 2 更改为 1,强烈建议大家后续只配置一个 MySQL 5.7.x 数据源即可。

四、集群部署详细操作
  1. node101node102node103 分别下载指定版本的 Nacos 安装包

    进入官网下载所需版本的 Nacos 服务安装包(本示例以 1.3.2 为例)

  2. Nacos Docker 属性列表

    • Nacos 属性列表(基于 1.3.2 版本的示例

      属性名称描述选项
      MODE系统启动方式: 集群/单机cluster/standalone 默认:cluster
      NACOS_SERVERSnacos cluster addressp1:port1空格ip2:port2 空格ip3:port3
      PREFER_HOST_MODE支持IP还是域名模式hostname/ip 默认:ip
      NACOS_SERVER_PORTNacos 运行端口默认:8848
      NACOS_SERVER_IP多网卡模式下可以指定IP
      SPRING_DATASOURCE_PLATFORMstandalone support mysqlmysql / 空 默认:空
      MYSQL_SERVICE_HOSTmysql host
      MYSQL_SERVICE_PORTmysql database port默认:3306
      MYSQL_SERVICE_DB_NAMEmysql database name
      MYSQL_SERVICE_USERusername of database
      MYSQL_SERVICE_PASSWORDpassword of database
      MYSQL_DATABASE_NUMIt indicates the number of database默认:1
      JVM_XMS-Xms默认:2g
      JVM_XMX-Xmx默认:2g
      JVM_XMN-Xmn默认:1g
      JVM_MS-XX:MetaspaceSize默认:128m
      JVM_MMS-XX:MaxMetaspaceSize默认:320m
      NACOS_DEBUGenable remote debugy/n 默认:n
      TOMCAT_ACCESSLOG_ENABLEDserver.tomcat.accesslog.enabled默认:false
      NACOS_AUTH_SYSTEM_TYPE权限系统类型选择,目前只支持 nacos 类型默认:nacos
      NACOS_AUTH_ENABLE是否开启权限系统默认:false
      NACOS_AUTH_TOKEN_EXPIRE_SECONDStoken 失效时间默认:18000
      NACOS_AUTH_TOKENtoken默认:
      SecretKey01234567890123456789
      012345678901234567890
      1234567890123456789
      NACOS_AUTH_CACHE_ENABLE权限缓存开关,开启后权限缓存的更新默认有15秒的延迟默认:false
    • 官方参考文档

  3. node101node102node103 执行以下创建集群的 Docker 镜像脚本创建 Nacos 集群节点(三个节点都要执行)

    docker run -d -p 8848:8848 --restart=always --privileged=true \
    --network=host \
    --name nacos-cluster-mysql \
    -e MODE=cluster \
    -e NACOS_SERVERS="100.100.100.101:8848 100.100.100.102:8848 100.100.100.103:8848" \
    -e SPRING_DATASOURCE_PLATFORM=mysql \
    -e MYSQL_SERVICE_HOST=100.100.100.100 \
    -e MYSQL_SERVICE_PORT=3306 \
    -e MYSQL_SERVICE_DB_NAME=nacos \
    -e MYSQL_SERVICE_USER=root \
    -e MYSQL_SERVICE_PASSWORD=123456 \
    -e NACOS_AUTH_ENABLE=true \
    -e NACOS_AUTH_TOKEN_EXPIRE_SECONDS=3600 \
    -e JVM_XMS=256m \
    -e JVM_XMX=512m \
    nacos/nacos-server:1.3.2    
    
    命令解释  
    # 后台运行、映射端口、自动启动、用root权限
    docker run -d -p 8848:8848 --restart=always --privileged=true \
    # 启动名称
    --name nacos-standalone-mysql \
    # 启动模式
    -e MODE=standalone \
    # 数据库实例
    -e SPRING_DATASOURCE_PLATFORM=mysql \
    # 数据库连接信息
    -e MYSQL_SERVICE_HOST=172.17.0.3 \
    -e MYSQL_SERVICE_PORT=3306 \
    -e MYSQL_SERVICE_DB_NAME=nacos_config \
    -e MYSQL_SERVICE_USER=root \
    -e MYSQL_SERVICE_PASSWORD=123456 \
    # JVM调优
    -e JVM_XMS=256m \
    -e JVM_XMX=512m \
    # Session 超时设置 单位:秒
    -e NACOS_AUTH_TOKEN_EXPIRE_SECONDS=3600 \
    # 目录挂载
    -v /data/docker/nacos/conf:/home/nacos/conf \
    -v /data/docker/nacos/init.d:/home/nacos/init.d \
    -v /data/docker/nacos/logs:/home/nacos/logs \
    nacos/nacos-server:1.2.1        
    

    P.S

    !!!坑!!! 如果在测试过程中 MySQL 安装在容器中,此时连接 MySQLMYSQL_SERVICE_HOST 要使用 Docker 自动内网的 IP 地址,不然连接数据库失败。(虚拟机中安装 CentOS 后在 CentOS 中安装 Docker 容器的环境)

    查看 MySQL 在 Docker 容器中的 IP 
    
    docker inspect mysql或者容器ID
    
  4. 登录任意一个 Nacos 节点查看集群状态

    2

  5. 集群任期说明

    在没有 LEADER 产生之前,集群会进行多次的选举。每次的选举任期会加 1,直到通过任期最大的获取了主的权限后才停止选举任期自增。最后加入的节点已经没有了选举的机会,故直接作为 FOLLOWER 加入,其任期默认是 0。如果某一个或某几个节点都挂了,只要剩余节点不少于 1 + 1/N,那么集群仍然能够正常运行。挂掉的节点重新加入集群后,如果此时集群已经有了 LEADER,那么它的角色一般是 FOLLOWER,它的任期是 0( 就跟一个新节点一样)。当然,如果集群的剩余节点少于 1 + 1/N ,集群仍然是可以工作的,只是已经无法保证高可用了。任期低节点一般是没有资格参与选举的,LEADER 一般是在任期高的几个节点之中产生(至少会有2个节点)。

  6. node100 通过采用 Nginx 来代替 VIP 的功能

    其实操作到步骤 5 就已经完成了 Nacos 集群的部署。但是如果不统一暴露一个唯一地址给使用者,那么集群中的主节点挂掉了,应用就需要跟着切换主节点,完全没有达到高可用的效果。所以我们这里采用 Nginx 来替代 VIP 代理 Nacos 各个节点,完成高可用的配置。

    Nginx 配置文件信息如下

    upstream nacos {
        server 100.100.100.101:8848;
        server 100.100.100.102:8848;
        server 100.100.100.103:8848;
    }
    
    server {
        listen       80;
        server_name  localhost;
    
        location /nacos/ {
            proxy_pass http://nacos;
        }
    }
    
  7. 重启 Nginx 访问 Nginx 的映射即可访问到 Nacos 集群,为应用暴露也暴露 Nginx 的地址

    3

IssuesIssues 在主从选举的时候,会出现一个问题选举不到主的问题,目前社区讨论中。在下个版本应该会得到解决。请大家密切关注。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值