오늘은 RAID에 대해 알아보자.
먼저 RAID란 Redundant Array of Independent Disk의 줄임말로, 해석하면
복수배열 독립디스크를 의미한다. 말 그대로 HDD나 SSD같은 저장장치들을 성능 혹은 가용성을 목적으로
묶어 사용하는 것을 의미한다.
별도의 하드웨어 RAID를 꽂아 구현하는 방법으로 3가지 방법중 가장 고성능을 기대할 수 있으나, 별도의 RAID카드가 필요하기에
당근 비싸다 고가의 제품에는 RAID카드가 꽃혀있기도 하지만 RAID 카드 자체가 고장나는 경우도 있으니 PCle슬롯에 끼우는것이 추천된다.
비싼 하드웨어 RAID 대신 간략화된 기능이 탑재된 RAID칩을 끼워 구현하는 방법으로 펌웨어를 이용해 설정한다.
OS에 상관없이 동작할 수 있다는 장점이 있지만. 메인보드를 교체하면 못써먹을 가능성이 크다. 원래 디스크를 가상 디스크로
교체하는 방식이기에 용량이 다른 하드웨어를 묶으면 하향평준화가 되어버린다는 단점이 있다.
OS RAID라고도 하며, 펌웨어 RAID와는 다르게 메인보드가 바뀌어도 사용할 수 있다는 장점이 있다. 대신 OS가 바뀌면 못써먹지만,
보통은 OS보다 하드웨어를 교체하는 상황이 많기에 드라이버 방식보다 추천된다.
Striping이라고도 하며, 하드디스크를 병렬로 배치하여 하나의 거대한 하드디스크처럼 사용한다. 데이터의 입출력이 모든 디스크에 공평하게 분할되며, 입출력속도와 저장공간이 디스크의 개수가 N일때 N배가 된다. 디스크를 늘리면 늘릴수록 오류검출 기능이 없가에 안정성은 점점 구져지기에 별로 추천되지는 않는다. 데이터 손실과 관계없이 빠른 입출력속도를 위시한다면 충분히 고려해볼만하다. 이러한 점때문에 고성능을 경험하고 싶은 낭만유저들이 구축하는 경우가 많다. 실제로 SSD를 8개를 RAID방식으로 엮어 초당 27.7 GIB라는 속도를 만든 사람도 있다
https://quasarzone.com/bbs/qn_hardware/views/96004
RAID 0 뿐만 아니라 모든 RAID는 stripe size를 가지고 있는데 이는 입출력할때 한번에 저장되는 양을 의미한다. 보통 4~128kb를 지원하며, 만약 Stripe size를 4kb로 지정하고 12kb 파일을 저장하면 디스크마다 4kb씩 3번 저장하게된다
Mirroring이라고도 하며, 디스크에 같은 데이터를 중복기록한다. 저장공간은 늘어나지 않지만, 디스크하나가 맛이가거나 다람쥐가 훔쳐가도 문제없이 서비스를 제공할 수 있기에 RAID 0이 고성능을 위한거라면, RAID 1은 가용성을 위한거라고 할 수 있다.
RAID 1을 홀수개로 구성하려할때 고려할 수 있는 설정으로 1GB짜리 HDD 3개를 RAID 1E로 묶는다면, HDD1과 HDD2즉 1.5GB에 데이터를 저장하고
나머지 HDD2의 절반과 HDD3에 중복저장해 저장공간과 가용성을 모두 챙길 수 있다.
오류정정부호(ECC)를 기록하는 전용의 하드디스크를 이용해서 안정성을 확보한다. 2는 비트단위에 Hammin code를 적용하는 방식이고 3,4는 각각 바이트 워드 단위로 패리티를 저장한다. 예를 들어 디스크1에 2를 저장하고 디스크2에 3을 저장하면 디스크3에는 2+3=5를 저장한다. 이렇게되면 디스크1이 파손되더라도 디스크2의 값을 아용해 디스크3의 값으로 디스크1의 값을 유추할 수 있다. 모든 인풋아웃풋에서 ECC연산을 수행해야하기에 입출력 병목현상이 발생하며, ECC기록용으로 쓰는 디스크의 수명이 짧아진다는 단점이 있다.
ECC연산을 수행하는 디스크를 돌아가면서 지정해 입출력 병목현상을 해결한 방식이다. RAID0보다 안전하다고 하는 인식과 다르게 8개이상의 대량의 디스크를 묶으면 연산오류 발생확률이 높아져 오히려 RAID0보다 깨질확률이 높다고 한다. ECC데이터를 분산저장 하기 때문에 2개 이상이 깨져버리면 답도없다.
원리는 RAID5와 동일하지만, ECC데이터를 서로다른 방식으로 2개 저장한다. 그만큼 저장공간이 2배로 필요하기에 저장공간은 n-2만큼이 된다. 2개 까지 고장을 허용하기때문에 당연히 RAID5보다 가용성이 높다.
하드디스크가 많아지면 (10개 이상쯤) RAID6을 쓰는게 좋다
RAID의 멤버로 다른 RAID를 사용하는 형태이다. 묶는 배열을 상위배열, 묶이는 배열을 하위배열이라고 한다.
RAID 10:
하위 배열은 RAID1 상위배열은 RAID0으로, RAID1으로 중복저장한 디스크를 RAID0으로 엮어 가용성과 성능 모두를 뿡빵찌찌한다
RAID 0+1:
애는 반대로 하위배열이 RAID0 상위배열이 RAID1이다 이렇게 되면 RAID0 방식으로 엮인 디스크를 RAID1로 중복저장한다 (굳이?) 그래서 디스크가 하나 고장나면 해당 RAID0영역이 전부 깨진다. 가용성과 성능 모두를 갖다 버린다. (도대체 이딴 방식이 왜 있는걸까)
RAID 15
하위배열이 RAID1이고 상위배열은 5다 (대충 알아먹잖ㅅ음) 개인은 거의 쓸일이 없는 방식으로 중복저장된 디스크를 5방식으로 엮는다
RAID 50
하위배열은 5, 상위배열이 0이다. 5로 묶은걸 0으로 묶는다.
RAID 0+5
RAID50의 반대다. 얘도 왜 쓰는지 모르겠다. 디스크가 꺠지면 RAID0부분이 다 깨진다
RAID 51
솔직히 이정도면 아무말 안해도 알아먹을듯.
RAID-Z3: RAID6에서 ECC데이터를 하나 더 늘렸다
JBOD: RAID0과 비슷하지만 얘는 그냥 이어붙인 개념이라 디스크 하나가 깨져도 그 고장난 부분만 날아간다. 하지만 현실은 대부분 핵심데이터가 전체 디스크의 20%에 몰려있다. RAID방식은 모든 디스크의 성능이 같은 환경을 전제하기에 하향평준화가 되지만 이 방식은 그냥 이어붙이는 방식이기에 성능이 서로 다를때 고려해볼만하다.
SHR: 서로 다른 용량의 디스크를 사용할떄 낭비없도록한다.
HOT SPARE: RAID 1,5,6처럼 하나쯤 부서져도 되는 방식일때 사용하는 방식으로 디스크 하나를 예비로 끼워놓기만 하다가 작동중이던 디스크 하나가 망가지면 바로 멤버에 껴들어가 정상적으로 운용될 수 있게 한다.