아주 예전에는, 하드 디스크는 커다란 종이처럼 원하는 주소 아무데나 write 하며 사용했다.

 

이런 방식이 사용이 불편하니, 저장소를 관리하는 파일시스템이 탄생했다. 파일시스템은 파일별로 고유 inode를 만들어 실제 파일이 저장되는 저장소와 연결한다. 모든 Inode는 inode table에 저장된다.

 

파일을 추가할 때, 파일시스템은 저장소에서 사용되지 않는 영역을 확인한다. 그곳에 파일 내용을 작성하고, 파일을 가르키는 inode 항목을 추가한다. 그 파일을 읽을 때는 Inode를 통해 파일 내용을 읽어들인다.

 

파일을 삭제할때는 파일 내용을 삭제할 수 도 있지만, inode를 table에서 제거하고 블록을 할당 해제하면 간단하다. 이렇게 하면 파일 삭제는 즉시 수행되고, 새 파일에 블록이 할당되면 덮어쓰게 된다.

 

이런 과정에서 filesystem과 inode 없이 저장소만 본다면, 어떤 데이터가 사용중인지, 삭제되어 덮어쓰기가 될 내용인지 구별할 수 없다. 그냥 비트 덩어리일 뿐이다.

 

하드 디스크는 각 주소를 실제 물리적인 디스크 주소에 맵핑하므로 이러한 방식이 괜찮지만, ssd는 플래시 메모리 기반이므로 반복적인 쓰기에 취약하므로 좋지 않다. 같은 주소에 반복적인 쓰기가 계속 발생하면 해당 cell만 노후화가 급격히 진행된다.

 

그래서 OS에는 똑같이 보이는 저장소를 제공해 호환성을 가진 인터페이스를 제공하고, 펌웨어에서 블록을 재할당하는 방법이 생겨났다. 같은 주소에 반복적인 쓰기가 일어났을 때, ssd-controller가 새로운 블록에 쓰도록 변경해버리고 나중에 찾을 수 있도록 구성을 기억해놓는다. 이것이 wear-leveling이라 한다. 이상적으로는 계속 같은 논리적 주소에 write를 하더라도 모든 cell이 동등하게 노후화가 진행된다.

 

하지만 문제점이 있는데, 블록을 재할당 하려면 어떤 블록이 할당되지 않았는지 알아야 한다. 하지만 파일시스템의 삭제는 실제 데이터를 삭제하지 않기 때문에 어떤 블록이 지워진 블록인지 알 수 없다.

 

그래서 파일시스템에게 스토리지에 어떤 블록이 삭제되었는지 알려줘야 하는데, 이것이 trim이다.

 

thin-provisioning을 하는 지능형 스토리지 역시 실제 raw data를 삭제하지 않고 inode만 삭제하는 경우, raw data가 스토리지에 계속 남아있게 된다. 그래서 trim을 수행해 스토리지에 실제 삭제된 블록을 알려 용량을 회수해야 한다.

 

최신 파일시스템은 파일이 삭제되면 trim이 자동으로 수행되는데, 구식 파일시스템은 주기적으로 모든 파일시스템에 대해 fstrim을 수행해줘야 한다.

728x90
반응형

'OS & Container > Storage' 카테고리의 다른 글

DAS, SAN  (0) 2022.03.31
스토리지 프로비저닝  (0) 2022.03.22
스토리지 시스템 컴포넌트  (0) 2022.03.21
RAID 정리, 핫 스페어  (0) 2022.03.18
RAID와 디스크 성능  (0) 2022.03.16

DAS, Direct-Attached storage

  • stovepiped 스토리지 환경이라고도 한다.
  • 호스트가 스토리지를 소유하고, 스토리지 디바이스 리소스를 공유하거나 관리하기 어렵다.

SAN, Storage Area Network

  • 서버와 공유 스토리지 디바이스간 전용 고속 네트워크다.
  • 스토리지를 응집해 중앙화된 데이터 관리를 할 수 있다.
  • 리소스를 경제적으로 사용하며 효과적인 데이터 관리와 보호를 제공한다.
  • 가상화 SAN과 블록 스토리지 가상화를 통해 리소스를 더 잘 사용할 수 있다.
  • Fibre Channel SAN은 파이버 채널 프로토콜을 사용하고, IP SAN은 IP 기반 프로토콜을 사용한다.
728x90
반응형

'OS & Container > Storage' 카테고리의 다른 글

fstrim과 ssd, thin-provisioning  (1) 2023.01.11
스토리지 프로비저닝  (0) 2022.03.22
스토리지 시스템 컴포넌트  (0) 2022.03.21
RAID 정리, 핫 스페어  (0) 2022.03.18
RAID와 디스크 성능  (0) 2022.03.16

Storage Provisioning

스토리지 프로비저닝(provisioning)이란, 스토리지 리소스를 호스트의 요구 조건에 따라 할당하는 과정이다.

