当前位置:首页 > 工具 > 正文内容

负载均衡集群环境下的代码同步实现方案

访客 工具 2026年5月27日 3

背景说明

项目部署在腾讯云服务器上,由于云环境使用Linux Container技术,远程登录需要通过代理,且服务器无法直接访问外部网络。因此放弃了搭建SVN版本控制系统的方案。

核心需求

  • 将同一份代码同时同步到多台服务器
  • 确保各服务器能在极短时间内完成同步
  • 服务器处于同一内网环境,内网传输速率较高,服务器数量不多时带宽不是瓶颈

问题与解决方案

问题一:无密码SSH同步

rsync是常用的同步工具,支持增量同步。直接使用需要每次输入密码,通过SSH的证书认证可以解决此问题。

密钥生成与配置步骤:

首先生成SSH密钥对:

# 生成密钥对,可设置密码或留空
ssh-keygen -f ~/.ssh/deploy_key

# 将公钥分发到目标服务器
ssh-copy-id -i ~/.ssh/deploy_key.pub deploy_user@target_server_ip

# 添加到SSH代理
eval `ssh-agent -s`
ssh-add ~/.ssh/deploy_key

关于ssh-agent的使用,需要注意以下几点:

  • 执行eval `ssh-agent -s`初始化代理会话
  • 可以使用keychain工具简化证书管理
  • 在~/.bash_profile中添加keychain配置实现会话保持
# ~/.bash_profile 配置示例
keychain ~/.ssh/deploy_key
. ~/.keychain/$HOSTNAME-sh

如需每次登录重新验证证书,可使用keychain --clear清除缓存。

问题二:多服务器并行同步

bash脚本默认单线程执行,利用后台符号&可实现多任务并行。以下是同步脚本的实现:

#!/usr/bin/env bash

# 加载服务器配置
source server_list.conf

# 源代码目录
SOURCE_PATH='/data/wwwroot'

# 目标服务器目录
TARGET_PATH='/data/'

# rsync同步参数
RSYNC_ARGS='-avz --progress --exclude=*.log --exclude=runtime/'

# 执行并行同步
for host in ${SERVER_IPS}
do
{
    sync_cmd="rsync ${RSYNC_ARGS} ${SOURCE_PATH} ${DEPLOY_USER}@${host}:${TARGET_PATH}"
    echo "开始同步: ${host}"
    ${sync_cmd} >> ${LOG_FILE} 2>&1
    echo "完成同步: ${host}"
} &
done

# 等待所有后台任务完成
wait

echo "所有服务器同步完成"

通过在循环体结尾添加&符号,所有rsync命令会同时发起执行,有效降低多台服务器间的同步时间差。

问题三:脚本扩展性设计

将服务器列表抽取为独立配置文件,便于维护:

# server_list.conf

# 检查并启动ssh-agent
check_agent=`ps aux | grep ssh-agent | grep -v grep`
if [ -z "${check_agent}" ]; then
    eval `ssh-agent -s`
    keychain --clear
fi
ssh-add ~/.ssh/deploy_key

# 服务器IP地址列表
SERVER_IPS='192.168.1.10 192.168.1.11 192.168.1.12'

# 部署用户
DEPLOY_USER='deploy'

# 日志目录
LOG_DIR='./sync.log'

# 记录同步时间
echo "=== 同步开始: $(date) ===" >> ${LOG_DIR}

当集群规模变化时,只需修改配置文件中的IP列表即可,无需调整脚本逻辑。

其他可行方案

方案一:建立中转同步目录

建议在每台目标服务器上预先创建专门的同步目录,脚本先将代码同步至中转目录,再由本地脚本从该目录同步至实际运行目录。

方案二:共享存储方案

利用Linux autofs自动挂载技术,让所有应用服务器共享同一存储卷,代码文件只存储一份。但需注意此方案会削弱负载均衡的容错能力——当存储服务器故障时,整个集群将不可用。

各方案均有优劣,需根据实际业务场景权衡选择。

标签: LinuxShell

相关文章

Trojan服务器搭建与配置

一、整体架构(先对齐认知)Clash Meta (PC / iOS / Android)        ↓ TLS   Trojan Server (443)        ↓     InternetTrojan 的核心是: TLS + HTTPS 流量伪装 看起来像正常网站 非常适合...

Tailscale 的详细用法

Tailscale 是一种基于 WireGuard 协议 的 零配置 VPN(虚拟私有网络)服务,让设备之间能够 安全、加密地直接连接,就像它们在同一个本地网络一样。它的核心特点是 简单、安全、跨平台。Tailscale 非常适合 没有公网 IP、两台电脑不在同一局域网 的场景。 简单来说,Tailscale 是什么?Tailscale 是一款让你的各种设备(电脑、服务器、手机...

Clash Tun 模式 导致 爱快(iKuai SD-Wan)内网域名无法访问

一、Clash  DNS 配置dns:  enable: true  listen: 0.0.0.0:53  ipv6: true  enhanced-mode: redir-host  nameserver:    - 223.5.5.5    - 223.6.6.6iKuai 内网域名 ...

深入解析Node.js运行环境与异步I/O架构

深入解析Node.js运行环境与异步I/O架构

核心定义与价值Node.js本质上是一个JavaScript运行环境,而非编程语言或应用框架。它赋予了JavaScript脱离浏览器在服务端、命令行工具及网络应用中执行的能力。其核心意义在于:用单一语言打通前后端开发壁垒。基于事件驱动与非阻塞I/O的架构特性,Node.js在处理API网关、实时通信及微服务等I/O密集型场景时表现卓越,已成为现代后端工程的主流选择。浏览器沙箱限制1995年Java...

ADO.NET SQL参数化查询的最佳实践

在 ADO.NET 中执行 SQL 查询时,参数化查询是一种关键的安全措施和性能优化手段。它通过将 SQL 命令和用户提供的数据分开处理,有效防止了 SQL 注入攻击,并有助于数据库缓存执行计划。下面总结了几种常用的参数化查询方式。 1. 使用 SqlParameter 对象(推荐) 这是最推荐的参数化查询方式。通过显式创建 SqlParameter 对象,您可以精确控制参数的类...

基于ELK的日志集中化分析系统搭建

构建统一日志管理平台的必要性 在分布式架构中,各服务节点独立运行,日志分散存储于不同主机。传统通过命令行工具如grep、awk逐个检索日志的方式,在数据量庞大时效率极低,难以实现快速定位问题。为提升运维效率,需建立集中式日志处理体系,具备日志采集、传输、存储、分析与告警能力。 ELK技术栈核心组件解析 Elasticsearch:分布式搜索引擎,支持全文检索、实时数据分析和高可用集群部署,...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。