集群分发脚本xsync

编写集群分发脚本xsync

1)scp 安全拷贝

1)定义:

scp可以实现服务器与服务器之间的数据拷贝

2)特点

scp会把整个文件对象赋值到目标服务器上

3)基本语法

scp    -r          $pdir/$fname              $user@$host:$pdir/$fname
命令   递归       要拷贝的文件路径/名称    目的用户@主机:目的路径/名称
例如
scp -r /opt/module/hadoop/*   atguigu@hadoop102:/opt/module

2)rsync(推荐使用)

注:想使用rsync命令,必须提前安装

安装语法

yum install rsync

1)特点

只会对差异文件进行更新,而scp是把所有文件都复制过去

2)基本语法

rsync    -av       $pdir/$fname              $user@hadoop$host:$pdir/$fname
命令   选项参数   要拷贝的文件路径/名称    目的用户@主机:目的路径/名称
例如
rsync -av /opt/software/* atguigu@hadoop103:/opt/software(这里要写父目录的路径)

选项参数说明

选项 功能
-a 归档拷贝(类似于递归)
-v 显示复制过程

编写集群分发脚本(重点)

1)需求:需要将当前文件或目录同步到当前集群所有节点

2)思路

使用原始命令需要发送N次,可以使用shell脚本,把原始命令放在循环内,可以重复使用

采用rsync实现,因为rsync只会发送有差异的数据

3)实现脚本

#!/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

1)修改脚本xsync具有执行权限

[atguigu@hadoop102 bin]$ chmod +x xsync

2)将脚本复制到/bin中,以便全局调用

如果当前用户没有bin目录,可以手动创建

[atguigu@hadoop102 bin]$ sudo cp xsync /bin/

脚本编写完成,可以测试了

posted @ 2020-11-26 16:37  Later^^  阅读(239)  评论(0编辑  收藏  举报