一, scp(secure copy- 安全拷贝)命令

1.1 scp 入门

  • [scp的定义]
    scp可以实现服务器与服务器之间的数据拷贝.
  • [scp语法]
		scp        -r             $pdir/$filename                    $user@$host:$pdir/$filename
			 #递归(传输的是目录)      # 要拷贝的文件路径/名称      #拷贝目的地 用户名@主机名: 目的地路径/目录名

1.2 scp案例实操

  1. 在bigdata01中, 将bigdata02主机 root目录中.ssh目录下的id_rsa2.pub文件传输到bigdata01主机root目录下的.ssh目录中.
    在这里插入图片描述

  2. 在bigdata01中, 将bigdata02中主机中 win10用户目录下的/usr/tmp目录传输到bigdata01主机root目录下的.ssh目录中.
    在这里插入图片描述

  3. 在bigdata01中, 将bigdata01主机中root目录下.ssh目录中的authorized_keys传输到bigdata02主机root目录下的.ssh目录中.
    在这里插入图片描述

  4. 在bigdata01中, 将bigdata02主机主机中 win10用户目录下的/ust/tmp目录传输到bigdata03主机root目录下的.ssh目录中.
    在这里插入图片描述

二, rsync(remote sync-远程同步)命令

2.1 rsync 入门

  • [定义]
    rsync主要用于增量备份和镜像, 具有速度快, 避免复制相同内容和支持符号链接的优点

  • [rsync 与 scp 的区别]

    1. rsync 可以实现本地主机和远程主机之间的文件同步(包括本地同步到远程, 远程同步到本地两种方式), 也可以实现本地不同路径下文件的同步, 但不能实现远程路径1到远程路径2之间的同步(scp可以实现);
    2. 用rsync工具做文件的复制要比scp速度快, 因为除了第一次之外, rsync 只对差异文件做更新, 而scp每次都是把所有的文件都复制过去.
  • [基本语法]

		rsync        -av             $pdir/$filename                    $user@$host:$pdir/$filename
			 	    #选项参数     # 要拷贝的文件路径/名称      #拷贝目的地 用户名@主机名: 目的地路径/目录名
  • 选项参数说明
    -a 归档拷贝
    -v 显示复制过程

2.2 案例实操

  1. 删除bigdata01的knownhosts,
    在这里插入图片描述
    在这里插入图片描述

  2. 用bigdata02的去同步,
    在这里插入图片描述

三, xsync 集群分发脚本

[需求]

	循环复制(同步)文件到所有结点的相同目录下, 为了节省时间我们只复制不相同的部分(差异化更新).

[需求分析]

  1. 借助rsync命令实现差异化更新:
		rsync        -av             $pdir/$filename                    $user@$host:$pdir/$filename
			 	    #选项参数     # 要拷贝的文件路径/名称      #拷贝目的地 用户名@主机名: 目的地路径/目录名
  1. 期望的脚本使用方式:
			`xsync  要同步的文件名称`
  1. 期望脚本在任何路径都能使用(脚本路径被添加到了全局环境变量中)
  1. 脚本实现:
  1. /opt目录中新建脚本文件xsync.sh
    在这里插入图片描述

  2. 编写脚本文件, vi sync.sh

#!/bin/bash

#1. 判断参数个数
if [ $# -lt 1 ]
then
        echo NOT Enough Argument!
        exit;
fi

#2. 遍历集群所有机器
for host in bigdata02 bigdata03
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. 给脚本赋予执行权限
    在这里插入图片描述

  2. 把脚本路径添加到全局环境变量中

注意: 使用/etc/profile同样也是可行的, 在这里我们使用下面这种方式.
关于这种方式的说明看这篇文章

在这里插入图片描述

千万不要忘了 source /etc/profile!!

  • 检验环境变量是否配置成功
    在这里插入图片描述
  1. 测试脚本工作情况:
    在这里插入图片描述
  2. 脚本正常运行, 我们来同步一下各个节点机器的环境变量

在这里插入图片描述

在这之后, 别忘了去使用 source /etc/profile 刷新节点的环境变量噢!!!
在这里插入图片描述

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