で以下のシェルスクリプトを実行すると、ファイルがコピーされますmachineB
。machineC
machineA
machineA
ファイルがない場合はmachineB
明らかに存在する必要があるので、machineC
まずファイルをコピーしてみてください。そうでない場合は同じファイルをコピーしてみましょう。machineB
machineB
machineC
私はGNUパラレルライブラリを使ってファイルをパラレルにコピーしていますが、うまくいきます。現在、10個のファイルを並列にコピーしています。
以下は私のシェルスクリプトです -
#!/bin/bash
export PRIMARY=/test01/primary
export SECONDARY=/test02/secondary
readonly FILERS_LOCATION=(machineB machineC)
export FILERS_LOCATION_1=${FILERS_LOCATION[0]}
export FILERS_LOCATION_2=${FILERS_LOCATION[1]}
PRIMARY_PARTITION=(550 274 2 546 278) # this will have more file numbers
SECONDARY_PARTITION=(1643 1103 1372 1096 1369 1568) # this will have more file numbers
export dir3=/testing/snapshot/20140103
find "$PRIMARY" -mindepth 1 -delete
find "$SECONDARY" -mindepth 1 -delete
do_Copy() {
el=$1
PRIMSEC=$2
scp david@$FILERS_LOCATION_1:$dir3/new_weekly_2014_"$el"_200003_5.data $PRIMSEC/. || scp david@$FILERS_LOCATION_2:$dir3/new_weekly_2014_"$el"_200003_5.data $PRIMSEC/.
}
export -f do_Copy
parallel --retries 10 -j 10 do_Copy {} $PRIMARY ::: "${PRIMARY_PARTITION[@]}" &
parallel --retries 10 -j 10 do_Copy {} $SECONDARY ::: "${SECONDARY_PARTITION[@]}" &
wait
echo "All files copied."
問題の説明:-
上記のスクリプトをある時点で(毎回ではない)使用すると、次の例外が発生します。
ssh_exchange_identification: Connection closed by remote host
ssh_exchange_identification: Connection closed by remote host
ssh_exchange_identification: Connection closed by remote host
このエラーは、通常、同時に多くのssh / scpを起動したために発生するようです。これにより、/etc/ssh/sshd_config:MaxStartups と MaxSessions が低すぎると思われます。
しかし、私の質問はどのサーバーでかなり低いですか?machineB
そしてmachineC
/またはmachineA
?どのマシンで数量を増やす必要がありますか?
machineA
私が見つけたものは次のとおりです。すべてコメントアウトされています。
root@machineA:/home/david# grep MaxStartups /etc/ssh/sshd_config
#MaxStartups 10:30:60
root@machineA:/home/david# grep MaxSessions /etc/ssh/sshd_config
私が見つけたmachineB
のはこれです -machineC
[root@machineB ~]$ grep MaxStartups /etc/ssh/sshd_config
#MaxStartups 10
[root@machineB ~]$ grep MaxSessions /etc/ssh/sshd_config
#MaxSessions 10
答え1
このコードを正しく理解したら、これが問題だと思います。
do_Copy() {
el=$1
PRIMSEC=$2
scp david@$FILERS_LOCATION_1:$dir3/new_weekly_2014_"$el"_200003_5.data \
$PRIMSEC/. || \
scp david@$FILERS_LOCATION_2:$dir3/new_weekly_2014_"$el"_200003_5.data \
$PRIMSEC/.
}
export -f do_Copy
parallel --retries 10 -j 10 do_Copy {} \
$PRIMARY ::: "${PRIMARY_PARTITION[@]}" &
parallel --retries 10 -j 10 do_Copy {} \
$SECONDARY ::: "${SECONDARY_PARTITION[@]}" &
wait
20個を並列に実行しますscp
が、システムBとCは10個しか処理できません。
#MaxStartups 10
私はその平行線を5に戻して問題が解決することを確認します。機械BとCの数量を増やすには、MaxStartups
次のこともできます。
MaxStartups 15
そしてsshd
BとCでサービスを再起動する必要があります。
$ sudo service sshd restart
構成ファイルの変更の確認
sshd
テストモードでスイッチを実行して、正常に動作していることを再確認できます-T
。
$ sudo /usr/sbin/sshd -T | grep -i max
maxauthtries 6
maxsessions 10
clientalivecountmax 3
maxstartups 10:30:100
答え2
--sshdelay または --filter-hosts の使用を検討してください。