xsync同步腳本的使用
1.簡介
在集群機器配置時,經常需要將一個文件或目錄copy到同樣的多台集群上,如果一個一個機器去復制,比較麻煩。如果有一個辦法,通過一條命令就可以實現這個目的,就簡單多了。xsync就是這樣一個同步腳本。xsync其實是對rsync腳本的二次封裝,腳本內容可以根據自己需要進行修改。
2.配置集群hostname
2.1 配置hostname文件在每台機器執行命令
echo hostname1 > /etc/hostname
hostname hostname1
備注:hostname1 為主機名,最好能標識主機用途,例如:kafkaos1、kafkaos2。
2.2 配置hosts文件
修改完hostname后,將集群集群名稱都加入到/etc/hosts文件中,以后登錄不同機器,直接使用hostname而不用IP。
示例:
10.8.10.101 zkos1
10.8.10.102 zkos2
10.8.10.103 zkos3
10.8.10.104 zkos4
10.8.10.111 kafkaos1
10.8.10.112 kafkaos2
10.8.10.113 kafkaos3
-。。。。。 hostname1
3.配置免密登錄(可以使用腳本不需要密碼)
3.1 生成rsa密鑰
命令生成rsa密鑰,配置信息直接回車即可, 生成的密鑰默認在當前用戶主目錄的.ssh目錄下。
ssh-keygen
密鑰文件有兩個:
id_rsa 存放着私鑰
id_rsa.pub 存放着公鑰
命令執行結果如下:
[root@zkos1 ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:kXclvgbcNBCbW9Z88eP1brP1TtPOc+YAuWTw0xi4QrU root@zkos1
The key’s randomart image is:
±–[RSA 2048]----+
| +o+ … |
| + O * o|
| + E B o.+|
| . o X …+|
| S o @ …|
| . + + …|
| . .o|
| BO|
| =O|
±—[SHA256]-----+
3.2 copy公鑰到目標機器
例子是在:hostname1中(即目標機器是hostname1)
在用戶主目錄創建.ssh目錄
mkdir -p ~/.ssh
在本地執行遠程拷貝命令
cd /root/.ssh
hostname1的公鑰(在hostname1中操作,傳給hostname1)
scp id_rsa.pub root@hostname1:/root/.ssh/authorized1_keys
hostname2的公鑰(在hostname2中操作,傳給hostname1)
scp id_rsa.pub root@hostname1:/root/.ssh/authorized2_keys
合並密鑰(在hostname1中操作)
cat authorized1_keys authorized2_keys > authorized_keys
再在其他的機器上操作
3.3 遠程登錄測試
輸入命令
ssh root@kafkaos1
此時不再需要輸入命令,可直接登錄成功(若第一次連接,需保持對方公鑰,提升時輸入yes即可)。
4.xsync腳本使用
4.1 安裝rsync腳本
xsync是對rsync腳本的二次封裝,所以需要先下載rsync命令。
使用以下命令即可安裝
yum install -y rsync
4.2 添加xsync腳本
在用戶主目錄的bin目錄下添加腳本,腳本內容如下
cd /usr/local/bin
touch xsync
vi xsync
以下是編寫內容(可以修改內容slave='hostname'為自己的主機名前綴,(host=2; host<=3; host++)需要修改為主機名后的編號范圍)
#!/bin/sh # 獲取輸入參數個數,如果沒有參數,直接退出 pcount=$# if((pcount!=1)); then echo Usage: $0 filename exit; fi # 獲取文件名稱 p1=$1 fname=`basename $p1` echo fname=$fname # 獲取上級目錄到絕對路徑 pdir=`cd -P $(dirname $p1); pwd` echo pdir=$pdir # 獲取當前用戶名稱 user='root' # 獲取hostname及起止號 slave='hostname' # 循環 for((host=2; host<=3; host++)) do echo $pdir/$fname $user@$slave$host:$pdir echo ==================$slave$host================== rsync -rvl $pdir/$fname $user@$slave$host:$pdir done
需要攜帶1個參數,
filename 待發送的文件或目錄名
添加執行權限
chmod 777 xsync
測試
例如我要將當前目錄下的a.t文件同步到服務器hostname2、hostname3上,使用命令
xsync a.t
xcall.sh批量運行腳本
[root@hostname1 ~]# cd /usr/local/bin
touch xcall
vi xcall
以下是編寫內容(for i in hostname1 hostname2,需要修改自己批量運行程序的主機名)
#!/bin/bash for i in hostname1 hostname2 do echo --------- $i ---------- ssh root@$i "source /etc/profile;$*" done
添加執行權限
chmod 777 xcall
測試
xcall jps