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]$