AWS DataSync 개념 및 간단한 사용 예시
AWS DataSync
DataSync 서비스는 DataSync 에이전트를 통해 온프레미스 혹은 AWS 클라우드의 스토리지 서버(혹은 스토리지 서비스)에서 AWS의 또 다른 스토리지 서비스로 데이터를 동기화하는 서비스입니다.
온프레미스의 데이터를 AWS 스토리지 서비스로 복사
AWS EFS에서 또다른 AWS EFS로 데이터 복사
특이한 점은 DataSync 만을 위한 별도의 에이전트를 온프레미스 환경 혹은 AWS 환경에 배포해야한다는 점으로, 소스 데이터는 DataSync 에이전트를 통해 AWS 스토리지로 동기화됩니다. 온프레미스에 DataSync 에이전트를 배포하기 위해서 DataSync 에서는 ESXi, KVM, Hyper-V 방식의 하이퍼바이저에서 구동될 DataSync 에이전트 이미지를 제공하고 있습니다. 또한 AWS 환경에 DataSync 에이전틀르 배포하기 위해 DataSync 에이전트 전용 AMI 이미지로 EC2 인스턴스를 생성하도록 안내하고 있습니다.
AWS 문서에 따르면 온프레미스의 데이터를 DataSync 를 통해 동기화하기 위해서는 온프레미스-AWS 인프라로의 진입 거리를 최소화해야 AWS에서 개발한 가속 프로토콜을 이용하여 최대한의 속도를 낼 수 있기에 DataSync 에이전트를 온프레미스 소스 스토리지와 근접한 곳에 배포할 것을 권장하고 있습니다.
DataSync 사용 방법 및 데이터 동기화 테스트
웹서버의 데이터는 아래와 같이 AWS EFS로 동기화됩니다.
토스트 클라우드(웹서버) -> DataSync 에이전트(EC2) -> AWS EFS
1) 테스트 서버 구축
데이터 동기화 테스트를 위해 토스트 클라우드 상에 APM으로 구성된 테스트 서버(자빅스 서버)를 구성하였습니다. 토스트 클라우드 환경을 온프레미스 환경이라고 가정하고 데이터 동기화를 진행할 예정입니다.
추가로 DataSync 에이전트가 테스트 서버의 데이터를 가져갈 수 있도록 하려면 nfs-utils 를 이용하여 nfs 서비스를 활성화해야합니다. TCP 2049 포트에 대한 접근을 허용하고 아래와 같이 nfs를 위한 export 파일을 생성합니다. (자빅스 웹데이터를 동기화하기 위해 /usr/share/zabbix 디렉토리를 잡아줍니다)
yum install -y nfs-utils
cat << EOF > /etc/exports.d/zabbix.exports
/usr/share/zabbix *(rw,async,all_squash)
EOF
(* 부분을 추후 설정할 EC2 에이전트의 아이피로 설정하는 것이 보안상 좋습니다)
2) DataSync 에이전트 배포
https://docs.aws.amazon.com/ko_kr/datasync/latest/userguide/deploy-agents.html#ec2-deploy-agent
AWS 문서에서 가이드하는 방법에 따라 EC2 인스턴스에 DataSync 에이전트를 배포합니다. DataSync 에이전트를 구동하기 위한 최소 사양은 4GB 메모리 이상, 80GB 블록스토리지 이상입니다. (소량의 데이터를 동기화하기 위해 DataSync 서비스를 이용하는게 합리적이지 않다고 생각이 드는 점입니다)
DataSync 에이전트를 위한 별도의 AMI를 통해 인스턴스가 실행되는 모습입니다. 생성된 인스턴스로 SSH를 접속해보면 DataSync 에이전트로서의 기능만 수행할 수 있도록 구성된 것을 확인할 수 있습니다.(기본 접속 계정명 admin)
3) EFS 볼륨 생성
토스트 클라우드 상의 테스트 서버로부터 DataSync 에이전트를 통해 데이터를 전달 받을 EFS 볼륨 스토리지를 생성합니다.
4) DataSync 에이전트 등록
AWS 콘솔의 DataSync 페이지로 이동하여 Agents 항목의 Create Agent 버튼을 눌러 EC2 인스턴스로 생성한 DataSync 에이전트를 등록 및 활성화합니다. DataSync 에이전트 인스턴스의 아이피주소를 입력하면 아래와 같이 Activation key(인증키) 가 생성된 것을 확인할 수 있습니다.
5) 소스 Locations 등록
데이터 동기화를 수행할 소스 스토리지와 대상 스토리지를 설정합니다. AWS 콘솔의 DataSync 페이지로 이동하여 Locations 항목의 Create Location 버튼을 클릭하여 새 로케이션을 생성합니다. 로케이션으로 등록 가능한 로케이션 타입은 아래와 같습니다.
로케이션 등록 예시입니다. 133.186.220.42 아이피주소는 토스트 클라우드 상에 구성된 테스트 서버의 아이피입니다.
6) 대상 Locations 등록
에이전트로부터 데이터를 전달받아 저장할 대상 로케이션을 등록합니다.
7) Task(동기화 작업) 등록
구성한 로케이션을 이용하여 동기화 작업을 설정합니다. 동기화 작업은 1회성 혹은 수동실행이 가능하며, 스케줄링을 통해 자동 동기화 설정이 가능합니다. (스케줄링의 경우 최소 동기화 간격이 1시간으로 제한적입니다) 소스 로케이션 및 대상 로케이션을 선택합니다.
다음은 옵션 및 스케줄링 관련 설정입니다. 필요에 따라 설정하며, 특정 파일이나 디렉토리를 제외하거나 하는 설정을 추가할 수 있습니다.
스케줄링의 경우 아래와 같은 옵션으로 선택 가능하며, Custom 으로 선택 시 cron 포맷으로 동기화 간격을 입력할 수 있습니다.
8) 동기화 실행
EFS로 동기화되는 데이터를 확인하기 위해 별도의 EC2 인스턴스 생성하여 EFS 볼륨을 마운트합니다. 현재는 아무런 데이터도 없는 것을 확인할 수 있습니다.
아래는 토스트 클라우드 상의 테스트 서버의 데이터 용량입니다.
DataSync 에 생성한 Task의 start 버튼을 눌러 수동 동기화를 진행해봅니다.
History 항목에서는 현재 수행 중인 Task 및 상세 정보를 확인 가능합니다.
정상적으로 작업이 완료된 것을 확인하고 EFS를 마운트한 EC2 인스턴스에서 데이터를 확인합니다. (파일시스템 타입에 따라 블록사이즈가 다르기 때문에 약간의 용량 차이는 발생할 수 있습니다)
개인적인 의견
AWS DataSync 서비스를 이용하여 데이터를 동기화하기 위해서는 별도의 VM 혹은 EC2 인스턴스를 이용하여 에이전트를 배포해야하며, 에이전트의 기본 권장사양의 스펙이 높은 편입니다. 때문에 소량의 데이터를 동기화하기 위한 목적으로는 적합하지 않다는 생각이 들었으며, 대량의 데이터를 가지고 있는 스토리지를 AWS 환경으로 동기화하기 위한 용도로 적합해보입니다. 또한 데이터 동기화를 위한 스케줄링 구성 시 최소 동기화 간격이 1시간이기 때문에 데이터의 실시간 동기화/복제가 필요한 서비스에는 적합하지 않을 것으로 생각됩니다.