集群分發指令碼

2021-10-23 14:57:53 字數 3750 閱讀 4263

(1)scp定義:scp可以實現伺服器與伺服器之間的資料拷貝。(from server1 to server2)

(2)基本語法

scp    -r          $pdir/$fname

$user@hadoop

$host

:$pdir/$fname

命令 遞迴 要拷貝的檔案路徑/名稱 目的使用者@主機:目的路徑/名稱

注意

如果目標目錄不存在,直接將源test放到opt目錄下

scp -r test/ root@hadoop102:/opt/目標目錄/
如果目標目錄存在,將源test放到opt/test目錄下

scp -r test/ root@hadoop102:/opt/目標目錄/
將源內容直接拷貝到目標目錄下

scp -r test/* root@hadoop102:/opt/目標目錄/
(3)案例實操

(a)在hadoop101上,將hadoop101中/opt/module目錄下的軟體拷貝到hadoop102上。

scp -r /opt/module root@hadoop102:/opt/module

(b)在hadoop103上,將hadoop101伺服器上的/opt/module目錄下的軟體拷貝到hadoop103上。

sudo

scp -r atguigu@hadoop101:/opt/module root@hadoop103:/opt./module

(c)在hadoop103上操作將hadoop101中/opt/module目錄下的軟體拷貝到hadoop104上。

scp -r atguigu@hadoop101:/opt/module root@hadoop104:/opt/module

注意:拷貝過來的/opt/module目錄,別忘了在hadoop102、hadoop103、hadoop104上修改所有檔案的,所有者和所有者組。sudo chown atguigu:atguigu -r /opt/module

(d)將hadoop101中/etc/profile檔案拷貝到hadoop102的/etc/profile上。

sudo

scp /etc/profile root@hadoop102:/etc/profile

(e)將hadoop101中/etc/profile檔案拷貝到hadoop103的/etc/profile上。

sudo

scp /etc/profile root@hadoop103:/etc/profile

(f)將hadoop101中/etc/profile檔案拷貝到hadoop104的/etc/profile上。

sudo

scp /etc/profile root@hadoop104:/etc/profile

注意:拷貝過來的配置檔案別忘了source一下/etc/profilersync主要用於備份和映象。具有速度快、避免複製相同內容和支援符號鏈結的優點。

rsync和scp區別:用rsync做檔案的複製要比scp的速度快,rsync只對差異檔案做更新。scp是把所有檔案都複製過去。

(1)基本語法

rsync    -rvl       $pdir/$fname

$user@hadoop

$host

:$pdir/$fname

命令 選項引數 要拷貝的檔案路徑/名稱 目的使用者@主機:目的路徑/名稱

選項引數說明
(2)案例實操

把hadoop101機器上的/opt/software目錄同步到hadoop102伺服器的root使用者下的/opt/目錄

rsync -rvl /opt/software/ root@hadoop102:/opt/software

3.xsync集群分發指令碼

(1)需求:迴圈複製檔案到所有節點的相同目錄下

(2)說明:在/home/使用者名稱/bin這個目錄下存放的指令碼,該使用者可以在系統任何地方直接執行。

(3)指令碼實現

(a)在/home/使用者名稱目錄下建立bin目錄,並在bin目錄下xsync建立檔案

#!/bin/bash

# 引數說明

# $1 ==> 要拷貝的檔案的絕對路徑

# $2 ==> 主機起始尾號,如hadoop101中的101

# $3 ==> 主機結束尾號,如hadoop103中的103

# 使用方法示例

# xsync /home/guapi/a.txt 101 103

#1 獲取輸入引數個數,如果沒有引數,直接退出

pcount=$#if[

$pcount -ne 3 ]

;then

echo

"args count no correct"

;exit;fi

#2 獲取檔名稱

p1=$1

onlyfilename=

`basename $p1`

echo

"file name : $onlyfilename"

pdir=

`cd -p $(dirname $p1)

;pwd

`echo

"dir : $pdir"

#4 獲取當前使用者名稱

user=

`whoami

`#5 迴圈

for((host=$2

;host<=$3

;host++));

doecho

"********** hadoop$host **********"

rsync -rvl $pdir/$onlyfilename

$user@hadoop

$host

:$pdir

done

(b)修改指令碼 xsync 具有執行許可權

chmod 777 xsync
注意:如果將xsync放到/home/使用者名稱/bin目錄下仍然不能實現全域性使用,可以將xsync移動到/usr/local/bin目錄下。

生成公鑰和私鑰

ssh-keygen -t rsa
將公鑰拷貝到要免密登入的目標機器上

ssh-copy-id hadoop103

ssh-copy-id hadoop104

注意:ssh訪問自己也需要輸入密碼,所以我們需要將公鑰也拷貝給102

ssh-copy-id hadoop102
以ssh方式執行遠端命令時,是nologin的,那麼此方式不會載入/etc/profile,而是載入/etc/bashrc,參考

所以,在使用ssh執行遠端命令的時候會遇到shell指令碼找不到的問題,把環境變數配到/etc/bashrc即可

集群分發指令碼

分發指令碼使用前提 需要讓linux01機器知道linux02和linux03代表的是哪個ip 1 在 usr local bin目錄下建立xsync檔案,檔案內容如下 cd usr local bin vim xsync bin bash 1 獲取輸入引數個數,如果沒有引數,直接退出 pcount...

xsync集群分發指令碼

作用 迴圈複製檔案到所有節點的相同目錄下 第一步cd home 使用者名稱 bin touch xsync vi xsync注意 如果將xsync放到 home 使用者名稱 bin目錄下仍然不能實現全域性使用,可以將xsync移動到 usr local bin目錄下。第二步 bin bash 1 獲...

集群分發指令碼 xsync

1.scp secure copy 安全拷貝 1 scp定義 scp可以實現伺服器與伺服器之間的資料拷貝。from server1 to server2 2 基本語法 scp r pdir fname user hadoop host pdir fname 命令 遞迴 要拷貝的檔案路徑 名稱 目的使...