2020. 3. 17. 09:57ㆍAWS/AWS_Service
안녕하세요, 달콤한달팽이입니다.🐌🙃
오늘은 AWS EC2 Instance에 볼륨 스토리지에 대하여 알아보겠습니다.
EBS란?
EBS란, AWS EC2 인스턴스에 연결하는 스토리지 볼륨을 의미합니다.
EBS는 아래와 같은 특징이 있습니다!
1) EC2 인스턴스를 제거해도 데이터가 독립적으로 유지됩니다.
2) EC2 인스턴스에 영향을 주지 않은 채 동적으로 크기, 타입 등의 변경이 가능합니다.
3) 특정 시점의 데이터를 S3에 저장할 수 있습니다.
1) EC2 인스턴스 생성
앞서 말했듯, EBS는 EC2 인스턴스에 연결된 상태로 사용하기 때문에 인스턴스가 우선적으로 필요합니다.
인스턴스의 "스토리지" 탭을 통해 현재 연결되어있는 볼륨에 대한 정보를 확인할 수 있습니다.
제가 실습용으로 준비한 서버에는 하나의 볼륨이 연결되어 있으며, 크기는 30GiB입니다!
볼륨의 ID를 선택하면 해당 볼륨에 대한 더욱 자세한 정보를 확인할 수 있습니다.
2) EBS 볼륨 부착
사실 인스턴스만 만들어도, 루트 볼륨(vol-05xxx)가 연결되어 있기 때문에 EBS는 이미 사용하고 있는 것과 동일합니다.
하지만 루트 볼륨의 경우 사용량이 100%에 도달하게 될 경우 서버가 떨어지는 현상이 발생하여 주의해야합니다.
이제 그런 일이 발생하지 않도록 서브 볼륨을 생성하고, 부착해보도록 합시다.
우선 "EC2 - 볼륨 - 볼륨 생성" 탭을 통하여 볼륨을 생성해주세요.
여기서 살펴봐야할 사항은 아래 세 가지 옵션입니다.
1) 볼륨 유형: EBS에서 사용 가능한 볼륨의 타입으로, gp2, gp3, io1/io2, st1, sc1이 존재합니다.
(일반적으로 gp3를 사용하며 이유는 1GiB당 3 IOPS를 제공하는 gp2에 비해 기본 3,000 IOPS를 제공하며 가격/성능도 준수하기 때문)
2) IOPS: 초당 수행 가능한 입출력 작업의 수를 의미합니다. IOPS가 높을수록 애플리케이션 성능이 향상됩니다.
3) 처리량: 데이터가 전송되는 속도를 의미합니다. 처리량이 높을수록 초당 읽거나 쓰는 데이터 양이 늘어납니다.
이제 우측 상단의 "작업 - 볼륨 연결"을 통해 볼륨과 인스턴스를 연결해주세요.
3) 서버 마운트
이제 EBS를 연결한 EC2에 접속하여, EBS를 마운트하는 과정을 실습해보겠습니다.
서버에 접속하여 물리적으로 볼륨이 부착되었는지 확인해주세요.
$ lsblk
이제 EBS 볼륨의 파일 시스템을 포맷해주세요.
이번 실습에서는 성능이 준수하여 가장 널리 사용되는 ext4 타입으로 포맷해보겠습니다.
파일 시스템을 포맷하는 이유는 데이터 구조화 및 운영 체제와의 호환성 때문입니다!
1) 데이터 구조화: 데이터를 블록 단위로 저장하는 EBS에 호환될 수 있는 데이터 구조로 포맷
2) 운영 체제 호환성: Linux는 ext4, xfs, btrfs 등이 사용 가능하며, Windows는 NTFS를 사용하므로 이를 인식하도록 포맷
$ mkfs -t ext4 /dev/sdb
이제 원하는 경로에 마운트를 수행해주세요.
$ mkdir mount_ext4
$ mount /dev/sdb mount_ext4
$ lsblk
4) 볼륨 파티셔닝
EBS 볼륨을 사용하기 위해선 파티셔닝이 필요할 때가 있습니다.
때문에 앞서 마운트한 볼륨 파티셔닝 해보도록 하겠습니다.
gdisk에서 물어보는 질문은 다음과 같습니다.
1) Command: 어떤 커맨드를 실행할지 선택합니다.(n: 입력 / w: 저장)
2) Partition number: 파티션 번호를 지정합니다.
3) First, Last sector: 파티션이 사용할 디스크 섹터를 지정합니다.
4) Hex code or GUID: 파티션의 파일 시스템 유형을 지정합니다. (8300 = ext4)
$ gdisk /dev/sdb
---
GPT fdisk (gdisk) version 0.8.10
Partition table scan:
MBR: not present
BSD: not present
APM: not present
GPT: not present
Creating new GPT entries.
Command (? for help): n
Partition number (1-128, default 1): 1
First sector (34-20971486, default = 2048) or {+-}size{KMGTP}:
Last sector (2048-20971486, default = 20971486) or {+-}size{KMGTP}:
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): 8300
Changed type of partition to 'Linux filesystem'
Command (? for help): w
이제 다시 디스크를 확인해보면 파티셔닝이 되었음을 확인할 수 있습니다.
$ lsblk
하지만 이후 파티션의 파일시스템이 초기화되어 아래의 명령어를 통해 다시 파일시스템을 설정해주세요.
$ mkfs.ext4 /dev/nvme3n1p1
$ file -s /dev/nvme3n1p1
이후 다시 원하는 경로에 마운트를 수행해주면 정상수행되는 것을 확인할 수 있습니다.
$ mount /dev/nvme3n1p1 mount_ext4/
$ df -hT
$ lsblk
5) 볼륨 확장
이번에는 기존 볼륨을 확장하는 방법에 대하여 알아보겠습니다.
우선 AWS 콘솔의 "EC2 - 볼륨 - 볼륨 선택 - 작업 - 볼륨 수정"탭에서 앞서 마운트한 볼륨의 크기를 수정해주겠습니다.(10GiB > 20GiB)
(**주의 : 볼륨은 줄이는 것은 불가능하고 확장시킬수만 있으며, 한 번 수정한 후 6시간이 지나야 추가 수정이 가능합니다.)
서버에서 확인해보면, 블록 디바이스 크기는 20GB로 늘어났지만 파일 시스템 확장을 진행하지 않아 그대로임을 알 수 있습니다.
$ lsblk
$ df -hT
이제 파일 시스템을 확장하여 파일시스템에도 확장된 볼륨을 적용시켜주세요.
(**주의: 파일 시스템의 종류에 따라 명령어를 주의해주세요!)
$ growpart /dev/nvme3n1 1
$ resize2fs /dev/nvme3n1p1
$ lsblk
$ df -hT
---
## XFS 파일시스템일 경우
#xfs_growfs -d /
##EXT4 파일시스템일 경우
# resize2fs /dev/nvme3n1p1
이제 정상적으로 확장된 것을 확인할 수 있습니다.
6) 서버 영구 마운트
이렇게 마운트된 볼륨은 EC2를 정지/재시작하게 될 경우 해제되는 문제가 발생합니다.
다시 볼륨 마운트를 수행하는 번거로움을 없애기 위해, 아래의 설정을 추가로 진행할 필요가 있습니다.
우선 볼륨의 UUID를 확인해주세요.
$ lsblk
$ blkid | grep nvme1n1
이제 볼륨 마운트를 담당하는 경로로 이동하여 새로 마운트한 볼륨 정보를 기입해주세요.
(** 주의: 해당 파일을 잘못 수정할 경우 서버 자체가 고장날 수 있으니 주의해서 작성하셔야해요!)
/etc/fstab에는 아래와 같은 정보를 기입해야 합니다.
1) UUID: 특정 파일 시스템 고유 ID
2) 마운트 경로: 해당 파일 시스템이 마운트된 경로 지정 (/mount_ext4)
3) 파일 시스템 유형: 파일 시스템의 유형 지정(ext4)
4) 마운트 옵션: defaults = 기본 마운트 옵션(읽기/쓰기, 자동마운트 등 포함), noatime = 파일 접근 시간 업데이트 미포함(defaults,noatime)
5) 파일 시스템 검사 순서 : 1은 부팅 시 가장 먼저 검사되어야 하는 순서 의미(1)
6) 백업 여부 : 0은 백업 미진행, 1은 백업 진행
$ vi /etc/fstab
---
UUID=97425da6-ad0b-46ef-bc1b-e0a5195fb512 /mount_ext4 ext4 defaults,nofail 0 0
이제 EC2 재부팅 후에도 정상적으로 마운트되어있는 것을 확인하실 수 있습니다!
지금까지 EBS에 대하여 알아보고, 활용하는 방법에 대하여 알아보았습니다.
감사합니다!
'AWS > AWS_Service' 카테고리의 다른 글
[AWS] ELB(Elastic Load Balancer) - ALB (0) | 2020.03.19 |
---|---|
[AWS] AMI 등록하고 사용하기 (0) | 2020.03.18 |
[AWS] S3 사용하기 (0) | 2020.03.16 |
[AWS] 다른 네트워크와 통신하기(2) - VPN (1) | 2020.03.11 |
[AWS] 다른 네트워크와 통신하기(1) - VPC Peering (0) | 2020.03.10 |