1. 程式人生 > 其它 >Linux - xsync同步指令碼的使用

Linux - xsync同步指令碼的使用

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

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_keys
cp 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