virtual provisioning은 가상화 기술을 이용해 스토리지를 공급하는 방법을 말한다.

Traditional storage provisioning

기존 방식 프로비저닝은 물리적 디스크를 논리적으로 그룹화하고, 요청된 RAID 레벨을 적용해 RAID 집합을 형성한다. RAID 집합의 드라이브 개수와 레벨이 RAID 집합의 가용성과 용량, 성능을 결정한다.

종류와 속도, 용량이 같은 드라이브로 RAID 집합을 구성하는것이 좋다. RAID 집합의 드라이브 중 용량이 다른 드라이브가 있다면 작은 용량에 맞춰 RAID 집합의 전체 용량을 구성하게 된다. 이와 비슷하게 RPM이 이 다르면 낮은 드라이브에 맞춰 전체 성능이 떨어진다.

RAID 집합은 드라이브 용량이 합해져 대용량 저장 공간을 갖는다. 이런 가용 저장 공간을 파티셔닝 해 logical unit을 만들고, 호스트의 요구사항에 따라 할당한다.

논리적 유닛은 집합에 속한 물리적 디스크에 고르게 분포된다. RAID 집합에서 만들어진 각 논리적 유닛은 논리적 유닛 넘버(LUN, Logical Unit Number)라는 고유 ID를 부여받는다. LUN은 호스트로부터 RAID 집합이 어떻게 구성되어있는지 감추어준다. 전통적 방식의 LUN을 가상화 프로비저닝 기법으로 생성한 LUN과 구별하기 위해 Thick LUN 이라고도 한다.

LUN을 구성하고 호스트에 할당 할 때는 LUN을 찾는 버스 스캔이 필요하다. OS에게 LUN은 raw disk로 보이고, 이를 사용하려면 파일 시스템으로 포맷하고 마운트 해야 한다.

가상 호스트 환경에서는 LUN이 하이퍼바이저에게 할당된다. 하이퍼바이저도 LUN을 raw disk로 인식한다. 이 디스크에 하이퍼바이저 파일 시스템을 설정하고, 가상 디스크를 생성하고, 가상 디스크를 가상 머신에 할당하면 가상 머신에 raw disk로 나타난다. 여기서는 LUN 공간을 여러 가상 머신에 공유할 수 있다.

가상 머신은 스토리지 시스템의 LUN을 직접 접근할 수도 있다. 이렇게 하면 전체 LUN이 단일 가상 머신에 할당된다. 가상 머신에서 실행하는 애플리케이션 응답성이 중요하고 다른 가상 머신과 스토리지를 공유하는게 안좋은 경우 이렇게 구성하는것이 좋다. 가상 머신과 물리적 머신이 결합된 경우엔 물리적 머신이 접근하고 있는 LUN을 가상 머신도 접근하게 된다.

Meta LUN(Logical Unit Number)

메타 LUN은 용량을 추가하거나 성능을 높이기 위해 LUN을 확장하는 방법이다.

2개 이상의 LUN을 합해 만들며, 베이스 LUN 1개와 1개 이상의 컴포넌트 LUN으로 구성된다.

concatenated 방식이나 striping 방식을 사용할 수 있다.

concatenated 방식에서, 컴포넌트 LUN의 추가 용량은 베이스 LUN의 용량에 더해진다. 컴포넌트 LUN의 크기가 베이스 LUN의 크기와 같지 않아도 된다.

이어 붙여진(concatenated) 메타 LUN은 모두 보호되거나(패리티 혹은 미러링) 모두 보호되지 않아야 한다(RAID 0).

메타 LUN 안에서 여러 RAID 유형을 섞어서 사용할 수 있다. 예를 들어 RAID 1/0 LUN은 RAID 5 LUN과 결합되어 사용될 수 있다. 하지만 RAID 0 LUN은 RAID 0 LUN과만 concatenated 될 수 있다.

concatenated 된 LUN의 구성은 빠르지만 성능상의 이점은 없다.

striping 방식에서, 베이스 LUN의 데이터를 베이스 LUN과 컴포넌트 LUN에 스트라이핑 한다. 스트라이프 확장에서 모든 LUN은 같은 용량이며 같은 RAID 레벨을 가져야 한다.

striping 확장은 스트라이핑 드라이브의 개수가 늘어나기 때문에 성능이 향상된다.

두 방식 모두 모든 LUN의 디스크 드라이브 유형이 같아야 한다. 즉, 모두 FC거나 모두 ATA여야 한다.

Virtual Storage Provisioning

가상화 프로비저닝은 스토리지 어레이에 물리적으로 할당된 것보다 많은 용량의 LUN을 만들고 제공 할 수 있다. 가상화 프로비저닝으로 만들어진 LUN을 Thin LUN이라고도 한다.

