前置知识
rsync 可以在当前机器用SSH命令登录别的机器来操作别的机器执行指定的命令
登录并且执行命令, 给命令结果返回回来,注意登录人的标识
ssh root@zjj102 ls /usr/local
给 zjj102机器上的/usr/local 路径下的内容打印出来了.
[root@zjj101 soft]# ssh root@zjj102 ls /usr/local
apache-tomcat-8.5.38
sentinelLog.log
share
src
startUpSentinel.sh
[root@zjj101 soft]#
编写分发脚本
如果多个机器同步文件的话你不可能去手动挨个执行 rsync 命令去同步文件,这样会累死, 直接写个同步脚本去批量同步配置,相当于把命令封装到shell脚本里面,这样不用每次都写一遍命令,使用起来也很方便.
下面脚本就是我可以通过 zjj101 机器向 zjj102和zjj103机器上同步文件夹里面的文件,如果文件夹里面有软连接的话,也会同步软连接对应的目录的文件.
xsync文件的内容:
#!/bin/bash
#校验参数是否合法
if(($#==0))
then
echo 请输入要分发的文件!
exit;
fi
# -P 如果是软连接也能获取分发文件的绝对路径
dirpath=$(cd `dirname $1`; pwd -P)
filename=`basename $1`
echo 要分发的文件的路径是:$dirpath/$filename
#循环执行rsync分发文件到集群的每条机器
# for循环适当修改一下, 也可以在这里写死你自己的服务名字.
# 我这里的服务器名字是 zjj102和 zjj103
for((i=102;i<=103;i++))
do
echo ---------------------zjj$i---------------------
rsync -rvlt $dirpath/$filename root@zjj$i:$dirpath
done
使用rsync分发脚本
zjj101机器下的 “/root/soft” 路径有 demo文件夹,
而zjj102和zjj103机器下的"/root/soft" 路径没有demo文件夹
下面开始给 zjj101文件下的demo文件夹里面的东西同步到zjj102和zjj103上面.
准备工作
zjj101 机器/root/soft 文件夹下面 新建个 demo文件夹,然后新建一个demoSCP.txt 文件, 里面随便写点东西.
zjj101机器
[root@zjj101 soft]# pwd
/root/soft
[root@zjj101 soft]# ls
data demo docker hadoop-2.7.2 hive-1.2.1 movie_info.txt myconf sortby-result tmp xsync
[root@zjj101 soft]# cd demo/
[root@zjj101 demo]# ls
demoSCP.txt
[root@zjj101 demo]# cat demoSCP.txt
sdklasjlkd
[root@zjj101 demo]#
zjj102机器
[root@zjj102 soft]# pwd
/root/soft
[root@zjj102 soft]# ls
hadoop-2.7.2
[root@zjj102 soft]#
zjj103机器
[root@zjj103 soft]# pwd
/root/soft
[root@zjj103 soft]# ls
hadoop-2.7.2 myconf
[root@zjj103 soft]#
开始同步
相对路径
zjj101
[root@zjj101 soft]# sh xsync demo/
要分发的文件的路径是:/root/soft/demo
---------------------zjj102---------------------
sending incremental file list
demo/
demo/demoSCP.txt
sent 136 bytes received 39 bytes 350.00 bytes/sec
total size is 11 speedup is 0.06
---------------------zjj103---------------------
sending incremental file list
demo/
demo/demoSCP.txt
sent 136 bytes received 39 bytes 116.67 bytes/sec
total size is 11 speedup is 0.06
[root@zjj101 soft]#
zjj102查看结果
[root@zjj102 soft]# ls
demo hadoop-2.7.2
[root@zjj102 soft]# cd demo/
[root@zjj102 demo]# ls
demoSCP.txt
[root@zjj102 demo]# cat demoSCP.txt
sdklasjlkd
[root@zjj102 demo]#
此时发现 已经同步过来demo文件夹的内容了, zjj103就不粘贴shell命令结果, 和zjj102一样的结果,demo也被同步过来了.
绝对路径
zjj101机器上新添加了个demo2.txt
然后使用 rsync脚本同步一下,此时输入的是绝对路径 " sh xsync /root/soft/demo" 这个命令, zjj102和zjj103机器发现已经被同步了demo文件夹里面新增的文件.
[root@zjj101 demo]# pwd
/root/soft/demo
[root@zjj101 demo]# ls
demo2.txt demoSCP.txt
[root@zjj101 demo]# cd ../
[root@zjj101 soft]# ls
data demo docker hadoop-2.7.2 hive-1.2.1 movie_info.txt myconf sortby-result tmp xsync
[root@zjj101 soft]# sh xsync /root/soft/demo
要分发的文件的路径是:/root/soft/demo
---------------------zjj102---------------------
sending incremental file list
demo/
demo/demo2.txt
sent 158 bytes received 39 bytes 131.33 bytes/sec
total size is 20 speedup is 0.10
---------------------zjj103---------------------
sending incremental file list
demo/
demo/demo2.txt
sent 158 bytes received 39 bytes 394.00 bytes/sec
total size is 20 speedup is 0.10
[root@zjj101 soft]#
zjj102
[root@zjj102 demo]# ls
demo2.txt demoSCP.txt
[root@zjj102 demo]#