当前位置: 首页 > news >正文

xsync集群分发脚本开发指南

一、需求说明

核心功能需求

  • 循环复制文件/目录到所有集群节点的相同路径
  • 支持任意位置调用脚本(需配置全局环境变量)
  • 兼容普通文件和目录同步

技术指标

  • 基于rsync实现增量同步
  • 支持多文件参数传递
  • 自动创建目标目录结构
  • 错误文件路径检测机制

二、架构设计

无效
有效
不存在
存在
用户输入
参数校验
参数有效?
报错退出
遍历集群节点
遍历文件列表
文件存在?
记录错误
构建目标路径
创建远程目录
执行rsync同步
循环结束
所有节点完成

三、实现详解

1. 脚本创建

#!/bin/bash
# 节点列表(可扩展)
hosts=(hadoop102 hadoop103 hadoop104)  

# 参数校验
if [ $# -lt 1 ]; then
    echo "Usage: $0 <file1> [file2] ..."
    exit 1
fi

# 多节点遍历
for host in ${hosts[@]}; do
    echo -e "\n\033[32m========== Syncing to $host ==========\033[0m"
    
    # 多文件处理
    for file in "$@"; do
        # 路径解析
        if [ -e "$file" ]; then
            pdir=$(cd -P $(dirname "$file") >/dev/null 2>&1; pwd)
            fname=$(basename "$file")
            
            # 目录预创建
            ssh $host "mkdir -p $pdir 2>/dev/null"
            
            # 增量同步
            rsync -avz --progress $pdir/$fname $host:$pdir/
        else
            echo -e "\033[31m[WARN] $file does not exist!\033[0m"
        fi
    done
done

2. 关键技术点

路径处理
pdir=$(cd -P $(dirname "$file") >/dev/null 2>&1; pwd)  # 解析物理路径
fname=$(basename "$file")                              # 获取纯净文件名
同步优化
rsync -avz --progress 
# -a 归档模式(保留权限属性)
# -v 详细输出
# -z 压缩传输
# --progress 显示传输进度

3. 部署流程

# 创建个人bin目录
mkdir -p ~/bin && chmod 750 ~/bin

# 设置环境变量(追加到.bashrc)
echo 'export PATH=$PATH:$HOME/bin' >> ~/.bashrc
source ~/.bashrc

# 安装脚本
cp xsync ~/bin/
chmod 755 ~/bin/xsync

# 全局部署(可选)
sudo cp ~/bin/xsync /usr/local/bin/

4. 验证测试

# 测试用例
xsync /etc/hosts               # 单文件同步
xsync ~/.ssh/config ~/applogs  # 多文件同步
xsync "file with space.txt"    # 含空格文件名测试

# 验证方法
# 在所有节点执行:
ls -l <同步路径>
md5sum <同步文件>

四、增强方案

1. 安全增强

# SSH免密配置(所有节点执行)
ssh-keygen -t rsa
ssh-copy-id hadoop102
ssh-copy-id hadoop103
ssh-copy-id hadoop104

2. 错误处理增强

# 添加重试机制
max_retry=3
for ((i=1; i<=$max_retry; i++)); do
    rsync -avz $pdir/$fname $host:$pdir/ && break
    sleep $((i*2))
done

3. 动态节点配置

# 创建集群配置文件
vim ~/cluster.nodes
----------------------------------
hadoop102
hadoop103
hadoop104
hadoop105

修改脚本:

# 读取配置文件
hosts=($(cat ~/cluster.nodes))

五、环境变量同步

1. 同步配置

# 需要root权限时
sudo xsync /etc/profile.d/my_env.sh

# 普通用户环境变量
xsync ~/.bashrc

2. 批量生效

# 远程执行命令
for host in ${hosts[@]}; do
    ssh $host "source /etc/profile"
done

六、生产环境建议

  1. 权限控制
chmod 755 xsync
- 避免使用777权限,推荐755
  1. 日志记录
rsync -avz --log-file=/var/log/xsync.log
  1. 带宽限制
rsync --bwlimit=5000  # 限制5MB/s
  1. 节点健康检查
ping -c 2 $host >/dev/null || {
    echo "$host unreachable"
    continue
}
  1. 版本管理
# 添加版本头
# Version: 2.1
# Last Updated: 2023-08-20

七、排错指南

现象排查步骤解决方案
命令未找到1. 检查$PATH 2. 验证脚本位置配置正确的环境变量路径
权限被拒绝1. 检查文件权限 2. 验证ssh配置配置SSH免密登录
部分节点同步失败1. 检查网络连通性 2. 验证磁盘空间修复网络或清理目标节点磁盘
符号链接同步异常1. 检查rsync参数 2. 验证链接指向添加-L参数处理符号链接

## 八、扩展应用
### 1. 定时同步
```bash
# 创建cron任务(每天凌晨同步)
0 2 * * * /usr/local/bin/xsync /data/important

2. 差异化同步

# 排除特定文件类型
rsync --exclude="*.tmp" --exclude="*.log"

3. 邮件通知

# 添加邮件通知功能
if [ $? -eq 0 ]; then
    echo "Success" | mail -s "Sync Report" admin@example.com
else
    echo "Failed" | mail -s "Sync Alert" admin@example.com
fi

相关文章:

  • 使用AI一步一步实现若依前端(9)
  • 游戏引擎学习第150天
  • 洗鞋小程序(源码+文档+讲解+演示)
  • Spring(4)——响应相关
  • 如何测试 item_get_video 小红书接口返回数据的详细说明
  • 【统计至简】【古典概率模型】联合概率、边缘概率、条件概率、全概率
  • 【实战ES】实战 Elasticsearch:快速上手与深度实践-5.4.2用户画像聚合(Terms Aggregation + Cardinality)
  • SpringCloud——环境搭建
  • html css网页制作成品——糖果屋网页设计(4页)附源码
  • Java中数据库索引选择B+树而非红黑树的详细解析
  • 【前端拓展】Canvas性能革命!WebGPU + WebAssembly混合渲染方案深度解析
  • 【MySQL】增删改查进阶
  • 学习C2CRS Ⅲ (Response Generation Module)
  • 【编程向导】-JavaScript-基础语法-类型检测
  • 软考高级信息系统项目管理师笔记-第23章组织通用管理
  • redis趣味解读
  • SpringMVC工作原理
  • Python :Pandas
  • harmonyOS(鸿蒙)— 网络权限(解决app网络资源无法加载,图片无法显示)
  • 帕金森病如何 “偷走” 患者的正常生活?
  • 长沙搜索排名优化公司/seo营销优化软件
  • 如何做好网站建设内容的策划书/今日特大新闻
  • 培训机构网站建设/北京网络网站推广
  • 收费看电影网站建设/杭州seo网站排名优化
  • 怎么做网站的图片跳转/seo优化是怎么回事呢
  • 网站建设word文档/关键词智能调词工具