Linux 集群分发脚本 xsync

1. scp

  • scp(secure copy)可以实现服务器与服务器之间的数据拷贝
  • scp -r $pdir/$fname $user@$host:$pdir/$fname
    • -r:递归
1
2
3
$ scp -r /opt/app/jdk1.8.0_212 root@hadoop102:/opt/app
$ scp -r root@hadoop101:/opt/app/hadoop-3.1.3 /opt/app
$ scp -r root@hadoop101:/opt/app/* root@hadoop103:/opt/app

2. rsync

  • 远程同步工具,主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点
  • rsync -av $pdir/$fname $user@$host:$pdir/$fname
    • -a:归档拷贝
    • -v:显示复制过程
1
$ rsync -av /opt/app/hadoop-3.1.3/ root@hadoop102:/opt/app/hadoop-3.1.3/

3. xsync

  • 复制文件到所有节点的相同目录下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
$ vi /usr/local/bin/xsync
#!/bin/bash
# 1.判断参数个数
if [ $# -lt 1 ]
then
echo Not Enough Arguement!
exit;
fi
# 2.遍历集群所有机器
for host in hadoop101 hadoop102 hadoop103
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
$ chmod +x /usr/local/bin/xsync
$ xsync /etc/profile.d/my.sh

4. ssh 免密登录

ssh

1
2
3
4
5
6
7
8
9
$ ssh-keygen -t rsa
$ ssh-copy-id hadoop101
$ ssh-copy-id hadoop102
$ ssh-copy-id hadoop103
$ ll ~/.ssh
-rw-------. 1 root root 1188 Jul 18 13:25 authorized_keys # 存放授权过的免密登录服务器公钥
-rw-------. 1 root root 1675 Jul 18 13:23 id_rsa # 生成的私钥
-rw-r--r--. 1 root root 396 Jul 18 13:23 id_rsa.pub # 生成的公钥
-rw-r--r--. 1 root root 558 Jul 18 12:55 known_hosts # 存放ssh访问过的服务器的公钥