Thin LUN은 호스트에 제공될 때 필요한 모든 물리적 스토리지를 할당하지 않아도 된다. 물리적 스토리지는 공유 풀에서 필요할 때 호스트에게 할당된다. 공유 풀(shared pool)은 물리 디스크로 구성되어 있다.

가상화 프로비저닝의 공유 풀은 LUN의 RAID 그룹과 유사하다. RAID 그룹처럼 하나의 RAID 보호 레벨을 제공한다. 하지만 RAID 그룹과 달리 많은 개수의 드라이브를 포함 할 수 있다. 공유 풀은 단일 종류와 여러 종류의 드라이브를 모두 지원한다(플래시, FC, SAS, SATA 등).

가상화 프로비저닝은 스토리지를 좀 더 효율적으로 호스트에게 할당해줄 수 있고, 실제 용량보다 더 큰 용량도 할당 할 수 있다. 공유 풀과 Thin LUN은 호스트의 요청에 따라 쉽게 확장할수도 있다. 스토리지 어레이에 여러개의 공유 풀을 만들 수도 있고, 공유 풀을 여러 Thin LUN이 공유할 수도 있다.

Traditional vs Virtual Storage Provisioning

보통 예상 스토리지 용량에 따라 스토리지를 할당하는데, LUN 용량이 떨어질 때마다 프로비저닝 하는것과 애플리케이션의 중단을 막기 위해서 실제보다 과도하게 프로비저닝이 될 확률이 높다.

가상화 프로비저닝이 이런 비용 비효율적 문제를 해결 할 수 있다.

Thin LUN, Thick LUN Use Case

Thin LUN은 성능 변동을 감수 할 수 있는 애플리케이션에 적합하다. 어떤 경우엔 여러 풀의 여러 디스크를 사용해 스트라이핑해 성능을 개선 할 수도 있다. 그러나 씬 LUN 여럿이 공유 스토리지 리소스에 대해 경쟁하기 때문에 성능이 저하 될 수도 있다.

Thin LUN은 최상의 저장 효율성을 제공하며 공간 사용을 예측하기 어려운 경우에도 적합하다.

Thick LUN은 예측 가능한 성능이 필요한 애플리케이션에 적합하다. 데이터 위치를 정확히 알 수 있고, 워크로드에 경쟁이 있는 경우 다른 RAID 그룹에 LUN을 만들 수 있다.

현 스토리지 어레이에는 Thin LUN과 Thick LUN을 함께 사용할 수도 있고, 필요에 따라 데이터를 옮길 수도 있다.

LUN Masking

LUN 마스킹은 호스트가 접근할 수 있는 LUN을 정의해 데이터 접근을 제한하는 프로세스다. 스토리지 어레이에 구현되며 호스트의 접근을 적절히 제어해 권한 밖의 접근이나 잘못된 사용을 막아준다.

728x90
반응형

'OS & Container > Storage' 카테고리의 다른 글

fstrim과 ssd, thin-provisioning  (1) 2023.01.11
DAS, SAN  (0) 2022.03.31
스토리지 시스템 컴포넌트  (0) 2022.03.21
RAID 정리, 핫 스페어  (0) 2022.03.18
RAID와 디스크 성능  (0) 2022.03.16

지능형 스토리지 시스템의 컴포넌트

  • 프론트엔드
  • 캐시
  • 백엔드
  • 물리 디스크

지능형 스토리지에서 호스트의 I/O 요청은 프론트엔드 포트에 도착해 캐시와 백엔드를 통해 처리돼 물리 디스크로부터 데이터를 추출하거나 저장한다.

요청된 데이터가 캐시에 있으면 바로 캐시에서 읽기 요청을 처리한다.

프론트엔드

프론트엔드 포트와 프론트엔드 컨트롤러 컴포넌트로 구성된다.

스토리지 시스템과 호스트 사이 인터페이스를 제공한다.

고가영성을 위해 여분의 컨트롤러를 갖고 있으며 각 컨트롤러당 여러 포트를 갖고 있어 여러 호스트가 지능형 스토리지 시스템에 연결한다.

각 프론트엔드 컨트롤러에서 파이버 채널, iSCSI, FICON, FCoE 등 전송 프로토콜을 처리한다.

프론트엔드 컨트롤러는 내부 데이터 버스를 통해 캐시와 데이터를 주고받는다. 캐시가 쓰기 데이터를 받으면 컨트롤러는 호스트에게 수신 ack 메시지를 보낸다.

캐시

호스트의 I/O 요청 처리 시간을 줄이기 위해 데이터를 임시 저장하는 메모리다.

호스트에서 가장 느린 컴포넌트인 디스크 드라이브의 물리적 지연 시간을 줄여 성능을 향상시킨다.

