rsync简介
rsync
是 "remote synchronization" 的简写,这个工具主要用于远程和本地系统之间同步文件和目录,优化了数据传输过程,只传输变化的部分。它被广泛应用于备份操作、镜像制作以及其他需要文件或目录同步的场景。rsync
在功能丰富且高效的同时,也保证了传输安全性。
rsync创建与使用
脚本创建前提,三台机器已经配置好免密登录,具体参照:https://mp.csdn.net/mp_blog/creation/editor/136015542
作用:循环复制文件到所有节点的相同目录下
核心:rsync -av /opt/module root@hadoop103:/opt/
归档模式(-a)和冗余信息模式(-v)同步文件或目录到远程机器的对应路径
用的家目录/home/user下创建bin文件夹
切换到user目录
cd /home/user
创建bin目录
mkdir bin
切换到bin目录
cd /home/user/bin
创建rsync脚本
vim xsync
在文件中编写如下代码
#!/bin/bash
#1. 判断参数个数
if [ $# -lt 1 ]
then
echo Not Enough Arguement!
exit;
fi
#2. 遍历集群所有机器
for host in hadoop102 hadoop103 hadoop104
do
echo ==================== $host ====================
#3. 遍历所有目录,挨个发送
for file in $@
do
#4判断文件是否存在
if [ -e $file ]
then
#5. 获取父目录
pdir=$(cd -P $(dirname $file); pwd)
#6. 获取当前文件的名称
fname=$(basename $file)
ssh $host "mkdir -p $pdir"
rsync -av $pdir/$fname $host:$pdir
else
echo $file does not exists!
fi
done
done
修改脚本rsync具有执行权限
chmod +x xsync
测试脚本
xsync xsync
rsync与scp区别
脚本中使用的 rsync
命令和 scp
命令都可以用于在不同的机器之间复制文件,但它们之间有一些关键的区别:
scp
命令
scp
(secure copy) 是一个基于 SSH 的文件传输工具,可以在本地和远程之间安全地复制文件或目录。scp
复制文件时,会传输整个文件,不管目的地是否已经有一个旧版本的文件。scp
适合于单次传输较少的文件,特别是当你不需要考虑文件同步的复杂性时。
rsync
命令
rsync
是一个应用层的文件同步和传输工具,也可以通过 SSH 进行操作。rsync
在复制文件时会进行更多检查,它默认只传输变化了的部分(通过比较文件的大小和最后修改时间),这样可以减少数据传输量,提高效率。rsync
可以保持原有的文件权限和时间戳信息,并支持对文件传输过程进行更多控制,比如排除某些文件、使用压缩来传输等。rsync
特别适合定期同步大量数据或目录结构,能够保证目的地的文件是最新的,并且与源数据保持一致。
脚本中使用 rsync
的优势
在你给出的脚本中,使用 rsync
而不是 scp
的几个可能原因包括:
- 效率:如果文件已经存在于远程节点,
rsync
会通过同步文件的差异部分来优化传输过程,这比scp
复制整个文件更高效。 - 目录创建:脚本中先在远程主机上创建了相应的目录结构,确保文件可以被放置在正确的位置。这是
scp
在默认情况下不会做的。 - 递归复制:
rsync
通过-a
参数可以递归地复制目录,并且保留文件的属性和权限。 - 冗余输出:使用
-v
参数可以让rsync
输出详细的信息,帮助用户了解哪些文件被传输了。
综上,rsync
提供的灵活性和效率使其成为同步文件到多个远程主机的理想选择,尤其是在你需要频繁更新或维护文件一致性的场景