Ansible로 디렉토리를 복사하는 것이 왜 그렇게 느린가요?
Ansible을 사용하여 한 호스트에서 다른 호스트로 디렉터리 (900 개 파일, 136MBytes)를 복사합니다.
---
- name: copy a directory
copy: src={{some_directory}} dest={{remote_directory}}
이 작업은 17 분, 간단한 scp -r <src> <dest>
작업은 7 초가 소요됩니다.
ansible 문서 에 따르면 "ControlPersist가 활성화 된 경우 SSH보다 2-6 배 빠르며 paramiko보다 10 배 빠를 수있는 가속 모드 " 를 사용해 보았지만 아무 소용이 없습니다.
TLDR은 : 사용하는 synchronize
대신 copy
.
copy
사용 중인 명령 은 다음과 같습니다 .
- copy: src=testdata dest=/tmp/testdata/
추측으로 동기화 작업이 느리다고 가정합니다. 파일 모듈 문서는 너무 이것을 의미한다 :
"복사"모듈 재귀 복사 기능은 많은 (> 수백) 파일로 확장되지 않습니다. 대안은 rsync를 둘러싼 래퍼 인 동기화 모듈을 참조하세요.
소스를 파헤쳐 보면 각 파일이 SHA1로 처리된다는 것을 알 수 있습니다. 그는 것 hashlib.sha1을 사용하여 구현 . 로컬 테스트는 900 개의 파일 (400MB의 공간을 차지함)에 대해 10 초 밖에 걸리지 않음을 의미합니다.
그래서, 다음 길. 복사는 module_utils / basic.py의 atomic_move 메소드 로 처리됩니다 . 가속 모드가 도움이되는지 확실하지 않지만 ( 대부분 더 이상 사용되지 않는 기능 임) 파이프 라이닝을 시도 하여 로컬에 넣습니다 ansible.cfg
.
[ssh_connection]
pipelining=True
그것은하지 않았다 표시 도움말; 내 샘플을 실행하는 데 24 분이 걸렸습니다. 파일을 확인하고 업로드하고 권한을 수정 한 다음 다음 파일에서 시작하는 루프가 분명히 있습니다. ssh 연결이 열려 있어도 많은 명령입니다. 줄 사이를 읽는 것은 약간의 의미가 있습니다. "파일 전송"은 파이프 라이닝에서 수행 될 수 없습니다.
따라서 힌트를 따라 synchronize
명령 을 사용하십시오 .
- synchronize: src=testdata dest=/tmp/testdata/
.NET에서도 18 초가 걸렸습니다 pipeline=False
. 분명히 synchronize
명령은이 경우에 갈 길입니다.
synchronize
rsync를 사용 하는 것을 기억 하세요. rsync는 기본적으로 mod-time과 파일 크기입니다. 체크섬을 원하거나 필요 checksum=True
하면 명령에 추가 하십시오. 체크섬이 활성화 된 경우에도 시간은 실제로 변경되지 않았습니다 (여전히 15-18 초). 나는 검사 옵션을 실행하여 켜져 검증 ansible-playbook
에 -vvvv
여기 볼 수 있습니다 :
ok: [testhost] => {"changed": false, "cmd": "rsync --delay-updates -FF --compress --checksum --archive --rsh 'ssh -o StrictHostKeyChecking=no' --out-format='<<CHANGED>>%i %n%L' \"testdata\" \"user@testhost:/tmp/testdata/\"", "msg": "", "rc": 0, "stdout_lines": []}
synchronize
.NET 환경에서는 구성이 어려울 수 있습니다 become_user
. 일회성 배포의 경우 소스 디렉토리를 보관하고 unarchive
모듈을 사용 하여 복사 할 수 있습니다 .
- name: copy a directory
unarchive:
src: some_directory.tar.gz
dest: {{remote_directory}}
creates: {{remote_directory}}/indicator_file
내가 찾은 최고의 솔루션은 폴더를 압축하고 unarchive
모듈을 사용하는 것 입니다.
450MB 폴더가 1 분 만에 완료되었습니다.
unarchive:
src: /home/user/folder1.tar.gz
dest: /opt
synchronize
이 경우는보다 선호 되지만 copy
rsync에 의해 구워집니다. 이는 rsync (클라이언트-서버 아키텍처)의 단점도 남아 있음을 의미합니다. CPU 및 디스크 경계, 대용량 파일에 대한 느린 파일 내 델타 계산 등입니다. 속도가 매우 중요하므로 여러 시스템으로 빠르고 쉽게 확장 할 수있는 피어 투 피어 아키텍처 기반 솔루션입니다. BitTorrent 기반, Resilio Connect와 같은 것.
참조 URL : https://stackoverflow.com/questions/27985334/why-is-copying-a-directory-with-ansible-so-slow
'IT이야기' 카테고리의 다른 글
나머지 세로 공간 채우기-CSS (0) | 2021.04.14 |
---|---|
사설 git 서버 (SSH)를 사용하여 bower 패키지를 설치하는 방법 (0) | 2021.04.14 |
로컬이 아닌 전역 적으로 pip 패키지를 설치 (0) | 2021.04.14 |
'AuthController'를 활성화하는 동안 'Microsoft.AspNetCore.Identity.UserManager'유형에 대한 서비스를 확인할 수 없습니다. (0) | 2021.04.13 |
UISearchController iOS 11 사용자 정의 (0) | 2021.04.13 |