지능형 어레이에서 쓰기 데이터는 먼저 캐시에 기록된 후 디스크에 옮겨 기록된다.

  • 캐시의 구조캐시는 data store, tag RAM으로 구성된다. 데이터 스토어는 데이터를 저장하고, 태그 RAM은 데이터 스토어와 디스크에서 데이터 위치를 추적한다.태그 RAM의 더티 비트 플래그는 캐시의 데이터가 디스크에 커밋됐는지, 최근 접근은 언제인지 알려준다.
  • 태그 RAM의 엔트리는 데이터의 캐시 위치와 디스크 위치를 알려준다.
  • 캐시 할당의 가장 작은 단위는 페이지다. 캐시 페이지의 크기는 애플리케이션 I/O 크기에 따라 결정된다.
  • 캐시를 사용한 읽기 연산요청한 데이터가 있으면 cache hit, 혹은 read hit라고 한며 호스트에서 매우 빠른 응답 속도로 데이터를 제공한다.시퀀셜 리드(순차 읽기)의 경우 prefetch나 read-ahead 알고리즘을 사용한다. 시퀀셜 리드는 연속된 블록을 가져오므로 호스트가 아직 요청하지 않은 블록도 미리 읽어 캐시에 저장한다. fixed prefethc에서는 호스트 I/O 크기가 일정한 경우 사용하며, variable prefetch는 스토리지 시스템이 호스트가 요청한 크기의 배수만큼 데이터를 prefetch한다. prefetch에 보통 limit을 정해 너무 많은 I/O가 발생하지 않도록 한다.
  • 읽기 성능은 read hit ratio로 측정된다. 전체 읽기에서 히트가 발생한 비율이다.
  • 요청한 데이터가 없으면 cache miss 라고 하며 백엔드가 디스크에 접근해 요청 데이터를 가져온다. 이는 캐시에 저장되고 프론트엔드를 거쳐 호스트에게 전송한다.
  • 호스트 읽기 연산 → 스토리지 컨트롤러에서 태그 RAM을 읽어 요청한 데이터가 캐시에 있는지 확인한다.
  • 캐시를 사용한 쓰기 연산sequential write도 작은 쓰기 연산을 합쳐 디스크에 전달하여 최적화된다.
    • write-back cache응답 시간이 빨라지지만, 데이터가 커밋되기 전 캐시에 장애가 발생하면 데이터가 사라질 수 있다.
    • 데이터를 캐시에 저장하고 바로 호스트에게 ack을 보낸다. 그리고 여러 쓰기 데이터가 한꺼번에 디스크에 커밋된다.
    • write-through cache
    • 데이터를 캐시에 저장하고 바로 디스크에 저장하며 호스트에게 ack을 보낸다. 디스크 연산으로 인해 쓰기 응답속도가 길어진다.
  • 디스크에 직접 쓸 때보다 성능이 향상된다. I/O가 캐시에 기록되고 ack을 보내면, 디스크에 직접 기록할 때보다 훨씬 적은 시간이 걸린다.

데이터 I/O가 많은 특정 상황에서는 캐시를 우회한다. write aside size라는 지정한 크기를 넘어서면 바로 디스크에 기록해 쓰기 연산이 캐시 공간을 많이 사용하지 못하게 한다. 이는 캐시 크기가 제한되고 캐시가 주로 작은 랜덤 I/O에 사용되는 경우 사용한다.

  • 캐시 구현전용 캐시는 별도의 메모리 공간을 read, write에 할당하는 것을 말한다.글로벌 캐시는 읽기와 쓰기에 사용하는 캐시 비율을 정할 수 있다. 보통 읽기 캐시는 작게 설정하는데, 애플리케이션의 연산 비율에 따라 조절해야 한다. 또 워크로드에 따라 동적으로 변할 수 있다.
  • 글로벌 캐시는 모든 메모리 주소를 사용한다. 글로벌 캐시에서는 글로벌 주소 집합만을 관리하면 되기 때문에 캐시를 효율적으로 관리 할 수 있다.
  • 전용 캐시와 글로벌 캐시로 구현할 수 있다.
  • 캐시 관리LRU(Least Recently Used), MRU(Most Recently Used) 알고리즘이 가장 많이 사용된다.
    • idle flushing
    • 캐시 활용도가 하이 워터마크와 로우 워터마크 사이이면 지속적으로 적당히 플러시한다.
    • high watermark flushing
    • 캐시 활용도가 하이 워터마크를 넘으면 발생한다. 스토리지 시스템이 플러시를 위한 전용 리소스를 할당한다. 이 플러시는 I/O에 영향을 준다.
    • force flushing
    • 갑자기 많은 I/O가 발생해 캐시를 100% 사용한 경우 실행한다. 좀 더 많은 리소스를 할당해 먼저 처리한다.
  • 캐시에 빈 공간이 없으면 dirty page(캐시에 기록된 후 디스크에 기록되지 않은 데이터)를 플러시해 사용 가능한 공간을 관리해야 한다. I/O 액세스 속도나 패턴에 기반해 watermark라 불리는 상하한 레벨을 캐시에 설정해 플러시를 관리한다. hight watermark는 스토리지 시스템이 캐시 데이터를 빨리 플러시해야 하는 한도, low watermark는 플러시를 멈추는 지점이다.
  • 캐시는 한정되고 비싼 리소스임으로 잘 관리해야 한다.
  • 캐시 데이터 보호
    • 캐시 미러링(cache mirroring)읽기는 디스크에서 다시 캐시로 읽어오면 되기 때문에 캐시 장애가 발생해도 디스크에서 데이터를 읽을 수 있다.cache coherency(캐시 일관성)을 유지해야 한다. 두 캐시가 항상 같아야 한다.
    • 쓰기 캐시만 미러링하기 때문에 캐시의 활용도를 높일 수 있다.
    • 캐시 기록을 독립적인 2개의 메모리 주소에 저장한다. 캐시 장애가 발생하더라도 쓰기 데이터는 미러에 보존돼 있어 커밋할 수 있다.
    • 캐시 볼팅(cache vaulting)
    • 전력 장애로부터 데이터를 보호하는 방법 중, 전력 장애 시 캐시 컨텐츠를 덤프하기 위해 물리적 디스크를 사용하는 방법이 있다. 이를 캐시 볼팅이라 하며, 이를 위해 사용되는 디스크를 볼트 드라이브라고 한다. 전력이 복구되면 디스크의 데이터를 다시 캐시에 기록한다.
  • 캐시는 휘발성 메모리이기 때문에 장애가 발생하면 디스크에 커밋하지 않은 데이터는 모두 사라진다.

