1、简介
不同主机之间的文件相互传输,我们通常使用scp命令进行全量复制,但是这种效率不高,因此在第一次使用scp命令进行全量复制,增量复制采用rsync命令。
2、scp命令
scp命令用于不同主机之间文件复制,采用ssh协议来保证复制的安全性。
scp [-参数] [用户1@主机:]文件 [用户2@主机:]文件
2.1、常用参数
参数 | 描述 |
r | 递归复制整个目录 |
p | 传输后保留文件的原始属性 |
l | 指定传输带宽(单位:kb/s) |
P | 指定传输的端口号 |
q | 不显示传输进度 |
C | 压缩传输 |
2.2、常用命令
# 1、将本地文件传输到另一台服务器
scp [-r] 文件夹/文件 用户名@主机:文件夹/文件
# 2、两台主机之间文件传输
scp [-r] 用户名@主机1:文件夹/文件 用户名@主机2:文件夹/文件
3、rsync 命令
rsync 命令是一款开源的、快速的、多功能、可实现全量及增量的本地或者远程数据同步工具。
安装:
yum -y install rsync
命令格式:
# 1、本地模式
rsync [-参数] 源文件 目标文件
# 2、远程拉取
rsync [-参数] 用户@主机:源文件 目标文件
# 3、远程推送
rsync [-参数] 源文件 用户@主机:目标文件
3.1、常用参数
参数 | 描述 |
z | 传输时进行压缩 |
r | 以递归的方式进行传输 |
a | 以递归的方式进行传输,保留文件属性 |
l | 保留软连接 |
v | 传输显示进度 |
--exclude= | 排除不需要传输的文件 |
--delete | 目标目录和源目录下的内容保持一致,以源目录为准,目标目录多的自动删除。 |
3.2、常用命令
# 1、同步目录
rsync -avz 源目录 目标目录
# 2、同步文件
rsync -avz 源文件 目标文件
# 3、远程同步
rsync -avz 用户@主机:源目录 目标目录
rsync -avz 源目录 用户@主机:目标目录
3.3、集群同步文件脚本(xsync)
#!/bin/bash
# 1. 判断参数个数
if [ $# -lt 1 ]
then
echo Not Enough Arguement!
exit;
fi
#2. 遍历集群所有机器
for host in "node-1" "node-2" "node-3"
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
注:将上述脚本放在 /usr/local/bin目录下,并且赋予权限。
chmod 777 xsync
使用脚本:
xsync 文件/文件夹
4、总结
本文介绍两种集群运维常用工具,在集群主机之间进行文件同步,使用这两个工具可以帮助我们更加快速进行集群管理。
本人是一个从小白自学计算机技术,对运维、后端、各种中间件技术、大数据等有一定的学习心得,想获取自学总结资料(pdf版本)或者希望共同学习,关注微信公众号:it自学社团。后台回复相应技术名称/技术点即可获得。(本人学习宗旨:学会了就要免费分享)