서버 간 로그 파일 동기화 프로세스의 속도를 높여야 합니다.
로그를 생성하는 머신(LOGMACHINE)은 다음과 같이 트리에 로그를 생성합니다.
/Files
/Files/LOGS1/
/Files/LOGS1/logFiles/
/Files/LOGS1/logFiles/typeLog1A
/Files/LOGS1/logFiles/typeLog1B
/Files/LOGS1/logFiles/typeLog1C
/Files/LOGS1/logFiles/typeLog1C/fileLog1C-20210113-0900.xml.gz
/Files/LOGS1/logFiles/typeLog1C/fileLog1C-20210113-0915.xml.gz
/Files/LOGS1/logFiles/typeLog1C/fileLog1C-20210113-0930.xml.gz
/Files/LOGS1/logFiles/typeLog2A
/Files/LOGS1/logFiles/typeLog2A/fileLog2A-20210113-0900.xml.gz
/Files/LOGS1/logFiles/typeLog2A/fileLog2A-20210113-0915.xml.gz
/Files/LOGS1/logFiles/typeLog2A/fileLog2A-20210113-0930.xml.gz
/Files/LOGS2/
/Files/LOGS2/logFiles/
/Files/LOGS2/logFiles/typeLog1A
/Files/LOGS2/logFiles/typeLog1B
/Files/LOGS2/logFiles/typeLog1C
/Files/LOGS2/logFiles/typeLog1C/fileLog1C-20210113-0900.xml.gz
/Files/LOGS2/logFiles/typeLog1C/fileLog1C-20210113-0915.xml.gz
/Files/LOGS2/logFiles/typeLog1C/fileLog1C-20210113-0930.xml.gz
/Files/LOGS2/logFiles/typeLog2A
/Files/LOGS2/logFiles/typeLog2A/fileLog2A-20210113-0900.xml.gz
/Files/LOGS2/logFiles/typeLog2A/fileLog2A-20210113-0915.xml.gz
/Files/LOGS2/logFiles/typeLog2A/fileLog2A-20210113-0930.xml.gz
typeLog1*
약 4000개의 폴더 와 9000개의 폴더 가 있습니다 . typeLog2*
각 폴더에는 15분마다 새 파일이 있습니다.
두 대의 서버가 있는데 SERV1은 폴더를 동기화하고 typeLog1*
SERV2는 폴더를 동기화하며 typeLog2*
둘 다 LOGMACHINE에서 동기화합니다. 각 서버는 LOGS1 및 LOGS2 폴더를 동기화합니다.
지금은 이 앱을 사용하고 rsync
있으며 LOGS 폴더 중 하나를 가져오는 데 30분밖에 걸리지 않습니다. 이로 인해 파일당 약 30분~1시간 정도 지연이 발생합니다.
rsync
여러 개를 병렬로 실행하는 솔루션을 생각해 냈습니다. 불행하게도 ssh
병렬로 실행할 수 있는 세션은 8개뿐입니다. 이는 로그가 생성되는 머신의 한계입니다.
한계:
- 나는 사용해야한다
ssh
- 로그가 생성된 컴퓨터에 소프트웨어를 설치할 수 없습니다.
rsync
이 프로세스, 사용 또는 대안의 속도를 높일 수 있는 방법이 있습니까 ?
고쳐 쓰다:
현재의 rsyncs
:
SERV1에서:
rsync -avz --rsync-path=/usr/local/bin/rsync --ignore-existing --delete --files-from=<(ssh user@logmachine 'cd /home/user/Files/LOGS1/logFiles/; find . -mtime -1 -type f -name "*fileLog1*.xml.gz"') user@logmachine:/home/user/Files/LOGS1/logFiles/ Files/LOGS1/logFiles/ rsync -avz --rsync-path=/usr/local/bin/rsync --ignore-existing --delete --files-from=<(ssh user@logmachine 'cd /home/user/Files/LOGS2/logFiles/; find . -mtime -1 -type f -name "*fileLog1*.xml.gz"') user@logmachine:/home/user/Files/LOGS2/logFiles/ Files/LOGS2/logFiles/
SERV2에서:
rsync -avz --rsync-path=/usr/local/bin/rsync --ignore-existing --delete --files-from=<(ssh user@logmachine 'cd /home/user/Files/LOGS1/logFiles/; find . -mtime -1 -type f -name "*fileLog2*.xml.gz"') user@logmachine:/home/user/Files/LOGS1/logFiles/ Files/LOGS1/logFiles/ rsync -avz --rsync-path=/usr/local/bin/rsync --ignore-existing --delete --files-from=<(ssh user@logmachine 'cd /home/user/Files/LOGS2/logFiles/; find . -mtime -1 -type f -name "*fileLog2*.xml.gz"') user@logmachine:/home/user/Files/LOGS2/logFiles/ Files/LOGS2/logFiles/
이 폴더에는 다른 파일도 있기 때문에 파일에서 패턴을 찾는 조건이 필요합니다.
답변1
tar.gz를 사용하여 로그를 압축하고 rsync를 사용하여 복사한 후 복사 프로세스의 타이밍을 확인합니다.
답변2
이 명령을 실행하면 rsync
효율성 에 영향을 줄 수 있습니다.
rsync -avz --rsync-path=/usr/local/bin/rsync --ignore-existing --delete --files-from=<(ssh user@logmachine 'cd /home/user/Files/LOGS1/logFiles/; find . -mtime -1 -type f -name "*fileLog1*.xml.gz"') user@logmachine:/home/user/Files/LOGS1/logFiles/ Files/LOGS1/logFiles/
gz
유형 2 로그를 복제하는 두 번째 서버에 대해 적절하게 수정하여 유형 1 압축 로그에 대해 이 변형을 시도해 볼 것을 권장합니다 .
rsync -av --rsync-path=/usr/local/bin/rsync --delete --prune-empty-dirs --include '*.gz' --include '*/' --exclude '*' user@logmachine:'Files/LOGS1/logFiles/typeLog1*/' Files/LOGS1/logFiles/
최신 파일을 복사하면 다음 실행 시 파일의 일부만 복사 및 업데이트되고 교체되는 것을 볼 수 있습니다. 파일 logmachine
을 즉시 대상 디렉터리 트리로 옮겨 다른 곳에 쓰고 압축하지 않는 이상 파일이 완전히 쓰여졌다는 것을 인식할 방법이 없기 때문이다. 그러나 이미 이 문제가 있으며 더 나쁜 것은 --ignore-existing
업데이트한 파일이 복사되지 않기 때문입니다.
로그가 더 이상 필요하지 않으면 logmachine
사용을 신중하게 고려하세요.--remove-source-files
답변3
"두 번 압축"하면 CPU가 소모되고 전송 속도가 증가하지 않는다는 점을 잊지 마세요.
rsync
플래그를 사용하여 즉시 데이터를 압축하는 것이 가능-z
하지만 "압축 가능한" 데이터(다양한 텍스트, 일부 바이너리 데이터)를 전송할 때만 의미가 있습니다.- 이미 압축된 데이터(gz 파일 등, MP3 파일, JPG 파일 등)는 크기 측면에서 이미 압축/최적화되어 있으며 속도가 향상되지 않고 CPU만 가열됩니다.