백엔드

캐시와 물리 디스크 사이 인터페이스를 제공한다. 백엔드 포트와 백엔드 컨트롤러로 구성된다.

캐시 → 백엔드로 데이터가 전송되면 목적지 디스크로 보내진다. 물리적 디스크는 백엔드의 포트에 연결되어있다.

백엔드 컨트롤러는 디스크와 통신하며 제한된 임시 데이터 저장소를 제공한다. 백엔드 컨트롤러의 알고리즘은 RAID 기능과 오류 탐지 및 수정을 수행한다.

데이터 보호와 고가용성을 위해 스토리지 시스템은 여러 포트를 가진 듀얼 컨트롤러를 사용한다. 이는 컨트롤러나 포트에 장애가 발생해도 물리적 디스크로 향하는 다른 경로를 제공 할 수 있다. 각 디스크 포트는 다른 컨트롤러에 연결된다. 듀얼 컨트롤러는 로드 밸런싱에도 도움이 된다.

물리적 디스크

파이버 채널, SATA, SAS, flash drvie 등 여러 디스크 드라이브가 사용된다. 서로 다른 디스크 드라이브를 같은 어레이에 섞어 사용할 수도 있다.

728x90
반응형

'OS & Container > Storage' 카테고리의 다른 글

DAS, SAN  (0) 2022.03.31
스토리지 프로비저닝  (0) 2022.03.22
RAID 정리, 핫 스페어  (0) 2022.03.18
RAID와 디스크 성능  (0) 2022.03.16
RAID 레벨  (0) 2022.03.15

RAID 비교

RAID 0

최소 디스크 개수: 2

저장소 효율: 100%

비용: 낮음

읽기 성능: 랜덤 읽기, 시퀀셜 읽기 모두 좋음

쓰기 성능: 좋음

쓰기 패널티: 없음

데이터 보호: 없음

RAID 1

최소 디스크 개수: 2

저장소 효율: 50%

비용: 높음

읽기 성능: 단일 디스크보다는 좋음

쓰기 성능: 쓰기 연산이 모든 디스크에 커밋돼야 하므로 느리다

쓰기 패널티: 적당함

데이터 보호: 복제

RAID 3

최소 디스크 개수: 3

저장소 효율: [(n-1)/n]x100 %

비용: 적당함

읽기 성능: 랜덤 읽기는 적당하고 시퀀셜 읽기에는 좋음

쓰기 성능: 작은 랜덤 쓰기에는 적당하거나 좀 떨어지고, 많은 양을 쓰거나 시퀀셜 쓰기에는 적당함

쓰기 패널티: 높음

데이터 보호: 별도 패리티 디스크 (단일 디스크 고장 대비)

RAID 4

최소 디스크 개수: 3

저장소 효율: [(n-1)/n]x100 %

비용: 적당함

읽기 성능: 랜덤 읽기와 시퀀셜 읽기에 좋음

쓰기 성능: 랜덤 쓰기와 시퀀셜 쓰기에 적당함

쓰기 패널티: 높음

데이터 보호: 별도 패리티 디스크 (단일 디스크 고장 대비)

RAID 5

최소 디스크 개수: 3

저장소 효율: [(n-1)/n]x100 %

비용: 적당함

