docker-compose的Nacos集群(多机多节点)环境搭建与使用

发布于:2024-10-12 ⋅ 阅读:(15) ⋅ 点赞:(0)

上篇文写到了docker-compose的Nacos集群(单机多节点)环境搭建与使用 就有小伙伴私聊我:求多机器搭建的教程~
谁让我如此宠粉呢,这不 它来了。老规矩 此方案已经过生产环境验证,可放心大胆使用~
安装docker 与配置 docker-compose 步骤略过~

1,每台节点机器创建docker-compose.yml文件

关注其中配置:NACOS_SERVER_IP、NACOS_SERVERS 集群中所有的 Nacos 节点地址,使用内网 IP 和端口需要在不同的服务器上进行修改为自己的内网ip地址,其他的读取数据库的配置就不多说了,毕竟集群配置不适合小白阅读~

# Docker Compose 文件版本
version: '3'  

services:
  # Nacos 实例的配置
  nacos1:
    # 使用 Nacos 官方镜像版本 2.2.3
    image: nacos/nacos-server:v2.2.3
    # 容器名称为 nacos1,方便识别和管理
    container_name: nacos1
    # 使用宿主机的网络模式,容器直接共享宿主机的网络
    network_mode: host
        
    # 定义容器的环境变量
    environment:
      # 集群模式,Nacos 运行在集群模式下
      - MODE=cluster
      # 使用主机名进行节点间通信,推荐在集群中使用
      - PREFER_HOST_MODE=hostname
      # 集群中所有的 Nacos 节点地址,使用内网 IP 和端口
      - NACOS_SERVERS=192.168.3.49:8848 192.168.3.150:8848 192.168.3.77:8848
      # 当前 Nacos 实例的 IP 地址,用于注册服务时的标识
      - NACOS_SERVER_IP=192.168.3.49
      # 数据源类型为 MySQL,Nacos 配置需要从 MySQL 数据库中读取和存储数据
      - SPRING_DATASOURCE_PLATFORM=mysql
      # MySQL 数据库的主机 IP
      - MYSQL_SERVICE_HOST=192.168.3.150
      # MySQL 数据库的名称
      - MYSQL_SERVICE_DB_NAME=zeusight-zhjf-nacos
      # MySQL 数据库的端口
      - MYSQL_SERVICE_PORT=3306
      # MySQL 数据库连接的用户名
      - MYSQL_SERVICE_USER=root
      # MySQL 数据库连接的密码
      - MYSQL_SERVICE_PASSWORD=123456
      # MySQL 连接参数,配置字符集、连接超时等
      - MYSQL_SERVICE_DB_PARAM=utf8&connectTimeout=10000&socketTimeout=30000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
      # JVM 参数,调整 Nacos 容器运行时的内存分配
      - JAVA_OPTS=-Xms256m -Xmx256m -Xmn128m

    # 挂载目录,用于持久化配置文件、日志和数据
    volumes:
      # 挂载 Nacos 的应用配置文件,定义 Nacos 的基础配置
      - ./nacos/config/application.properties:/home/nacos/conf/application.properties
      # 挂载集群配置文件,定义各个节点的集群关系
      - ./nacos/config/cluster.conf:/home/nacos/conf/cluster.conf
      # 挂载日志目录,保存 Nacos 的日志
      - ./nacos/logs/nacos:/home/nacos/logs
      # 挂载数据目录,防止容器重启后数据丢失
      - ./nacos/data/nacos:/home/nacos/data
    
    # 宿主机端口和容器端口的映射,允许外部访问 Nacos
    ports:
      # 将 Nacos 容器的 8848 端口映射到宿主机的 8848 端口
      - "8848:8848"
      # 将 Nacos 容器的 8848 端口映射到宿主机的 7848 端口,用于备用访问
      - "7848:8848"
      # 将 Nacos 容器的 8848 端口映射到宿主机的 9848 端口
      - "9848:8848"
      # 将 Nacos 容器的 8848 端口映射到宿主机的 9849 端口
      - "9849:8848"

