Linux集群分發文件xsync,多機器同時運行腳本xcall


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM