年rsync同步最佳实践完整指南:高效文件同步方案与常见问题解答
运行环境说明
操作系统:CentOS 7.5,rsync 版本 3.1.2
安装 rsync
绝大部分 Linux 发行版在初始安装时已集成 rsync。快速验证是否已存在,执行版本查询命令即可:
rsync --version
若未预装,也无需担心,提供两种安装方式供你选择。
yum 安装(推荐)
这是最快捷稳定的方式,一条命令即可完成:
yum install -y rsync
安装后配置文件自动生成于 /etc/rsyncd.conf,无需额外手动处理。
源码编译安装
如需自定义版本或进行编译优化,可选用源码安装。首先下载对应版本的源码包:
wget https://download.samba.org/pub/rsync/src/rsync-3.1.2.tar.gz
随后依次执行解压、配置、编译与安装:
tar -xvf rsync-3.1.2.tar.gz
cd rsync-3.1.2
./configure --prefix=/usr/local/rsync
make && make install
采用此方式时,需手动创建配置文件 /usr/local/rsync/rsyncd.conf,其路径与 yum 安装不同,务必注意区分。
基于 rsync 的自动同步脚本
实际运维中,常需将文件批量同步至多台远程服务器。逐台手动执行命令效率低下,推荐编写自动化脚本来完成。下方脚本支持接收任意数量的文件或目录作为参数,自动推送至预设的目标服务器列表:
#!/bin/bash
# 判断参数
if [ $# -lt 1 ]
then
echo "请传入要同步的文件"
exit;
fi
# 要同步的目标服务器清单
for host in 192.168.1.2 192.168.1.3 192.168.1.4
do
echo ==================== $host ====================
# 向下遍历所有目录,依次发送
for file in $@
do
# 获取父目录,用于创建不存在的目录
pdir=$(cd -P $(dirname $file); pwd)
# 获取当前文件的名称
fname=$(basename $file)
# 创建目录,如果这一步里对应的服务器没有进行免密设置,则需要输入密码
ssh -p 50022 $host "mkdir -p $pdir"
# 执行同步,如果这一步里对应的服务器没有进行免密设置,则需要输入密码
echo "rsync -a v -e 'ssh -p 50022' $pdir/$fname hadoop@$host:$pdir"
rsync -a v -e 'ssh -p 50022' $pdir/$fname hadoop@$host:$pdir
done
done
该脚本的使用非常直接:将其放入 PATH 环境变量包含的任意目录(例如 ~/bin,若不存在则自行创建),并赋予可执行权限。此后在任何工作目录下均可直接调用。具体操作:将脚本保存为 rsync-all 至 ~/bin,然后执行 chmod +x ~/bin/rsync-all。之后同步文件只需一条命令,例如 rsync-all /data/logs/app.log,脚本会自动分发至清单内的所有远程服务器。
注意:脚本中使用了 ssh -p 50022,表明 SSH 端口并非默认的 22。若你的服务器也采用自定义端口,请相应修改;若使用默认端口,则直接移除 -p 50022 即可。此外,强烈建议先配置免密登录,否则每次同步都会提示输入密码,自动化优势将大打折扣。