읽기 성능: 랜덤 읽기와 시퀀셜 읽기에 좋음

쓰기 성능: 랜덤 쓰기와 시퀀셜 쓰기에 적당함

쓰기 패널티: 높음

데이터 보호: 분산 패리티 (단일 디스크 고장 대비)

RAID 6

최소 디스크 개수: 4

저장소 효율: [(n-1)/n]x100 %

비용: RAID 5보다는 높지만 적당함

읽기 성능: 랜덤 읽기와 시퀀셜 읽기에 좋음

쓰기 성능: 작은 랜덤 쓰기에는 적당하거나 좀 떨어지고, 많은 양을 쓰거나 시퀀셜 쓰기에는 적당함

쓰기 패널티: 매우높음

데이터 보호: 분산 패리티 (2개의 디스크 고장 대비)

RAID 10/01

최소 디스크 개수: 4

저장소 효율: 50 %

비용: 높음

읽기 성능: 좋음

쓰기 성능: 좋음

쓰기 패널티: 적당함

데이터 보호: 복제

 

핫 스페어

hot spare는 고장난 디스크를 잠시 대체하는 RAID 어레이의 여분 드라이브다.

  • 패리티 RAID를 사용하면 RAID 집합의 살아 있는 디스크 드라이브의 데이터와 패리티로부터 데이터를 복구해 핫 스페어에 복구한다.
  • 미러(복제)를 사용하는 경우 살아 있는 미러의 데이터를 핫 스페어에 복사한다.

새로 디스크 드라이브를 시스템에 추가하면 핫 스페어의 데이터를 새 드라이브에 복사한다. 핫 스페어는 다시 대기 상태로 돌아가고 다음 고장을 준비한다.

핫 스페어가 고장난 드라이브를 계속해서 대체할 수도 있다. 이 경우에는 새로 핫 스페어를 어레이에 추가해야 한다.

핫 스페어는 고장난 드라이브의 데이터를 저장할 수 있는 용량을 가져야 하며, 데이터 가용성을 위해 여러개를 쓰기도 한다.

핫 스페어는 장애 발생 시 자동으로 설정하거나 사용자가 직접 지시한다.

자동 설정은 복구 가능한 오류의 발생 빈도가 지정한 값을 넘어서면 디스크 서브시스템이 오류가 발생하는 드라이브의 데이터를 자동으로 핫 스페어로 옮긴다. 손상된 디스크가 고장나기 전 작업이 완료되면 서브시스템은 핫 스페어를 바꾸고 고장난 디스크를 사용하지 않는다. 그렇지 않는 경우에는 패리티 혹은 미러디스크를 사용해 데이터를 복구한다.

728x90
반응형

'OS & Container > Storage' 카테고리의 다른 글

스토리지 프로비저닝  (0) 2022.03.22
스토리지 시스템 컴포넌트  (0) 2022.03.21
RAID와 디스크 성능  (0) 2022.03.16
RAID 레벨  (0) 2022.03.15
RAID Array 구성요소, 기술  (0) 2022.03.08

RAID 유형을 선택할 때는 디스크 성능과 애플리케이션 IOPS에 미치는 영향을 고려해야 한다.

미러와 패리티 RAID 구성에서는 쓰기 연산이 더 많은 I/O 부하를 가져온다. 이를 write penalty라고 한다.

RAID 1에서는 모든 쓰기 연산이 미러 쌍을 이루는 두 디스크에서 모두 이뤄져야 한다.

 

RAID 5에서 쓰기 연산은 4개의 I/O 연산을 수행하고, I/O를 수행하면 컨트롤러는 모든 쓰기 연산마다 패리티 세그먼트를 읽고 재계산하여 써야 한다.

컨트롤러의 패리티는 다음과 같이 계산한다.

Ep = E1 + E2 + E3 + E4 (xor 연산)

컨트롤러가 I/O 쓰기를 수행할 때 마다 이전 패리티(Ep old)와 이전 데이터(E4 old)를 디스크로부터 읽어야 한다. 이것이 2개의 read I/O다.

그 이후 새로운 패리티(Ep new)를 다음과 같이 계산한다.

Ep new = Ep old - E4 old + E4 new (xor 연산)

새 패리티를 계산 후, 새 데이터와 패리티를 디스크게 기록한다. 이것이 2개의 write I/O다.

따라서 컨트롤러는 매 쓰기 연산마다 2개의 읽기와 2개의 쓰기를 발생시키며 쓰기 패널티는 4이다.

 

RAID 6에서는 듀얼 패리티를 사용하기 때문에 디스크 쓰기에 3개의 읽기 연산이 필요하다. (패리티 2개와 데이터 1개) 2개의 패리티를 계산 후 컨트롤러는 3개의 쓰기 연산(패리티 2개와 데이터 1개)를 수행하므로, RAID 6에서는 각 쓰기당 6개의 I/O 연산이 발생되고, 쓰기 패널티는 6이다.

