上篇文写到了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搭建完成!
一个人能否快乐,以及快乐的程度,是由自己对满足感的需求大小决定的。如果想变得快乐,就要提高自己的满足感,凡事都要往好的方面想,知足才能常乐。