1. 블록 스터리지 리소스 제어를 위한 기본 API
1. 블록 스토리지 리소스
- 볼륨: 실제 서버에 연결되는 디스크. 휘발되지 않고 영속적으로 보관
- 스냅샷: 볼륨을 복제한 것. 스냅샷 자체로는 서버에 직접 연결은 불가. 주로 백업이나 데이터를 이행할 때 사용
2. 블록 스토리지와 API
- 클라우드 환경에서의 외부 디스크 추가
- 오픈 스택
- cinder: 블록 스토리지 제어하는 명령어
- nova: 가상 서버를 다루기 위한 명령어
- AWS
- EBS(Elastic Block Storage), 이 스토리지를 제어하는 명령은 ec2 명령에 포함되어 있음
- 명령을 실행하면 그 내부에서 AWS의 각종 API들이 실행
3. 블록 스토리지 제어하기 위한 API 처리 흐름
- 볼륨 생성
- 사용자는 내부 물리적인 스토리지 장치에 대해서는 알 필요가 없음
- API 실행 시 옵션에 따라 적절한 볼륨이 생성.
- 백엔드 기능이 추상화 되고 세부적인 처리는 숨겨지기 때문에 사용자 관점에서는 API의 사용법만 익히면 인프라 구성 가능
- 실행한 API는 POST 방식을 사용한 리소스제어이기 때문에 가상 서버와 마찬가지로 비동기로 진행
- AWS EBS를 사용할 경우에는 가상 서버와 블록 스토리지가 같은 EC2 서비스에 포함되어 있기 때문에 API를 제공하는 엔드포인트가 동일
- 볼륨과 가상 서버의 연결
- 볼륨과 가상 서버를 연결하는 작업 → Attach
- 조작은 POST 방식으로 요청되어 비동기로 처리되기 때문에 API 호출 직후에 응답이 왔다고 하더라도 그 시점에는 연결이 완전히 끝난 상태가 아닐 수 있음
- 볼륨과 가상 서버의 연결이 실패한 경우, 에러 상태를 보고 성공 여부를 확인할 수 있음(주로 자주 발생하는 에러 유형은 서버와 볼륨이 서로 다른 가용 영역에 생성된 경우)
- 볼륨 타입
- 블록 스토리지의 백엔드는 물리적 디스크. 그래서 디스크의 특성과 설정에 따라 I/O 특성도 달라짐
- AWS EBS를 사용하는 경우에는 물리적 디스크 사양정보가 사용자에게 노출되지 않음. AWS가 미리 정의해둔 디스크 타입에서 볼륨을 선택
- Magnetics, SSD(GP2), Provisioned IOPS 이 세 종류 중에서 원하는 것을 고를 수 있음
- 볼륨 사이즈
- 볼륨 사이즈는 볼륨 생성 시점에 결정
- 블록 디바이스 특성상 가상 서버의 OS에서 파일 시스템으로 인식되는 용량 까지만 사용 가능(ex. 1TB 디스크를 연결하더라도 파일 시스템에서 500GB만 할당했다면 가상 서버의 OS에서는 500GB만 사용 가능)
- 볼륨은 디바이스 단위로 연결되기 때문에 OS에서 여러 디바이스를 사용한 소프트웨어 RAID를 구성할 수 있음
- 볼륨의 용량은 무한이 아님. AWS EBS의 경우 서비스에 따라 상한 값이 정해져 있음. Magnetic타입을 제외하고는 하나의 EBS 볼륨 당 16TB 용량이 상한 값으로 설정되어 있음
- 스루풋, IOPS, SR-IOV
- 클라우드 환경에서는 가상 서버 리소스가 블록 스토리지로 접근하기 위해 네트워크를 통과해야함. 따라서 백엔드 스토리지 자체의 성능도 중요하지만 가상 서버에서 블록 스토리지까지 연결되는 네트워크 성능도 중요
- 이 때의 성능지표가 스루풋(초당 전송 대역), IOPS(초당 Input/Output 횟수)
- AWS EBS를 사용하는 경우, 볼륨 타입에 따라 IOPS가 다르지만 처음 일정 기간 동안은 3000IOPS를 보장
- 3TB를 넘어서면 IOPS가 상한에 이르러 더 이상 늘어나지 않음으로 볼륨을 분리하는 것이 더욱 유리
- 블록 스토리지는 네트워크를 경유해서 접근하기 때문에 시스템의 구성 방식이 원인이 되어 병목이 발생할 수 있음
- SR-IOV: 가상화된 환경에서 여러 대의 가상 머신이 하이퍼바이저를 통해 처리하던 것을 PCI 디바이스가 처리하도록 만들어 하이퍼 바이저에서 발생할 수 이는 병목을 제거하는 방법
- 스냅샷, 백업, 클론
- 스냅샷: 특정 시점에 볼륨에 기록된 블록 단위의 데이터를 보존하는 것. 저장 속도가 상당히 빠름
- AWS EBS에서는 스냅샷을 만들기 위해 CreateSnapshot API를 사용하는데 내부적으로는 Amazon S3에 저장되어 사실상 백업을 하는 것과 같은 효과
- AWS에서는 스냅샷을 복제가 가능한데 리전을 넘나들며 복제 가능. AMI와 같이 스냅샷을 공개할 수 있음
- 스냅샷과 이미지의 관계
- 이미지를 사용하여 가상 머신을 기동시키면 블록 디바이스를 매핑한 내용에 따라 여러개의 스냅샷을 원하는 마운트 포인트에 연결시켜서 가상 서버 생성 가능
2. 블록 스토리지의 내부 구성
1. 가상 서버와 블록 스토리지 연결
- 사용자는 가상서버와 볼륨을 연결하기 위해 가상 서버를 제어하는 API 호출
- API를 통해 연결 요청이 접수되면 메시지 큐에 요청 메시지 전달
- 스케쥴러가 하이퍼바이저를 선택하고 그 하이퍼바이저가 연결 처리 진행
2. 서로 다른 인프라 리소스 간의 자동 협상