728x90
반응형

'OS & Container > Storage' 카테고리의 다른 글

스토리지 시스템 컴포넌트  (0) 2022.03.21
RAID 정리, 핫 스페어  (0) 2022.03.18
RAID 레벨  (0) 2022.03.15
RAID Array 구성요소, 기술  (0) 2022.03.08
NCQ와 Flash Drive  (0) 2022.03.02

RAID 레벨은 애플리케이션 성능, 데이터 가용성 요구 조건, 비용을 고려한다.

스트라이핑과 미러링, 패리티 기술로 결정된다.

레벨 설명

RAID 0 장애 복구 기능이 없는 스프라이핑 집합
RAID 1 디스크 미러링
중접 RAID 레벨의 조합 ex) RAID 0 + RAID 1
RAID 3 병렬 액세스 가능한 스트라이핑된 집합과 전용 패리티 디스크
RAID 4 독립 디스크 액세스를 사용하는 스트라이핑 집합과 전용 패리티 디스크
RAID 5 독립 디스크 액세스를 사용하는 스트라이핑된 집합과 분산 패리티
RAID 6 독립 디스크 액세스를 사용하는 스트라이핑된 집합과 듀얼 분산 패리티

RAID 0

데이터가 RAID 집합의 모든 디스크에 데이터를 스트라이핑하는 구성. RAID 집합의 모든 디스크 공간을 사용 할 수 있다.

데이터를 읽을 때, 컨트롤러가 모든 스트립을 모으는 역할을 한다.

RAID 집합의 드라이브 개수를 늘리면 동시에 읽거나 쓸 수 있는 데이터의 양이 증가하여 성능이 향상된다.

높은 I/O 처리량을 요구하는 애플리케이션에 적합하나, 데이터 보호나 가용성을 제공하지 않는다.

RAID 1

장애 복구 기능 제공을 위해 데이터를 미러링한다. 미러링은 호스트가 알지 못하게 이뤄진다.

2개의 디스크 드라이브로 구성되며, 모든 쓰기는 두 디스크에 모두 기록된다.

디스크 fault가 발생할 경우 모든 레이드 중 데이터 복구 부하가 가장 작다. RAID 컨트롤러가 미러 디스크를 사용하는 것으로 이뤄지기 때문이다.

높은 고가용성이 요구되며 비용 제한이 없는 경우 적합하다.

중첩 RAID

대부분의 데이터센터가 RAID 어레이를 사용해 데이터 중복과 성능을 모두 얻고자 한다. RAID 1+0과 RAID 0+1은 RAID 0의 성능상 이점과 RAID 1의 중복 이점을 조합한다.

이 RAID 방식은 최소 4개 이상의 짝수 개 디스크를 필요로 한다.

RAID 1+0은 RAID 10 또는 RAID 1/0이라고도 한다. 마찬가지로 RAID 0+1은 RAID 01 또는 RAID 0/1 이라고도 한다.

다음은 RAID 1+0을 사용하기 좋은 애플리케이션이다.

  • 높은 트랜잭션 속도가 필요한 OLTP(Online Transaction Processing)
  • 대규모 메시징 시스템
  • 쓰기가 많은 랜덤 액세스 작업을 가진 데이터베이스 애플리케이션

RAID 1+0과 RAID 0+1은 disk failure가 발생한 경우 복구 방법이 다르다. RAID 1+0은 미러링 된 집합을 스트라이핑하기 때문에 고장 난 디라이브를 교체하면 미러 쌍 중 살아있는 드라이브를 사용해 교체 디스크가 복구되고, 연산을 계속 진행 할 수 있다.

RAID 0+1은 스트라이핑된 디스크를 미러링한다. 이 구성에서 한 드라이브가 고장나면 전체 스트라이프가 고장 난다. 디스크 교체 후에는 살아 있는 스트라이프 전체를 고장 난 스트라이프로 복사해야 한다.

6개의 디스크로 RAID 10과 RAID 01을 구성했을 때, RAID 10은 3개의 디스크가 고장나도 정상 동작하고, RAID 01은 두개의 디스크까지 정상동작한다.

RAID 3

RAID 3은 데이터를 스트라이핑하고 패리티를 이용해 장애에 대비한다. 패리티 정보는 전용 드라이브에 저장해 RAID 집합의 드라이브가 고장나도 데이터를 복구 할 수 있게 한다.

드라이브가 병렬로 동작하기 때문에 분산된 데이터의 스트라이프를 모두 읽고 쓴다. 특정 스트립을 부분적으로 쓸 수 없다.

RAID 3는 데이터 백업이나 비디오 스트리밍같은 대규모의 sequential 데이터 액세스를 하는 애플리케이션에 적합하다.

RAID 4

RAID 3과 비슷하게 데이터를 스트라이핑하고 장애 복구를 위해 패리티를 사용한다. 데이터는 패리티 디스크를 제외한 디스크에 스트라이핑된다.

