1.基础拷贝工具
1)安全拷贝:scp(secure copy)
1)scp定义:
scp可以实现服务器与服务器之间的数据拷贝(from server1 to server2)
2)基本语法
scp -r $pdir/$fname $user@hadoop$host:$pdir/$fname
命令 递归 要拷贝的文件路径/名称 目的用户@主机:目的路径/名称
3)案例实操
a)在hadoop101上,将hadoop101中/opt/module目录下的软件拷贝到hadoop102上:
[zxy@hadoop101 /]$ scp -r /opt/module root@hadoop102:/opt/module
b)在hadoop103上,将hadoop101服务器上的/opt/module目录下的软件拷贝到hadoop103上:
[zxy@hadoop103 opt]$sudo scp -r zxy@hadoop101:/opt/module root@hadoop103:/opt/module
c)在hadoop103上操作将hadoop101中/opt/module目录下的软件拷贝到hadoop104上。
[zxy@hadoop103 opt]$ scp -r zxy@hadoop101:/opt/module root@hadoop104:/opt/module
注意:拷贝过来的/opt/module目录,别忘了在hadoop102、hadoop103、hadoop104上修改所有文件的[所有者和所有者组]。
sudo chown zxy:zxy -R /opt/module
d)将hadoop101中/etc/profile文件拷贝到hadoop102的/etc/profile上:
[zxy@hadoop101 ~]$ sudo scp /etc/profile root@hadoop102:/etc/profile
e)将hadoop101中/etc/profile文件拷贝到hadoop103的/etc/profile上:
[zxy@hadoop101 ~]$ sudo scp /etc/profile root@hadoop103:/etc/profile
f)将hadoop101中/etc/profile文件拷贝到hadoop104的/etc/profile上:
[zxy@hadoop101 ~]$ sudo scp /etc/profile root@hadoop104:/etc/profile
==注意:==拷贝过来的配置文件别忘了source一下/etc/profile,
2)远程同步工具:rsync
1)rsync是什么?
rsync主要用于备份和镜像,具有速度快、避免复制相同内容和支持符号链接的优点。
2)基本语法
rsync -av $pdir/$fname $user@hadoop$host:$pdir/$fname
命令 选项参数 要拷贝的文件路径/名称 目的用户@主机:目的路径/名称
4)选项参数说明
选项 | 功能 |
---|---|
-a | 归档拷贝 |
-v | 显示复制过程 |
5)案例实操
- 把hadoop101机器上的/opt/software目录同步到hadoop102服务器的root用户下的/opt/目录
# 需要系统安装有rsync:
[zxy@hadoop102 ~]$ sudo yum install rsync
[zxy@hadoop101 opt]$ rsync -av /opt/software/ root@hadoop102:/opt/software
3)rsync和scp区别
- 1)用rsync做文件的复制要比scp的速度快,rsync只对差异文件做更新。
- 2)scp是把所有文件都复制过去
2.xsync集群分发脚本
1)需求:
- 循环复制文件到所有节点的相同目录下
2)需求分析:
a)rsync命令原始拷贝:
rsync -av /opt/module root@hadoop103:/opt/
b)期望脚本:
xsync 要同步的文件名称
c)说明:在/home/zxy/bin这个目录下存放的脚本,zxy用户可以在系统任何地方直接执行。
3)脚本实现
需要系统安装有rsync:
[zxy@hadoop102 ~]$ sudo yum install rsync
a)在/home/zxy目录下创建bin目录,并在bin目录下xsync创建文件,文件内容如下:
[zxy@hadoop102 ~]$ mkdir bin
[zxy@hadoop102 ~]$ cd bin/
[zxy@hadoop102 bin]$ touch xsync
[zxy@hadoop102 bin]$ vim xsync
在该文件中编写如下shell脚本:
#!/bin/bash
#1 获取输入参数个数,如果没有参数,直接退出
pcount=$#
if [ $pcount -lt 1 ]
then
echo Not Enough Arguement!
exit;
fi
#2. 遍历集群所有机器
# 也可以采用:
# for host in hadoop{102..104};
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)
echo pdir=$pdir
#6. 获取当前文件的名称
fname=$basename $file)
echo fname=$fname
#7. 通过ssh执行命令:在$host主机上递归创建文件夹(如果存在该文件夹)
ssh $host "mkdir -p $pdir"
#8. 远程同步文件至$host主机的$USER用户的$pdir文件夹下
rsync -av $pdir/$fname $USER@$host:$pdir
else
echo $file does not exists!
fi
done
done
b)修改脚本 xsync 具有执行权限
[zxy@hadoop102 bin]$ chmod 777 xsync
c)调用脚本形式:xsync 文件名称
[zxy@hadoop102 bin]$ xsync /home/zxy/bin
注意:如果将xsync放到/home/zxy/bin目录下仍然不能实现全局使用,可以将xsync移动到/usr/local/bin目录下。
3.配置集群间免密登陆
1)免密登陆原理
2)配置免密登陆
a)生成密钥对
[zxy@hadoop102 .ssh]$ ssh-keygen -t rsa
- 然后敲(三个回车),就会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)
- 使用rsa算法生成秘钥对
- 生成的秘钥对在用户家目录下: /home/user/.ssh
b)将公钥拷贝到要免密登录的目标机器上
[zxy@hadoop102 .ssh]$ ssh-copy-id hadoop102
[zxy@hadoop102 .ssh]$ ssh-copy-id hadoop103
[zxy@hadoop102 .ssh]$ ssh-copy-id hadoop104
c)分别ssh直接登陆hadoop102
ssh hadoop103
3).ssh文件夹功能解释
文件名 | 功能 |
---|---|
known_hosts | 记录ssh访问过计算机的公钥public key) |
id_rsa | 生成的私钥 |
id_rsa.pub | 生成的公钥 |
authorized_keys | 存放授权过得无密登录服务器公钥 |
文档解释:
1)ssh
会把你每个你访问过计算机的公钥public key)都记录在~/.ssh/known_hosts。
- 作用:当下次访问相同计算机时,OpenSSH会核对公钥;
- 如果公钥不同,OpenSSH会发出警告,避免你受到DNS Hijack之类的攻击。
The authenticity of host 'hadoop107 192.168.8.107)' can't be established. RSA key fingerprint is fa:9c:50:71:70:2b:4f:36:04:f6:7c:7b:0b:2d:ca:3b. Are you sure you want to continue connecting yes/no)? yes Warning: Permanently added 'hadoop107,192.168.8.107' RSA) to the list of known hosts.
2)ssh-keygen -t rsa
:
- 作用:生成~/.ssh/下id_rsa(私钥)、id_rsa.pub(公钥)两个文件
3)ssh-copy-id hadoop102
:会将本机的公钥发送到要访问计算机——存储在hadoop102的 ~/.ssh/authorized_keys中
- 作用:用于实现A机器对hadoop102机器的免密登陆