news 2026/5/8 5:16:32

别再踩坑了!手把手教你用Docker Compose搞定Nacos三节点集群(附MySQL主从配置)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
别再踩坑了!手把手教你用Docker Compose搞定Nacos三节点集群(附MySQL主从配置)

从零构建高可用Nacos集群:Docker Compose实战避坑指南

第一次在测试环境搭建Nacos集群时,我天真地以为照着官方文档半小时就能搞定。结果两小时后,我还在和MySQL主从同步较劲,Nacos节点间死活认不出对方。这种经历让我意识到,生产级部署需要的不仅是步骤复制,更是对每个配置项背后原理的理解。本文将分享经过实战验证的三节点Nacos集群搭建方案,重点解决三个核心问题:为什么MySQL主从是Nacos集群的基础?为什么三个Nacos节点总有一个拒绝加入集群?如何用最简配置实现负载均衡?

1. 环境规划:避开IP与端口的隐形陷阱

很多教程直接跳进配置环节,却忽略了前期规划的重要性。我们团队曾因随意分配IP导致跨机房通信延迟高达200ms,最终引发集群脑裂。以下是经过优化的规划方案:

网络拓扑黄金法则

  • MySQL主从建议部署在同一可用区,延迟控制在5ms内
  • Nacos节点间延迟不超过30ms(实测超过50ms易导致心跳超时)
  • 负载均衡器与Nacos节点保持物理链路直连

示例配置(实际使用时替换IP段):

# MySQL层 mysql-master: 192.168.1.10 mysql-slave: 192.168.1.11 # Nacos层 nacos01: 192.168.1.20 nacos02: 192.168.1.21 nacos03: 192.168.1.22 # 负载均衡 nginx01: 192.168.1.30 nginx02: 192.168.1.31 VIP: 192.168.1.100

关键提示:所有节点必须配置NTP时间同步,时间差超过3秒会导致集群选举异常

2. MySQL主从配置:那些官方没说的细节

2.1 Master节点配置精要

创建mysql-master目录,放置这三个关键文件:

docker-compose.yml

version: "3.8" services: mysql: image: nacos/nacos-mysql:5.7 container_name: nacos-mysql-master env_file: .env volumes: - ./data:/var/lib/mysql - ./conf/my.cnf:/etc/mysql/my.cnf ports: - "3306:3306" healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "localhost"] interval: 5s timeout: 3s retries: 3

my.cnf核心参数

[mysqld] server-id = 1 log-bin = mysql-bin binlog_format = ROW expire_logs_days = 7 binlog_cache_size = 4M max_binlog_size = 1G sync_binlog = 1

常见踩坑点

  1. binlog_format必须为ROW(默认STATEMENT会导致数据不一致)
  2. 没有设置sync_binlog=1可能丢失事务
  3. 未配置server-id会导致主从复制直接失败

2.2 Slave节点特殊处理

Slave的my.cnf需要增加这些关键配置:

[mysqld] server-id = 2 relay_log = mysql-relay log_slave_updates = ON read_only = ON slave_parallel_workers = 4

启动后执行这些命令验证主从状态:

-- 在Master执行 SHOW MASTER STATUS\G -- 在Slave执行 SHOW SLAVE STATUS\G

重点关注:

  • Slave_IO_RunningSlave_SQL_Running必须为Yes
  • Seconds_Behind_Master应逐渐趋近于0

3. Nacos集群部署:突破官方模板限制

3.1 容器网络模式的选择困境

官方示例使用host网络模式,但这在生产环境存在安全隐患。我们推荐采用自定义bridge网络

# 在所有节点创建共享网络 docker network create nacos-cluster-net --subnet=172.20.0.0/16 # docker-compose.yml片段 networks: nacos-net: external: true name: nacos-cluster-net

3.2 关键环境变量解析

三个节点共用.env文件,这些参数最容易出错:

# 数据库配置 SPRING_DATASOURCE_PLATFORM=mysql MYSQL_SERVICE_HOST=192.168.1.10 # 指向Master MYSQL_SERVICE_DB_NAME=nacos MYSQL_SERVICE_USER=nacos MYSQL_SERVICE_PASSWORD=YourStrongPassword # 集群配置 PREFER_HOST_MODE=ip # 比hostname更可靠 NACOS_SERVERS=192.168.1.20:8848,192.168.1.21:8848,192.168.1.22:8848 NACOS_APPLICATION_PORT=8848

3.3 自定义属性文件

每个节点需要custom.properties

# 数据存储 nacos.naming.distro.taskDispatchPeriod=200 nacos.naming.distro.batchSyncKeyCount=1000 # 健康检查 nacos.naming.health.check.enabled=true nacos.naming.health.check.interval=10s # 日志 nacos.logging.file.max-history=30 nacos.logging.file.max-size=1GB

