深圳企业建站设计公司成都网站快速排名软件
一、需求说明
核心功能需求
- 循环复制文件/目录到所有集群节点的相同路径
- 支持任意位置调用脚本(需配置全局环境变量)
- 兼容普通文件和目录同步
技术指标
- 基于rsync实现增量同步
- 支持多文件参数传递
- 自动创建目标目录结构
- 错误文件路径检测机制
二、架构设计
三、实现详解
1. 脚本创建
#!/bin/bash
# 节点列表(可扩展)
hosts=(hadoop102 hadoop103 hadoop104) # 参数校验
if [ $# -lt 1 ]; thenecho "Usage: $0 <file1> [file2] ..."exit 1
fi# 多节点遍历
for host in ${hosts[@]}; doecho -e "\n\033[32m========== Syncing to $host ==========\033[0m"# 多文件处理for file in "$@"; do# 路径解析if [ -e "$file" ]; thenpdir=$(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/elseecho -e "\033[31m[WARN] $file does not exist!\033[0m"fidone
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++)); dorsync -avz $pdir/$fname $host:$pdir/ && breaksleep $((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[@]}; dossh $host "source /etc/profile"
done
六、生产环境建议
- 权限控制
chmod 755 xsync
- 避免使用777权限,推荐755
- 日志记录
rsync -avz --log-file=/var/log/xsync.log
- 带宽限制
rsync --bwlimit=5000 # 限制5MB/s
- 节点健康检查
ping -c 2 $host >/dev/null || {echo "$host unreachable"continue
}
- 版本管理
# 添加版本头
# 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 ]; thenecho "Success" | mail -s "Sync Report" admin@example.com
elseecho "Failed" | mail -s "Sync Alert" admin@example.com
fi