1 簡介
在大數(shù)據(jù)集群部署過程中抓狭,往往需要同步文件和配置到多臺機(jī)器上枕荞,如果一臺臺的機(jī)器去復(fù)制,效率太低還容易出錯碎连。我們可以使用腳本的形式灰羽,批量同步文件,這里使用async進(jìn)行文件同步破花。
2 配置集群hostname
2.1 配置hostname文件
1 服務(wù)器hadoop01
[root@localhost ~]# echo hostname1 > /etc/hostname
hostname hadoop01
2 服務(wù)器hadoop02
[root@localhost ~]# echo hadoop02 > /etc/hostname
hostname hadoop02
3 服務(wù)器hadoop03
[root@localhost ~]# echo hadoop03 > /etc/hostname
hostname hadoop03
4 服務(wù)器hadoop04
[root@localhost ~]# echo hadoop04 > /etc/hostname
hostname hadoop04
2.2 配置hosts文件
同步腳本的那臺機(jī)器上谦趣,現(xiàn)在是hadoop01
192.168.85.101 hadoop01
192.168.85.102 hadoop02
192.168.85.103 hadoop03
192.168.85.104 hadoop04
192.168.85.105 hadoop05
3 配置免密登錄
3.1 生成rsa密鑰
使用命令ssh-keygen
生成rsa密鑰,配置信息直接回車即可, 生成的密鑰默認(rèn)在當(dāng)前用戶主目錄的.ssh目錄下座每。
密鑰文件有兩個:
- id_rsa 存放著私鑰
- id_rsa.pub 存放著公鑰
[root@localhost ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
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:fX0pdntsAyRWTvjuoSG+VFu/vsfFpRypBi2Z5iRY8ok root@localhost.localdomain
The key's randomart image is:
+---[RSA 2048]----+
| .o |
| . . .+ |
| * . *.o . |
| E +.O +oo o|
| S=.+oB.*o|
| .oo*oBo+|
| ...o+ .==|
| .. . . .*|
| .. .+o|
+----[SHA256]-----+
[root@localhost ~]#
3.2 同步公鑰到其他服務(wù)器
3.2.1 安裝rsync
[root@localhost ~]# yum install -y rsync
3.2.1 同步公鑰
[root@localhost ~]# cp id_rsa.pub authorized_keys
[root@localhost ~]# rsync authorized_keys root@hadoop02:/root/.ssh/
[root@localhost ~]# rsync authorized_keys root@hadoop03:/root/.ssh/
[root@localhost ~]# rsync authorized_keys root@hadoop04:/root/.ssh/
3.3 免密登錄測試
無需輸入密碼前鹅,代表密碼登錄配置成功
[root@localhost ~]# root@hadoop02
4 xsync腳本使用
用戶主目錄的bin目錄添加
pwd
查看當(dāng)前目錄,用戶登錄進(jìn)去的初始目錄峭梳,一般為家
目錄
4.1 創(chuàng)建腳本
#!/bin/bash
#1 獲取輸入?yún)?shù)個數(shù)舰绘,如果沒有參數(shù)蹂喻,直接退出
pcount=$#
if((pcount==0)); then
echo no args;
exit;
fi
#2 獲取文件名稱
p1=$1
fname=`basename $p1`
echo fname=$fname
#3 獲取上級目錄到絕對路徑
pdir=`cd -P $(dirname $p1); pwd`
echo pdir=$pdir
#4 獲取當(dāng)前用戶名稱
user=`whoami`
#5 循環(huán)
for host in 02 03 04; do
echo ----------------- sync hadoop$host --------------
rsync -av $pdir/$fname $user@hadoop$host:$pdir
done
參數(shù) filename 待發(fā)送的文件或目錄名
4.2 測試腳本
[root@localhost ~]# xsync /hadoop/test.txt
----------------- sync hadoop02 --------------
----------------- sync hadoop03 --------------
----------------- sync hadoop04 --------------