AWS CLI를 통해 기존 IDC 원본 데이터를 S3로 이관한다. (CLI 설치는 아래 참고)
https://aws.amazon.com/ko/cli/
AWS에는 DataSync, Snowball 등 데이터 마이그레이션 서비스들도 있다. 그러나 DataSync의 경우 기존 IDC가 VM 환경이라는 제약이 있고, Snowball은 흠좀무...
수 TB 정도의 데이터 이관을 위해서 언제 또 쓸 지도 모르는 AWS 서비스를 학습할 시간도 아깝고... 무식하지만 심플하게 AWS S3 sync로도 충분하다고 생각한다.
그러나 AWS CLI에는 Rsync가 없기 때문에, 프로세스 확인 후 aws s3 sync를 연속적으로 실행해주는 방식으로 진행했다.
[Linux(CentOS 6.X)]
sync 프로세스가 쓰레드를 이용하기 때문에 쓰레드를 늘려주면 더 효율적이다.
S3 cli 쓰레드 늘리는 설정(10 -> 50~80)
aws configure set default.s3.max_concurrent_requests 20 (default 10)
aws configure set default.s3.max_queue_size 10000
[Dummy 파일 생성 스크립트]
실제 이관 전 더미 파일을 이용해 테스트 하자.
#!/bin/bash
for i in {1..1000}
do
dd if=/dev/zero of=/root/s3_migration/dummy/test_$i bs=10MB count=1
done
4 core / 16 Mem 기준 1 core에서 90% 이상 aws sync 프로세스 점유
쓰레드만 늘려도 평균 50~80MB/s Throughput으로, 하루 5~7TB 데이터 이관이 가능하다.
또한 여러 서버에서 Path 별로 병렬처리 시에 더 빠르게 데이터 이관이 가능하다. 물론 Network, IOPS를 고려해야 한다.
[S3 Sync 스크립트]
#!/bin/bash
while true
do
psCount=$(ps -ef |grep /usr/local/bin/aws)
if [ "$psCount" = 2 ]
then
echo "in progress"
else
sync=$(aws s3 sync /root/s3_migration/ s3://test-lee/ >> ./s3.log)
echo $sync
fi
done
log 파일의 경우 아래와 같이 개행 문자가 깨져서 ^M로 표기될 경우가 있다.
그럴 경우 VI에서 :%s/"Ctrl+V Ctrl+M"/"Ctrl+V Ctrl+M"/g 를 통해 깨진 개행 문자를 수정할 수 있다.
:%s/^V^M/^V^M/g
그럼 아래와 같이 stdout과 동일한 결과 값으로 파일을 수정할 수 있다.
아래와 같이 파일명 캐릭터셋 문제 등으로 업로드 실패가 발생되기도 한다.
upload failed: ../../_vol1/world_new/2019/ucc_6_M\udcf3nica.mp4 to s3://vod.s3.ddv.co.kr/worldvod/2018/ucc_6_M\udcf3nica.mp4 'utf-8' codec can't encode character '\udcf3' in position 21: surrogates not allowed
그럴 경우 디버깅 옵션을 통해 디버깅 로그를 저장하고 확인할 수 있다.
aws s3 sync ./dummy/ s3://leedoit.info/ --debug &>> ./s3_debug.log
S3 Object Count
aws s3 ls s3://s3-cloudtrail-output/ --recursive --summarize | grep "Total Objects:"
CentOS File Count
find . -type f |wc -l
Diff S3, Local(object count, size)
#!/bin/bash
s3_count=$(aws s3 ls s3://leedoit.info/ --recursive --summarize | grep "Total Objects:" |awk '{print $3}')
s3_size=$(aws s3 ls s3://leedoit.info/ --recursive --summarize | grep "Total Size:" |awk '{print $3}')
local_count=$(find /root/s3_migration/dummy/ -type f |wc -l)
local_size=$(du -sb /root/s3_migration/dummy/)
echo "local count: $local_count"
echo "s3 count: $s3_count"
echo "diff count(local-s3): `expr $local_count - $s3_count`"
echo "local size: $local_size"
echo "s3 size: $s3_size "
echo "diff size(local-s3): `expr $local_size - $s3_size`"
S3의 경우 오브젝트 스토리지로 디렉터리 개념이 없기 때문에 리눅스 파일시스템과 정확한 사이즈 비교는 어렵다. 따라서 대략적인 사이즈 비교만 가능하다.
s3 sync의 경우 실행할 때 마다 파일 리스팅이 되기 때문에 root 경로 등 최상위 path에서 실행시키면 동기화 시간이 오래 걸린다.
따라서 마지막 동기화 시간을 줄이기 위해서는 실시간으로 사용되는 최소 path 기준으로 나눠서 cli를 사용하면 더 효율적이다.
(가령 날짜로 디렉터리가 나눠져 있다면, 전체 동기화를 한 번 진행한 후에, 오늘 날짜 디렉터리만 지정해서 sync를 실행)
[ Windows-2008/2012]
# AWS CLI 설치 (Windows 서버 2012 / AWS CLI 설치 파일 지원)
https://docs.aws.amazon.com/ko_kr/cli/latest/userguide/install-windows.html
# AWS CLI 설치 (Windows 서버 2008 / PIP를 설치하고 AWS CLI 설치 필요)
https://docs.aws.amazon.com/ko_kr/cli/latest/userguide/install-windows.html#awscli-install-windows-pip
https://www.python.org/downloads/windows/ (Python 3.7.5)
# script.bat 생성
script.bat 스크립트 내에 aws 명령어 실행 시 루프를 돌지 않고 CMD가 종료되어 별도 awscli.bat 스크립트를 호출하는 방법으로 변경
@ECHO OFF
:while
tasklist | find /I /C "python.exe" > tasklist.log
SET /p Task=<tasklist.log
IF %Task% == 1 (
ECHO.
ECHO [aws s3 sync in progress]
ECHO [aws s3 sync in progress] >> log.txt
ECHO = %date% %time%
ECHO = %date% %time% >> log.txt
ECHO.
) ELSE (
ECHO.
ECHO [Update Waiting]
ECHO [Update Waiting] >> log.txt
START /b CALL awscli.bat
ECHO.
)
TIMEOUT 10
goto :while
# awscli.bat 생성
aws s3 sync C:\root\s3_migration s3://test-sync-test-bucket/
# script.bat 스크립트 실행
- 10초 단위로 aws s3 sync 명령어 실행 / aws s3 sync가 돌고 있지 않을 경우 [Update Waiting] 로깅
- 10초 단위로 aws s3 sync 명령어 실행 / aws s3 sync가 돌고 있을 경우 [aws s3 sync in progress] 로깅
- Bat 스크립트 확인 후 AWS S3 콘솔에서도 정상 업로드 확인
# log.txt (로깅 확인)
'Storage&CDN > S3' 카테고리의 다른 글
Amazon S3 임시 자격 증명(assume_role), Bucket Prefix 별 오브젝트 사이즈 체크 (0) | 2021.03.12 |
---|---|
Amazon S3 Intelligent-Tiering 30초 정리 (0) | 2021.01.19 |
AWS S3 Events(SNS) or CloudWatch Event Trigger(S3 -> SNS) (0) | 2020.03.03 |
Amazon S3-CloudFront Redirect(IDC Content S3로 이관 시) (0) | 2017.04.07 |
Amazon S3FS vs EBS Performance (2) | 2016.01.27 |