xsync
集群通常需要同步配置文件,是不是可以写个脚本快速同步配置文件呢?
这里 xsync 脚本是基于 rsync 的。相对于scp,rsync做文件夹复制时速度更快,因为rsync只对有差异文件做更新,而scp是把所有文件都复制过去。
安装rsync
[root@flink01 ~]# yum install -y rsync
xsync脚本编写
我这写在常用用户的bin目录下了,之后所有基本我也会写在该目录。xsync脚本内容如下:
[liuwen@flink01 opt]$ cd ~/bin
[liuwen@flink01 bin]$ pwd
/home/liuwen/bin
[liuwen@flink01 bin]$ ll
总用量 16
-rwxrwxrwx. 1 liuwen liuwen 13 8月 28 01:00 jpsall
-rwxrwxrwx. 1 liuwen liuwen 438 8月 15 08:11 kafka.sh
-rwxrwxrwx. 1 liuwen liuwen 741 8月 15 08:14 xsync
-rwxrwxrwx. 1 liuwen liuwen 570 8月 15 07:20 zk.sh
[liuwen@flink01 bin]$ cat xsync
#!/bin/bash
#1. 判断参数个数
if [ $# -lt 1 ]
then
echo Not Enough Arguement!
exit;
fi
#2. 遍历集群所有机器
for host in flink01 flink02 flink03 flink04
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
[liuwen@flink01 bin]$
放开 /root/bin/xsync
权限
[root@flink01 bin]# chmod +x xsync
**运行测试:同步Hadoop的配置文件
[liuwen@flink01 hadoop]$ pwd
/opt/hadoop-3.3.1/etc/hadoop
[liuwen@flink01 hadoop]$ ~/bin/xsync ./hadoop
连接 flink02
,看下 flink02
是否有该文件!
如果脚本写在 某个环境变量PATH的某个路径下,则该脚本可以在任意文件下直接使用。
查看环境变量PATH
[root@flink01 ~]# echo $PATH
/opt/jdk1.8.0_291/bin:/opt/hadoop-3.3.1/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
jspall
我们经常要查询集群中运行的程序,如果你觉得在每台服务器上使用jps命令太麻烦,就可以写个jspall的脚本了。脚本内容如下:
#!/bin/bash
#遍历集群所有机器
for host in flink01 flink02 flink03 flink04
do
echo ---------- $host jps ------------
ssh $host "jps"
done
运行测试
[liuwen@flink01 bin]$ ./jpsall
---------- flink01 jps ------------
3968 QuorumPeerMain
6603 Jps
---------- flink02 jps ------------
3890 QuorumPeerMain
6427 Jps
---------- flink03 jps ------------
3841 QuorumPeerMain
6390 Jps
---------- flink04 jps ------------
6368 Jps
3823 QuorumPeerMain
[liuwen@flink01 bin]$