RAID 3과 다른점으로 RAID 4의 데이터는 독립적으로 접근 할 수 있다. 전체 스트라이프를 모두 읽거나 쓰지 않아도 하나의 디스크를 읽고 쓸 수 있다.

RAID 4는 높은 읽기 속도와 괜찮은 쓰기 속도를 제공한다.

RAID 5

스트라이핑을 사용하고 드라이브(스트립)을 독립적으로 접근한다는 점에서 RAID 4와 비슷하지만, 패리티를 모든 디스크에 분산한다.

전용 패리티 디스크를 쓰지 않기 때문에 패리티 디스크의 병목 현상이 없다.

RAID 5는 읽기가 많은 랜덤 I/O 애플리케이션, 메시징, 데이터 마이닝, 중급 성능 미디어 서버, 관계형 데이터베이스에서 많이 사용한다.

RAID 6

두번째 패리티를 사용한다는 점을 제외하고 RAID 5와 같다. 따라서 RAID 6에서는 최소 4개의 디스크가 필요하다. RAID 6는 패리티를 전체 디스크에 분산시킨다. 쓰기 패널티는 RAID 5보다 심하므로, RAID 5보다 성능이 나오지 않는다. 복구 작업 역시 패리티가 2개이기 때문에 RAID 5보다 오래 걸린다.

728x90
반응형

'OS & Container > Storage' 카테고리의 다른 글

RAID 정리, 핫 스페어  (0) 2022.03.18
RAID와 디스크 성능  (0) 2022.03.16
RAID Array 구성요소, 기술  (0) 2022.03.08
NCQ와 Flash Drive  (0) 2022.03.02
데이터 액세스와 DAS  (0) 2022.02.27

RAID Array 구성요소

RAID Array는 여러 디스크 드라이브와 RAID를 구현하기 위한 하드웨어로 구성된다. RAID 어레이의 디스크를 그룹화해 RAID 집합 또는 RAID 그룹이라고 하는 논리적 어레이를 형성 할 수 있다.

RAID 기술

스트라이핑

데이터를 1개 이상의 드라이브에 저장해 병렬로 사용하는 기술. 여러 R/W 헤드가 동시에 일을 하기 때문에 1개의 디스크를 사용했을 때보다 좀 더 성능이 좋다.

RAID 집합의 각 디스크에서 정해진 개수의 연속적인 주소 디스크 블록을 스트립(strip)이라 한다. RAID 집합에 있는 모든 디스크의 같은 위치의 스트립을 스트라이프stripe이라고 한다.

스트립 크기(strip size) 혹은 스트라이프 깊이(stripe depth)는 스트립에 있는 블록의 갯수를 말한다. 스트라이프의 모든 스트립은 같은 개수의 블록을 갖는다.

스트라이프 너비(stripe width)는 스트라이프 안의 데이터 스트립 개수를 말한다.

parity나 미러링을 사용하지 않는 경우 스트라이프 RAID는 데이터 보호 기능이 없다.

미러링

같은 데이터를 2개 이상의 디스크에 저장에 데이터의 사본을 만드는 기술. 하나의 디스크가 고장나더라도 나머지 디스크를 사용해 데이터 요청을 처리 할 수 있다. 고장 난 디스크를 새 디스크로 교체하면 컨트롤러가 살아있는 디스크에서 데이터를 복사한다. 특정 시간의 데이터를 저장하는 백업과 달리 계속 변경사항을 감지한다.

데이터 중복을 발생시켜 비용이 많이 들어 데이터 손실을 감수할 수 없는 중요한 애플리케이션에서 사용된다.

읽기 요청은 여러 디스크에서 처리 할 수 있어 성능을 향상시킬 수 있다. 쓰기 요청은 여러 디스크에 써야 해 약간 성능이 감소 할 수 있다.

패리티

미러링 비용 없이 디스크 드라이브 고장으로부터 스트라핑된 데이터를 보호하기 위한 방법이다. 데이터의 패리티 비트를 저장할 디스크 드라이브가 추가된다. RAID 컨트롤러가 패리티를 계산한다. 패리티 정보는 전용 디스크 드라이브에 저장하거나 RAID 집합의 모든 드라이브에 분산 저장 할 수 있다.

미러링에 비해 비용이 저렴하지만, 데이터가 변경될 때 마다 패리티를 다시 계산해야 하므로 RAID Array의 성능에 영향을 준다.

728x90
반응형

'OS & Container > Storage' 카테고리의 다른 글

RAID와 디스크 성능  (0) 2022.03.16
RAID 레벨  (0) 2022.03.15
NCQ와 Flash Drive  (0) 2022.03.02
데이터 액세스와 DAS  (0) 2022.02.27
디스크 드라이브 성능  (0) 2022.02.27

+ Recent posts