4. 负载均衡实战:超越基础配置

4.1 Nginx高级配置模板

upstream nacos-cluster { zone nacos 64k; server 192.168.1.20:8848 weight=3; server 192.168.1.21:8848 weight=2; server 192.168.1.22:8848 weight=1; keepalive 32; } server { listen 8848; server_name nacos-lb.example.com; location / { proxy_pass http://nacos-cluster; proxy_http_version 1.1; proxy_set_header Connection ""; proxy_connect_timeout 3s; proxy_read_timeout 10s; # 长连接优化 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } # 健康检查接口 location /nacos/health { access_log off; proxy_pass http://nacos-cluster/nacos/health; } }

4.2 Keepalived高可用方案

主备节点配置差异:

参数主节点备节点
stateMASTERBACKUP
priority10090
virtual_router_id5151
auth_passnacos_keepalivednacos_keepalived

检查脚本check_nacos.sh

#!/bin/bash if ! nc -z 127.0.0.1 8848; then systemctl stop keepalived fi

5. 验证与排错实战手册

5.1 集群健康检查

# 检查节点状态 curl -X GET "http://192.168.1.100:8848/nacos/v1/ns/operator/raft/peer?pretty" # 预期输出应包含所有节点 { "peers": [ { "ip": "192.168.1.20", "state": "LEADER" }, { "ip": "192.168.1.21", "state": "FOLLOWER" }, { "ip": "192.168.1.22", "state": "FOLLOWER" } ] }

5.2 常见故障处理

问题1:节点无法加入集群

  • 检查NACOS_SERVERS是否包含所有节点IP
  • 验证8848端口连通性:telnet <ip> 8848
  • 查看日志:docker logs <container_id> | grep -i "fail"

问题2:MySQL连接异常

  • 确认账号有远程登录权限
  • 检查max_allowed_packet是否≥64MB
  • 验证主从同步状态

问题3:配置同步延迟

  • 调整nacos.naming.distro.taskDispatchPeriod
  • 检查网络带宽是否≥100Mbps
  • 监控GC日志避免长时间停顿
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/8 5:15:59

Go语言在ESP32嵌入式设备上的物联网服务器开发实践

1. 项目概述与核心价值最近在捣鼓智能家居和物联网设备&#xff0c;发现很多开源项目都开始用ESP32这类微控制器来做边缘计算节点。在GitHub上闲逛时&#xff0c;看到了一个叫hackers365/xiaozhi-esp32-server-golang的项目&#xff0c;名字挺有意思&#xff0c;直译过来就是“…

作者头像 李华
网站建设 2026/5/8 5:15:31

基于Godot与C#的开源进化模拟游戏Thrive开发全解析

1. 项目概述&#xff1a;一个基于科学的进化模拟游戏 如果你对生命如何从单细胞演化到复杂多细胞生物体的过程感到好奇&#xff0c;或者你一直想亲手“设计”一个属于自己的生态系统&#xff0c;那么 Thrive 这款游戏可能就是你一直在寻找的答案。作为一名长期关注模拟与策略游…

作者头像 李华
网站建设 2026/5/8 5:09:28

YOLOv11改进 | 添加注意力机制篇 | 添加ACmix自注意力与卷积混合模型改善模型特征识别效率(包含二次创新C2PSA机制)

开始讲解之前推荐一下我的专栏,本专栏的内容支持(分类、检测、分割、追踪、关键点检测),专栏目前为限时折扣,欢迎大家订阅本专栏,本专栏每周更新3-5篇最新机制,更有包含我所有改进的文件和交流群提供给大家。 一、本文介绍 本文给大家带来的改进机制是ACmix自注意力机制的…

作者头像 李华
网站建设 2026/5/8 5:08:58

TDSQL分布式事务操作

TDSQL分布式事务操作图中引入了一个核心组件&#xff1a;Proxy&#xff08;即图中的中间层&#xff09;&#xff0c;它充当了事务管理器&#xff08;TM&#xff09;的角色。TDSQL 分布式事务执行流程详解 我们将图中的数字编号&#xff08;1-8&#xff09;展开&#xff0c;还原…

作者头像 李华
网站建设 2026/5/8 5:08:48

Sanic数据库集成终极指南:异步ORM与连接池配置详解

Sanic数据库集成终极指南&#xff1a;异步ORM与连接池配置详解 【免费下载链接】sanic Accelerate your web app development | Build fast. Run fast. 项目地址: https://gitcode.com/gh_mirrors/sa/sanic Sanic作为一款高性能的Python异步Web框架&#xff0c;凭借其&…

作者头像 李华