본문 바로가기

AWS/파워쉘로 배우는 AWS

#20-1 [EBS] EBS 초기화를 해보자

블로깅을 꾸준히 하는게 이렇게 힘든거네요…

이번 포스팅은 EBS 초기화에 대한 내용입니다. EBS 포멧하는 것도 아니고 초기화냐? 하시는 분들이 계시겠지만, 왠지 모르게 AWS에서는 EBS 최적화에 EBS 초기화라는 이름을 붙여 사용합니다.

그럼 EBS 초기화가 무엇이냐? 설명하려면 다음 개념이 필요합니다.

Cloud Service 하기 위해서는 4가지의 필수조건이 필요합니다.

  1. Network
  2. Storage
  3. Computer
  4. Platform Application

Cloud Service 하기 위한 필수조건이라기 보다 IT Infra 구성하는 필수조건과 거의 동일한데요. 여기서 Storage 초점을 맞춰보도록 하겠습니다.

1,2,4 같은 경우 Virtualization 되면서 공유하여 사용하는 반면에 Storage 유일하게 1:1 할당의 개념을 갖습니다. 데이터를 저장하기 위해서는 물리적 공간이 필요하다는 말이죠.

그래서 Storage 업체들이 저장 공간의 효율성을 높이기 위해 만든 것이 압축(compression) 중복제거(deduplication) 그리고 Thin provisioning 입니다.

Thin provisioning은 아시는 분들이 많으시겠지만, 간단히 설명하면 "사용하는 만큼 저장공간을 할당한다." 개념입니다.

내가 500GB 사용하겠다고 선언하여도, 실제 데이터를 300GB 사용하고 있다면, Storage에서 300GB만큼의 용량만 사용하고 200GB 다른 사용자가 사용할 있도록 주는 것입니다.

기술적으로 들어가면 사용자 입장에서는 부분은 성능 저하를 일으킬 있는 요소가 됩니다.

내가 사용할 있는 용량은 500GB임에도 불구하고 실제로는 300GB만큼의 공간만 할당되어 있는 것이기 때문에, 200GB만큼의 공간을 사용할 때에 Storage에서 용량을 할당해 주는 작업이 들어가게 됩니다.

시점에 Disk I/O 순간이어도 Waiting 발생하기 때문에 1ns까지 Application 성능에 영향이 있는 시스템에서는 성능 저하가 일어날 있는 입니다.

하지만, Thin provisioning 약점이 있었으니 바로 OS에서 사용하고 있는 용량이 아닌 Storage에서 있는 용량을 기준으로 Disk 용량을 할당한다는 입니다.

전에도 말씀 드렸듯이 EBS 파일과도 같습니다. 그렇다는 것은 파일 내부의 내용은 Disk에서는 없죠. , Storage에서는 Instance(VM)에서 사용하고 있는 실제 용량을 없습니다. Disk 파일을 별도의 System에서 관리하고 있는 것인 셈이죠. 그렇기 때문에 별도의 System(VM)에서 최초 500GB 전부 쓰고 있다는 내용을 Storage 전달하면, Storage 파일의 유무와 상관 없이 500GB 전부 할당해 줍니다.

AWS에서는 모든 EBS Thin provisioning으로 제작하기 때문에 Thin provisioning 알고리즘으로 EBS 실제 할당용량을 결정하게 되고, 그것을 위해서 사용자는 Instance(VM)에서 실제로 한번 모든 디스크를 채웠다가 지울 필요가 있습니다. 그것이 AWS에서 이야기하는 EBS 초기화 작업입니다. 어떻게 보면 매우 원시적인 방법이지만, 어떻게 보면 보다 좋은 방법은 없습니다. 서비스를 시작하기 전에 모든 볼륨을 할당 받아 두면 위에서 언급하였던 Storage에서 Disk 할당용량을 늘려주는 알고리즘을 타지 않기 때문에 실제 서비스에서는 Disk I/O 성능을 최대한 끌어낼 있습니다.

 

실행은 간단합니다. dd fio 사용하여 모든 디스크를 읽으시면 됩니다.

사용 방법은 OS에서 실행하는 것이니 간단히 Link 참고하시면 됩니다.

Linux : http://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/ebs-initialize.html

Windows : http://docs.aws.amazon.com/ko_kr/AWSEC2/latest/WindowsGuide/ebs-initialize.html