暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Nacos-sync的高可用架构

IT那活儿 2025-12-29
105
点击上方“IT那活儿”公众号--专注于企业全栈运维技术分享,不管IT什么活儿,干就完了!!!  
一

Nacos-sync 架构解析

Nacos-sync 是一款用于跨集群、跨版本 Nacos 配置与服务元数据同步的工具,其高可用架构设计围绕 “无状态化、分布式协同、故障自动转移” 三大核心原则展开,通过多节点部署与分布式协调机制,确保同步任务不中断、数据不丢失。
1.1 核心架构组成
Nacos-sync 架构分为 前端交互层、核心服务层、数据存储层、同步执行层 四大模块,各模块职责清晰且具备水平扩展能力:
架构
层级
核心
组件
功能
说明
前端交互层
Web UI、OpenAPI
提供可视化操作界面(如同步任务配置、集群管理)和程序化接口,支持批量操作与自动化集成
核心服务层
任务调度中心、集群协调模块
1. 负责同步任务的分发与调度,支持基于 “分片” 的负载均衡;2. 通过分布式锁(如基于 Redis/ZooKeeper)实现多节点协同,避免任务重复执行
数据存储层
元数据数据库、缓存服务
1. 存储同步任务配置(如源集群、目标集群、同步规则)、集群连接信息;2. 缓存同步任务状态(如 “运行中”“暂停”“失败重试”)与增量数据标识
同步执行层
配置同步器、服务元数据同步器
1. 配置同步器:拉取源集群配置变更,按规则过滤 转换后推送到目标集群;2. 服务元数据同步器:监听源集群服务注册 注销事件,同步服务 IP、端口、健康状态等信息
高可用保障层
节点心跳检测、故障自动转移模块
1. 实时检测节点存活状态,通过心跳上报(默认 30 秒 次)识别故障节点;2. 故障节点的同步任务自动分配给健康节点,转移过程无感知(默认转移耗时 < 10 秒)
1.2 高可用关键设计
1)无状态化节点设计
所有 Nacos-sync 节点均为无状态,不存储本地任务数据,仅通过 “任务分片 ID” 与数据存储层交互。新增或下线节点时,调度中心自动重新分配分片,支持水平扩展(理论上节点数量无上限,仅受限于数据库连接池与缓存性能)。
2)分布式锁防重复执行
基于 Redis 或 ZooKeeper 实现分布式锁,每个同步任务对应唯一锁标识。当多节点竞争同一任务时,仅持有锁的节点可执行同步操作,避免数据重复推送或冲突(如同一配置被多个节点同时修改)。
3)增量同步与断点续传
同步器通过 “版本号” 或 “时间戳” 记录同步进度:
  • 配置同步
    基于 Nacos 配置的 dataId + group + tenant 唯一标识,仅同步版本号变化的配置;
  • 服务同步
    监听 Nacos 服务变更事件(如 REGISTER/DEREGISTER),增量同步变更的服务实例;
若同步过程中断(如节点故障),恢复后可从上次记录的版本号 时间戳继续同步,避免全量重推导致的性能损耗。
二

Nacos-sync 工作原理

Nacos-sync 的核心工作流程围绕 “任务注册→分片分配→增量同步→状态反馈” 四步展开,结合高可用机制确保同步过程稳定可靠。
2.1 任务注册阶段
用户通过 Web UI 或 OpenAPI 创建同步任务,配置内容包括:
  • 源集群信息(Nacos 版本、地址、账号密码、命名空间);
  • 目标集群信息(支持多目标集群,即 “一对多” 同步);
  • 同步规则(如配置过滤规则 “仅同步 group=PROD 的配置”、服务同步规则 “排除 IP 段为 192.168.1.0/24 的实例”)。
任务配置存储到元数据数据库(如 MySQL),并生成唯一 taskId。
2.2 分片分配阶段
调度中心定期(默认 10 秒 次)扫描未分配分片的任务,基于 “一致性哈希算法” 将 taskId 映射到具体节点:
  • 每个节点负责固定范围的分片(如节点 A 负责分片 0-100,节点 B 负责分片 101-200);
  • 新增节点时,原有分片自动拆分,确保负载均衡;下线节点时,其分片由其他节点接管,无任务丢失。
2.3 增量同步阶段
以配置同步为例,具体执行流程如下:
sequenceDiagram
源Nacos集群->>Nacos-sync同步器: 推送配置变更事件(含版本号)
Nacos-sync同步器->>元数据数据库: 查询该配置的同步规则
Nacos-sync同步器->>目标Nacos集群: 按规则过滤/转换后推送配置
目标Nacos集群->>Nacos-sync同步器: 返回推送结果(成功/失败)
Nacos-sync同步器->>元数据数据库: 更新同步状态(如“成功”“失败重试”)

2.4 状态反馈与故障处理
  • 同步成功
    更新任务的 “最后同步时间”“最新版本号”;
  • 同步失败
    触发重试机制(默认重试 3 次,间隔 5 秒),若仍失败,标记任务状态为 “失败” 并发送告警(如邮件 / 钉钉);
  • 节点故障
    心跳检测模块发现节点离线后,调度中心立即将该节点的分片分配给其他健康节点,同步任务无缝续跑。
三

Nacos-sync 监控手段

为确保 Nacos-sync 集群稳定运行,需从 节点健康、任务状态、同步性能、异常告警 四个维度建立监控体系,推荐结合 Prometheus + Grafana 实现可视化监控,搭配告警机制及时发现问题。
核心监控指标:
Nacos-sync 内置 Prometheus 指标暴露接口(默认 /actuator/prometheus),关键指标如下:
指标
名称
指标
类型
说明
正常
范围
nacos_sync_node_health_status
Gauge
节点健康状态(1 = 在线,0 = 离线)
1
nacos_sync_task_total_count
Gauge
同步任务总数(按状态分类:运行中、暂停、失败)
-
nacos_sync_task_sync_success_count
Counter
同步成功次数(按任务 ID 分类)
持续增长(无异常)
nacos_sync_task_sync_fail_count
Counter
同步失败次数(按任务 ID 分类)
接近 0(偶发失败可接受)
nacos_sync_task_sync_latency
Summary
同步延迟(从源集群变更到目标集群同步完成的耗时,单位:毫秒)
< 500ms
nacos_sync_redis_lock_acquire_count
Counter
Redis 分布式锁获取次数(成功 / 失败)
失败次数为 0
nacos_sync_db_connection_count
Gauge
MySQL 数据库连接数(活跃连接 / 空闲连接)
活跃连接 < 最大连接池(默认 20)

END


本文作者:裴世雨(上海新炬中北团队)

本文来源:“IT那活儿”公众号

文章转载自IT那活儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论