Linux - xsync同步指令碼的使用
阿新 • • 發佈:2022-03-27
xsync同步指令碼的使用
修改完hostname後,將叢集叢集名稱都加入到/etc/hosts檔案中,以後登入不同機器,直接使用hostname而不用IP。
示例:
1.簡介
在叢集機器配置時,經常需要將一個檔案或目錄copy到同樣的多臺叢集上,如果一個一個機器去複製,比較麻煩。如果有一個辦法,通過一條命令就可以實現這個目的,就簡單多了。xsync就是這樣一個同步指令碼。xsync其實是對rsync指令碼的二次封裝,指令碼內容可以根據自己需要進行修改。2.配置叢集hostname
2.1 配置hostname檔案
在每臺機器執行命令echo hostname1 > /etc/hostname hostname hostname1備註:hostname1 為主機名,最好能標識主機用途,例如:kafkaos1、kafkaos2。
2.2 配置hosts檔案
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
3.配置免密登入
3.1 生成rsa金鑰
使用命令ssh-keygen 生成rsa金鑰,配置資訊直接回車即可, 生成的金鑰預設在當前使用者主目錄的.ssh目錄下。 金鑰檔案有兩個: 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機器自身公鑰到目標機器
方法一
在目標機器的使用者主目錄建立.ssh目錄mkdir -p ~/.ssh在本地執行遠端拷貝命令
cd /root/.ssh scp id_rsa.pub root@kafkaos1:/root/.ssh/authorized_keys
方法二
在本地先將id_rsa_pub 一份名為 authorized_keyscp id_rsa.pub authorized_keys使用rsync 命令同步到對方目錄
rsync authorized_keys root@kafkaos1:/root/.ssh/備註:該方法需要本地暫時沒有authorized_keys,有的話先改名也可以,並且本地機器安裝有rsync指令碼。操作完記得刪除本地的authorized_keys。
方式三
ssh-copy-id -i ~/.ssh/id_rsa.pub root@server:/root/.ssh/
3.3 遠端登入測試
輸入命令ssh root@kafkaos1此時不再需要輸入命令,可直接登入成功(若第一次連線,需保持對方公鑰,提升時輸入yes即可)。
4.xsync指令碼使用
4.1 安裝rsync指令碼
xsync是對rsync指令碼的二次封裝,所以需要先下載rsync命令。 使用以下命令即可安裝yum install -y rsync
4.2 新增xsync指令碼
在使用者主目錄的bin目錄下新增指令碼,指令碼內容如下 #!/bin/sh # 獲取輸入引數個數,如果沒有引數,直接退出 pcount=$# if((pcount!=4)); then echo Usage: $0 filename servername startno endno exit; fi # 獲取檔名稱 p1=$1 fname=`basename $p1` echo fname=$fname # 獲取上級目錄到絕對路徑 pdir=`cd -P $(dirname $p1); pwd` echo pdir=$pdir # 獲取當前使用者名稱稱 user=`whoami` # 獲取hostname及起止號 slave=$2 startline=$3 endline=$4 # 迴圈 for((host=$startline; host<=$endline; host++)); do echo $pdir/$fname $user@$slave$host:$pdir echo ==================$slave$host================== rsync -rvl $pdir/$fname $user@$slave$host:$pdir done 該指令碼經過修改,需要攜帶4個引數,分別是 filename 待發送的檔案或目錄名 servername 伺服器字首名 startno 伺服器編號起始編號 endno 伺服器編號終止編號4.3 測試
例如我要將當前目錄下的a.t檔案同步到伺服器kafkaos2、kafkaos3上,使用命令xsync a.t kafkaos 2 3執行結果如下
fname=a.t pdir=/root /root/a.t root@kafkaos2:/root kafkaos2 sending incremental file list a.t sent 470 bytes received 35 bytes 1,010.00 bytes/sec total size is 383 speedup is 0.76 /root/a.t root@kafkaos3:/root kafkaos3 sending incremental file list a.t sent 470 bytes received 35 bytes 336.67 bytes/sec total size is 383 speedup is 0.76