Go, Vantage point
가까운 곳을 걷지 않고 서는 먼 곳을 갈 수 없다.
Github | https://github.com/overnew/
Blog | https://everenew.tistory.com/
티스토리 뷰
클라우드 스토리지 도입의 단점
AWS의 S3와 같은 클라우드 스토리지를 사용한다면, 결국 애플리케이션의 코드를 S3 API를 사용하도록 모두 변경해야 한다.
이후에 다른 스토리지 서비스로 변경한다면 또다시 코드의 변경이 필요하다.
이런 단점을 해결하기 위해 기존 Linux의 마운트 기능을 그대로 사용할 수 있는 서비스인 DataSync와 Storage Gateway 사용해 보자.
온프레미스의 NFS
온프레미스의 서버가 없으므로 AWS의 VPC를 하나의 온프레미스 망으로 가정하고 진행해 보자.
현재는 Client server가 NFS Storage server를 사용하고 있다.
이러한 NFS 서버를 직접 관리한다면, 가용성과 백업을 위한 추가적인 비용이 많이 발생하므로 이를 클라우드 스토리지로 전환해 보자.
Client server에서 NFS 서버의 마운트를 진행해 보자.
sudo mount <NFS 서버 IP>:/var/nfs /mnt/nfs
현재 Client server에는 두 디렉터리에 image 파일들이 있다.
폴더의 이미지들을 마운트 폴더로 전송
sudo cp /data/DataSync/*.* /mnt/nfs
NFS 서버에서 전송을 확인해 보자.
온프레미스에 Datasync 적용
DataSync는 온프레미스에서 기존의 시스템을 그대로 이용할 수 있도록 해주면서, AWS 스토리지 서비스 사이에서 데이터 동기화를 진행해 주는 서비스이다.
이를 위해서는 온프레미스에 DataSync 에이전트가 설치되어야 한다.
Datasync EC2 인스턴스를 storage server와 같은 서브넷에 만들자.
AWS가 제공하는 AMI인 aws-datasync를 검색한다.
유형은 t2.xlarge를 사용해야 하니 비용에 주의하자.
Datasync agent가 정상동작을 위한 최소한의 스펙이 맞춰질 필요가 있는 듯하다.
보안 그룹은
DataSync의 보안 그룹의 인바운드는 포트 80(HTTP)을 열어두어야 한다.
Datasync 에이전트 생성을 진행하자.
생성한 EC2에 에이전트를 배포한다.
생성한 datasync의 public ip를 넣어주어서 키를 가져온다.
DataSync 태스크 생성
이제 DataSync를 사용하여, 현재 NFS의 공유 데이터를 S3 버킷으로 복사해 보자.
일단 NFS server에 접속해서 datasync instance로의 경로를 세팅해 주자.
sudo sh -c 'echo "/var/nfs <datasync instance의 private ip>(rw,fsid=2,sync,no_subtree_check)" >> /etc/exports'
#설정 적용
sudo exportfs -a
태스크를 통해 S3로 전송을 세팅한다.
NFS 서버에 마운트 경로로 탑재 경로를 세팅해야 한다.
대상 위치는 s3 버킷으로 해주자.
이제 나머지는 로깅만 끄고 기본 값으로 생성하자.
생성이 끝나면 태스크를 시작해 주자.
이제 시간이 지나면 대상으로 지정한 S3 버킷에 이미지 파일이 10개 생성된다.
하지만 지금 상황에서는 NFS의 데이터가 S3로 백업만 진행되고, S3의 데이터를 직접 사용하진 못하는 상황이다.
S3데이터를 실시간으로 직접 사용하기 위해 Storage GateWay를 설치해 보자.
Storage Gateway File Gateway
기존의 NFS와 DataSync가 Storage Gateway로 대체된다.
Storage Gateway는 항상 데이터를 S3로부터 가져오는 것이 아니라, 볼륨 내부에 캐싱을 하여 더욱 빠른 네트워크 스토리지를 제공할 수 있다.
Storage Gateway를 생성하자.
S3 파일 게이트웨이를 선택한다.
플랫폼은 직접 만든 EC2를 사용하자.
아래의 세팅과 동일하게 맞춰 주자.
OS는 자동으로 선택되어 있다.
인스턴스는 동일하게, t2.xlarge
150GB인 gp2 볼륨을 캐시를 위해 추가한다.
Storage gateway instace를 생성했다면 돌아와서 다음을 누른다.
만들어준 Storage Gateway 인스턴스의 public ip를 넣어주자.
구성에서 잠시 기다려 주자.
이 상태에서 디스크 로드 오류가 발생한다.
해당 게이트웨이에 들어가서 캐시 스토리지 구성을 선택한다.
추가 볼륨을 캐시로 선택한다.
이제 디스크 오류가 해결된다..
구성 완료를 누르자.
완료된 게이트웨이에서 파일 공유 생성을 선택한다.
연결할 S3 버킷을 선택하고 구성 사용자 지정을 누른다.
IAM 역할을 NfsS3AccessPolicyARN로 바꾸어 준다.
해당 역할은 s3 full access 권한이다.
클라이언트를 추가하여 접속 가능한 IP 대역을 설정하고 생성해 준다.
여기 서는 Client server의 IP 대역을 의미한다.
생성된 파일 공유에 들어가자.
아래쪽에 마운트 명령어를 client server에 적용하면 nfs처럼 s3 버킷이 사용된다.
mount -t nfs -o nolock, hard 10.10.2.64:/<대상이 된 S3 버킷> [MountPath]
이제 client에게 접속해서 결과를 확인하자..
기존의 마운트는 원마운트 하고
sudo umount -f /mnt/nfs
새로운 마운트 명령어를 실행한다.
이제 마치 NFS 서버처럼 s3를 사용하게 된다.
sudo mount -t nfs -o nolock,hard 10.10.2.64:/labstack-e846f9fe-0375-4d1d-95c0-8025689-nfsbucket-7dgltcjtdacn /mnt/nfs
정상적으로 마운트가 확인된다.
기존의 버킷의 파일들이 확인된다.
다른 이미지 파일들을 복사시켜 보자.
마운트 된 폴더로 복사
sudo cp /data/FileGateway/*.* /mnt/nfs
S3 버킷에도 파일이 업로드되어있다.
'Cloud > AWS' 카테고리의 다른 글
AWS Database Migration Service (DMS)로 MySQL 마이그레이션하기 (1) | 2024.04.01 |
---|---|
AWS Transit Gateway로 VPC 연결하기 (0) | 2024.03.31 |
AWS VPC 엔드포인트로 S3와 Session Manager 연결 (0) | 2024.03.28 |
AWS EC2로 NAT instance 만들어서 사용하기 (0) | 2024.03.27 |
AWS Bastion host EC2 생성 후 접속하기 (0) | 2024.03.27 |