编写xsync集群分发脚本(保姆级别)
需求:循环复制文件到所有节点的相同目录下
1.需要系统安装xsync
sudo yum install rsync
2.创建目录
mkdir -p /home/bin
cd /home/bin
创建xsync文件
vim xsync
这块vim不懂的,可以看这篇文章:最实用的Vi/Vim指令汇总(上手超快!!!)_终端编辑代码命令 vim hcb.conf-CSDN博客
粘贴脚本,下面的主机名改成你自己的地址,有几台就填几台的地址
复制完检查一下,看开头是否是对的~
#!/bin/bash
#1 获取输入参数个数,如果没有参数,直接退出
pcount=$#
if [ $pcount -lt 1 ]
thenecho Not Enough Arguement!exit;
fi#2. 遍历集群所有机器
# 也可以采用:
# for host in hadoop{102..104};
# 这块的地址需要改成你自己的,不要照搬,会连不上的
for host in 121.41.78.73 121.40.103.110 121.41.76.158
doecho ==================== $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:$pdirelseecho $file does not exists!fidone
done
3.添加权限
想详细了解Linux权限的小伙伴可以看这篇文章:Linux的访问权限(保姆级别)-CSDN博客
chmod 777 xsync
4.执行
./xsync /home/bin
每一台机器都会要输入两次密码
第二个已经成功复制啦~
第三个已经复制成功啦~
后面两个都是选配,看自己需求~
5.配置到环境变量中
由于我们每次都只能手动的找到放xsync的目录。然后开始复制,效率并不高,所以我们把它放到全局,都可以使用
echo $PATH
直接移到/bin的目录下
sudo cp /home/xsync /bin/
此时可以全局使用这个命令了,就不需要像上面的./xsync了~
xsync 想要复制的文件
6.配置Linux集群ssh无密登录
1) 生成公钥和私钥
cd
ls -al
cd .ssh/
ssh-keygen -t rsa
然后连敲三次回车,就会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)
2) 将公钥拷贝到免密登录的目标机器上
要免密几台,就要给那几台机器都要发送,自己的上面要发是因为本身自己登录的时候也需要密码
ssh-copy-id 地址/主机名
此时A可以免密登录自己,服务器B,服务器C了,如果想要服务器B可以免密登录登录服务器A和服务器C,那么重复上面A的步骤,C也如此
现在分发就不需要密码了~