여러 scp 스레드를 동시에 실행


11

여러 scp 스레드를 동시에 실행 :

배경:

나는 종종 서버 파일 세트를 많이 미러링하고 있으며이 서버 파일에는 수천 개의 작은 1kb-3kb 파일 이 포함되어 있습니다. 모든 서버는 1Gbps 포트에 연결되며 일반적으로 다양한 데이터 센터에 분산됩니다.

문제:

SCP는이 작은 파일들을 하나씩 하나씩 전송하는데, 시간이 오래 걸리며, 내가 가지고있는 아름다운 네트워크 리소스를 낭비하고있는 것 같습니다.

해결책?:

나는 생각이 있었다; 파일을 같은 양으로 나누고 5-6 scp 스레드를 시작하는 스크립트를 작성하면 이론적으로 5-6 배 더 빠릅니다. 그러나 나는 리눅스 스크립팅 경험이 없다!

질문 :

  • 언급 된 문제에 대한 더 나은 해결책이 있습니까?
  • 이미 존재하는 것과 같은 것이 있습니까?
  • 그렇지 않다면 나를 시작하거나 도와 줄 사람이 있습니까?
  • 2 또는 3이 아니라면 리눅스 스크립팅을 배우기 시작하기에 좋은 곳은 어디입니까? bash처럼

답변:


11

나는 이렇게 할 것입니다 :
tar -cf - /manyfiles | ssh dest.server 'tar -xf - -C /manyfiles'

전송중인 파일에 따라 tar명령 에서 압축을 활성화하는 것이 좋습니다 .
tar -czf - /manyfiles | ssh dest.server 'tar -xzf - -C /manyfiles'

ssh명령에 CPU 친숙한 암호 (예 : arcfour) 를 선택하는 것이 좋습니다 . tar -cf - /manyfiles | ssh -c arcfour dest.server 'tar -xf - -C /manyfiles'

또는 둘 다 결합하지만 실제로 병목 현상이 무엇인지에 달려 있습니다. 증분 동기화를 수행하는 경우
분명히 rsync훨씬 빠릅니다.


10

rsync대신에 사용하십시오 scp. 당신은 사용할 수 rsync이상 ssh쉽게뿐 scp"파일 전송의 파이프 라인이 비용을 대기 시간을 최소화하기 위해", 그리고 지원합니다.

한 가지 팁 : 데이터가 압축 가능한 경우 압축을 활성화하십시오. 그렇지 않은 경우 비활성화하십시오.


난 그냥 scp를하고 오전 rsync를 가진 다른 유사한 전송을하고 지난 밤 하나의 전송을했다 - 그것은 것 같다 훨씬 빨리. 그러나 여전히 한 번에 하나의 파일을 전송하는 것으로 보입니다. 스크립트를 통해 여러 스레드를 수행하는 방법에 대한 아이디어 (Beyond --include'ing 및 --exclude ')-스크립트 : sun3.org/archives / 280 )
aendrew

제한된 대역폭으로 인해 여러 파일을 동시에 전송하는 것은 의미가 없습니다. 대역폭이 풍부 할 때는이 명령을 고려하지 않을 것이라고 생각합니다. 작은 파일을 많이 처리 할 때 대기 시간 비용을 제거하면 이미 많은 도움이되었습니다. 여러 파일을 동시에 복사 할 수 있어도 제한된 대역폭으로 인해 파일 전송 속도가 빨라지지 않습니다.
Joe

1

GNO Parallel (아직도 일부 스크립팅 작업이 필요함) 을 제안하려고 했지만 pscp ( pssh의 일부 ) 를 찾았습니다 . 그것은 당신의 필요에 맞을 수도 있습니다.


2
pssh여러 컴퓨터에서 동시에 작동하는 것 같습니다 . 파일 수준 병렬 처리를 구현한다고 생각하지 않습니다.
David Schwartz

아마도 구체적이어야합니다-pscp를 의미했습니다.
Rilindo

1

직접 scp는 아니지만 다중 스레드 전송 (단일 파일에서도) 옵션은 bbcp- https: //www2.cisl.ucar.edu/resources/storage-and-file-systems/bbcp 입니다.

데이터를 전송하려는 스레드 수에 -s 옵션을 사용하십시오. 지연은 스레드 당 TCP 창 크기를 제한하므로 고 대역폭이지만 지연 연결에 적합합니다.


0

아마도 관련이 없지만, 더 실시간을 원한다면 GlusterFS를 사용해보십시오 . 잘 작동하지만 작은 파일을 효율적으로 읽으려면 약간의 조정이 필요합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.