注意其配置中出现配置连接mysql,目的用于集群环境nacos数据初始化(此处需根据自己的版本号手动导入初始化sql,初始化sql官网下载地址:链接: 点击直达

2,每台节点创建宿主机文件用于挂载

mkdir -p ./nacos/logs/nacos1
mkdir -p ./nacos/logs/nacos2
mkdir -p ./nacos/logs/nacos3
mkdir -p ./nacos/data/nacos1
mkdir -p ./nacos/data/nacos2
mkdir -p ./nacos/data/nacos3
mkdir -p ./nacos/config

3,每台节点拷贝容器配置文件到宿主机(下方是拷贝的2.2.3版本 并完善了认证配置)

application.properties 内容

# spring
server.servlet.contextPath=${SERVER_SERVLET_CONTEXTPATH:/nacos}
server.contextPath=/nacos
server.port=${NACOS_APPLICATION_PORT:8848}
server.tomcat.accesslog.max-days=30
server.tomcat.accesslog.pattern=%h %l %u %t "%r" %s %b %D %{User-Agent}i %{Request-Source}i
server.tomcat.accesslog.enabled=${TOMCAT_ACCESSLOG_ENABLED:false}
server.error.include-message=ALWAYS
# default current work dir
server.tomcat.basedir=file:.
#*************** Config Module Related Configurations ***************#
### Deprecated configuration property, it is recommended to use `spring.sql.init.platform` replaced.
#spring.datasource.platform=${SPRING_DATASOURCE_PLATFORM:}
spring.sql.init.platform=${SPRING_DATASOURCE_PLATFORM:}
nacos.cmdb.dumpTaskInterval=3600
nacos.cmdb.eventTaskInterval=10
nacos.cmdb.labelTaskInterval=300
nacos.cmdb.loadDataAtStart=false
db.num=${MYSQL_DATABASE_NUM:1}
db.url.0=jdbc:mysql://${MYSQL_SERVICE_HOST}:${MYSQL_SERVICE_PORT:3306}/${MYSQL_SERVICE_DB_NAME}?${MYSQL_SERVICE_DB_PARAM:characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false}
db.user.0=${MYSQL_SERVICE_USER}
db.password.0=${MYSQL_SERVICE_PASSWORD}
### The auth system to use, currently only 'nacos' and 'ldap' is supported:
nacos.core.auth.system.type=${NACOS_AUTH_SYSTEM_TYPE:nacos}
### worked when nacos.core.auth.system.type=nacos
nacos.core.auth.enabled=true
### The token expiration in seconds:
nacos.core.auth.plugin.nacos.token.expire.seconds=${NACOS_AUTH_TOKEN_EXPIRE_SECONDS:18000}
### The default token:min 32 lenth
nacos.core.auth.plugin.nacos.token.secret.key=${NACOS_AUTH_TOKEN:xBMi93TaTWQFthdRHdki8CaeSx08Yjkmc3TfmGBM877AtNZGjhdjHdT1cBws74QF}
### Turn on/off caching of auth information. By turning on this switch, the update of auth information would have a 15 seconds delay.
nacos.core.auth.caching.enabled=${NACOS_AUTH_CACHE_ENABLE:false}
nacos.core.auth.enable.userAgentAuthWhite=${NACOS_AUTH_USER_AGENT_AUTH_WHITE_ENABLE:false}
nacos.core.auth.server.identity.key=${NACOS_AUTH_IDENTITY_KEY:nacos}
nacos.core.auth.server.identity.value=${NACOS_AUTH_IDENTITY_VALUE:nacos}
## spring security config
### turn off security
nacos.security.ignore.urls=${NACOS_SECURITY_IGNORE_URLS:/,/error,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/public/**,/v1/auth/**,/v1/console/health/**,/actuator/**,/v1/console/server/**}
# metrics for elastic search
management.metrics.export.elastic.enabled=false
management.metrics.export.influx.enabled=false
nacos.naming.distro.taskDispatchThreadCount=10
nacos.naming.distro.taskDispatchPeriod=200
nacos.naming.distro.batchSyncKeyCount=1000
nacos.naming.distro.initDataRatio=0.9
nacos.naming.distro.syncRetryDelay=5000
nacos.naming.data.warmup=true

以及cluster.conf配置内容(此处注意,重启会自动写入集群配置,如果出现节点数量对不上,则检查docker-compose.yml配置,不然spring boot会连接不上)

cat nacos/config/cluster.conf 
#2024-09-20T11:47:22.165
192.168.3.150:8848
192.168.3.49:8848
192.168.3.77:8848

启动成功截图
在这里插入图片描述

页面显示三个节点则为正常,若多出不同的节点,则异常(虽然nacos正常运行,但是无法使用config配置中心
在这里插入图片描述

访问nacos页面 并添加一个配置(link-nacos-dev.yml 仅用于测试配置中心是否连接生效,其内容只配置了端口号为9001
在这里插入图片描述

4,spring boot整合nacos集群

pom依赖

<!-- Spring Cloud Alibaba Nacos Config 配置中心-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    <version>2.2.1.RELEASE</version>
</dependency>

<!-- Spring Cloud Alibaba Nacos Discovery 注册中心-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    <version>2.2.1.RELEASE</version>
</dependency>

bootstrap.yml配置内容(注意此处如果使用application.yml就会一直连接出错,因为bootstrap.yml加载在application.yml之前,nacos内部默认使用bootstrap.yml进行读取配置内容)

spring:
  profiles:
    active: dev
  application:
    name: link-nacos  # 应用名称  cloud:
    nacos:
      # 注册中心
      config:
        server-addr: 192.168.3.49:8848,192.168.3.77:8848,192.168.3.150:8848
        username: nacos
        password: nacos
        file-extension: yml
        refresh-enabled: true    
      #配置中心  
      discovery:
        server-addr: 192.168.3.49:8848,192.168.3.77:8848,192.168.3.150:8848
        username: nacos
        password: nacos
        enabled: true

项目启动截图
在这里插入图片描述
至此,单机多节点nacos搭建完成!

一个人能否快乐,以及快乐的程度,是由自己对满足感的需求大小决定的。如果想变得快乐,就要提高自己的满足感,凡事都要往好的方面想,知足才能常乐。