중앙 시스템의 데이터를 주변 시스템에서 가공하여 서비스하는 구조를 가지고 있었고, 이를 위해 파일 데이터에 대한 동기화가 필요하였다. 이를 처리하기 위해 AWS CLI 를 활용하였고, 처리 속도의 한계점을 발견하고 Rclone을 활용하여 구축했던 과정을 기술하였다.
AWS-CLI CUSTOMIZATION
s3 =
max_concurrent_requests = 100
max_queue_size = 10000
multipart_threshold = 64MB
multipart_chunksize = 128MB
- 파일 사이즈는 작으나 파일 개수가 무수히 많고, Remote 와 Local 의 비교 시간이 오래 걸렸다.
- AWS-CLI CUSTOMIZATION 은 Upload, Download 의 속도와 관련된 부분을 설정하였다.
- 단순히 파일이 많아 비교하고 다운하고 disk 에 쓰는 과정은 병렬 처리 외에 다른 방법이 없다고 판단하였다.
AWS-CLI 는 병렬처리에 좋을까?
MAX Concurrent Connection 을 늘렸지만 실제 Process 는 메인 스레드 하나만 아래와 같이 사용하는 모습이다.
병렬처리에 유용한 Tool 은 없을까?
RCLONE DOCUMENT https://rclone.org/docs/
Documentation
© Nick Craig-Wood 2014-2025 Source file docs.md last updated 2024-09-04 Uploaded with rclone. Built with Hugo. Logo by @andy23. Served by Caddy. Hosted at Hetzner Cloud.
rclone.org
RCLONE (AWS → LOCAL 전체 COPY : 15m)
모든 프로세스들이 병렬로 쪼개지며 CPU 팍팍 쓰면서 파일을 복제해 온다.
Jenkins Pipeline
pipeline {
agent any
stages {
stage('AWS->Server') {
steps {
script {
def filePath = "{nas mount 경로}/workspace/cloud/rclone-log/sync-with-rclone#${currentBuild.number}.log"
// AWS 인증 정보 설정
sh """
echo '==== aws -> sever download start ====' >> ${filePath}
rclone copy {rclone profile}:{bucket이름} {nas mount 경로}/workspace/cloud/sync-prod --transfers 100 --checkers 100 --log-file=${filePath} --log-level INFO
echo '==== aws -> sever download end ====' >> ${filePath}
"""
SendInfraMsg(1, "SYNC DONE")
}
}
}
stage('Server->NCP DEV') {
steps {
script {
def filePath = "{nas mount 경로}/workspace/cloud/rclone-log/sync-with-rclone#${currentBuild.number}.log"
sh """
echo '==== sever -> ncp dev upload start ====' >> ${filePath}
rclone copy {nas mount 경로}/workspace/cloud/sync-prod {rclone profile}:{bucket이름} --transfers 100 --checkers 100 --log-file=${filePath} --log-level INFO
echo '==== sever -> ncp dev upload end ====' >> ${filePath}
"""
SendInfraMsg(1, "SYNC DONE")
}
}
}
}
}
이슈 및 고려사항
too many open files
2024/06/24 13:37:21 ERROR : upload_ncp3/1/article/11754: error reading source directory: failed to open directory "upload_ncp3/1/article/11754": open /home/manageuser/s3_test/rclone-aws/upload_ncp3/1/article/11754: too many open files
2024/06/24 13:37:21 ERROR : upload_ncp4/1/article/11552: error reading source directory: failed to open directory "upload_ncp4/1/article/11552": open /home/manageuser/s3_test/rclone-aws/upload_ncp4/1/article/11552: too many open files
파일을 읽고 쓰는데 제한이 걸려 있어서 위와 같은 에러가 난다
prlimit # 확인 명령어
ulimit -n 4096 # file descriptor 제한 증가 (4배)
한계점
빨라서 좋은데 시스템 자원을 다 뺏어 먹어서 Jenkins 파이프라인 수행 소요시간이 증가하여 이슈 발생 여지가 있어 보였다.
Jenkins 부하 분산 시스템을 도입하였다.

https://www.jenkins.io/doc/book/using/using-agents/
Using Jenkins agents
Jenkins – an open source automation server which enables developers around the world to reliably build, test, and deploy their software
www.jenkins.io
pipeline {
stages {
stage('AWS->Server') {
agent {
label 'node-001' # node 생성시 설정한 이름
}
steps {
script {
...
}
}
}
stage('Server->NCP DEV') {
agent {
label 'node-002' # node 생성시 설정한 이름
}
steps {
script {
...
}
}
}
}
}
'Cloud' 카테고리의 다른 글
[Locust] 대시보드 커스텀 (feat. websocket 부하테스트) (0) | 2025.01.31 |
---|---|
[K8S] Pod Health Check (feat. 부하테스트) (1) | 2025.01.31 |
[Kafka] CDC 인프라 구축 (feat. ksql) (0) | 2025.01.18 |
[Kafka] CDC 초기화 Script (0) | 2025.01.18 |
[Kafka] Message size 제한 이슈 대응기 (0) | 2025.01.18 |
댓글