RAID
개요
Redundant Array of Inexpensive/Independent Disk.[1]
저가/독립 디스크의 복수 배열
레이드라고 부른다.
4.RESOURCE/KNOWLEDGE/개념/스토리지를 여러 개 묶어 하나의 저장 장치로 활용하는 기법이다.
물리 디스크 여러 개를 합쳐서 논리적으로 하나의 디스크처럼 활용한다.
저장장치는 기본적으로 소모품이기 때문에, 데이터 손상이 발생할 가능성을 언제나 염두해야 한다.
그 자체가 고장나는 경우도 물론 존재하기 마련이기에, 이를 보완하는 기술이라고 볼 수 있겠다.
처음에는 성능 낮고 고물이 되어가는 스토리지들을 재활용하기 위해 나온 기술이라고 한다.[2]
그래서 처음에는 Inexpensive를 사용했으나, 최근에는 Independent로 해석하는 추세라고.
이를 구현하는 방식은 다양하다고 한다.
하드웨어적으로도, 소프트웨어적으로도 이를 해내는 방법이 존재한다.
뭐든 간에 이를 작업을 하는 놈을 레이드 컨트롤러라고 부른다.
레이드 컨트롤러는 레이드가 구성된 이후 하나의 디스크를 바꿔넣을 때 이를 리빌딩해주는 역할도 해준다.
장점
가장 기본적으로는 당연히 용량 증가가 장점이다.
하나 사용하는 것보다 두 개 쓰는 게 좋다는 것.
그리고 고가용성이나, 고성능을 위해 사용한다.
종류를 보면 알게 되겠지만, 대체로 읽기 성능은 향상된다.
HDD에서는 확실한 성능 차이가 발생한다고 한다.
반면 SSD에서는 어차피 속도가 빠르기 때문에 유의미한 차이가 나지는 않는다고 한다.
특히 NAS로 사용하는 디스크라면 네트워크 환경 때문에 성능 차를 더 느끼기 힘들다.
주의
레이드는 안정성은 높지만 백업 솔루션은 아니다.
해킹과 같은 문제가 발생하면 어차피 양쪽이 다 같이 작동하므로 복구가 불가능하다.
그렇기에 버저닝이나, 외부 스토리지 사용 등으로 백업 솔루션은 따로 생각해둬야 한다.
또한 디스크 확장이 어렵다.
리빌딩은 어려운 작업이고, 시간도 많이 걸리게 된다.
아무리 작은 데이터를 넣어도 모든 디스크가 작동을 하게 되니 디스크 수명 악화, 전력 소모의 문제도 발생한다.
종류
참고하고 있는 자료에서는 이전에 정의된 레이드를 Primay RAID Level이라 한다.
그리고 새롭게 RAID Level Qualifier라고 새로운 정의를 하고 있다.
최근 정의된 레이드 종류는 어마무시하게 많다..
이걸 다 보지는 않을 거고, 핵심적인 것들만 보도록 하자.
RAID 0(Simple Striping)
스트라이핑, 스트립이라고 부른다.
숫자를 보면 알겠지만, 그냥 모든 물리 디스크를 하나의 거대한 저장 장치로 활용한다.
일정 깊이로 스트립을 나누고 그 다음에 데이터를 쭉 배치하는 방식이란 것이다.
스트라이프는 한 번에 저장하는 데이터 크기의 기준이다.
위 사진의 경우로 보자.
물리 디스크는 5개이고, 스트라이프 깊이를 10으로 잡는다.
그러면 한번에 저장되는 스트라이프 길이는 50이 되고, 50짜리 데이터를 저장하면 한 스트라이프를 꽉 채워서 5개에 노나서 저장된다.
그보다 데이터 크기가 크다면 복수의 스트라이프를 사용하게 된다.
이렇게 하는 것은 일단 모든 디스크를 공평하게 활용하기 위함이다.
이론적으로는 각 디스크가 입출력을 공평하게 받기 때문에, 데이터 입출력 속도가 매우 높다.
그래서 HDD로 SSD만큼의 속도를 만끽하고 싶을 때 시도해보는 경우도 있다고 한다.
문제
여기에서 한 디스크가 고장나면?
그냥 망하는 거다 ㅋㅋ
해당 부분에 있는 데이터는 얄짤 없이 소실되어버릴 수도 있고, 그렇게 되면 그냥 전체 디스크를 못 쓰는 꼴이 된다.
(HDD는 죽기 직전에 신호라도 온다던데, SSD는 돌연사를 한다고 합니다)
데이터가 이미 분산 저장되어 있기 때문에 어떤 데이터라도 일부분이 훼손되게 되는 것.
또한 디스크의 성능은 하향 평준화된다.
즉 다 좋은 디스크 써놓고 하나만 느린 디스크를 쓰면 그 속도를 따라간다는 것..
RAID 1(Mirroring)
미러링이라고 부른다.
정직하게, 두 디스크에 데이터를 똑같이 저장한다.
한 디스크가 죽어도 다른 디스크가 똑같이 데이터를 가지고 있기에 데이터는 보존된다.
그렇기에 가용성을 챙길 수 있다는 장점이 있다.
쓰기의 경우 각 디스크에 저장되기에 속도 차이가 발생하지 않는다.
그러나 읽기를 할 때 분산 읽기를 수행하면 모든 디스크에서 나눠서 데이터를 가져오니 속도가 빠르다.
홀수 개의 디스크가 있다면 RAID 1E라고 해서 한 디스크는 내부적으로 절반으로 쪼개서 사용한다고 한다.
문제
지나치게 복제하니 공간의 낭비가 심하다.
여러 개의 디스크를 사놓고는 하나의 디스크 크기만 활용하는 꼴이 된다.
RAID 2,3,4
이 세가지는 기본적으로 방식은 같다.
순서대로 비트, 바이트, 블록 단위로 스트라이핑 후 패리티 디스크를 저장한다.
그래서 큰 차이가 없다는 것인데, 이것들은 지금 거의 사용되지 않는다고 한다.
레이드2의 경우에 비트에 해밍 코드를 이용해 오류검사를 진행한다.
나머지도 비슷한데, 조금 더 복잡한 방식을 사용한다고 한다.
대충 디스크 1과 2에 각각 3과 9를 저장했으면 패리티 디스크에는 그 합인 12를 저장하는 방식이다.
오류 검출을 하기 때문에 레이드들은 하나의 디스크에 손상이 갔을 때 이를 복구해낼 수 있다.
그리고 스트라이핑을 하기 때문에 읽기 성능 향상은 존재한다.
또한 하나의 디스크만 오류 검출로 활용하기에 저장 공간은 디스크 개수에서 하나만 뺀 만큼 늘어나는 격이다.
데이터가 손상되었는지 아닌지 어떻게 확인할까?[3]
일단 패리티 비트를 사용할 수 있다. 가령 1011이란 데이터가 있다면 이 뒤에 모든 합을 짝수(or 홀수)로 만드는 부호를 하나 추가하는 것이다.
만약 짝수 패리티라면 1011에 1을 추가할 것이다.
이렇게 하면 원본 데이터에 손상이 가서 1001이 되어버렸을 때, 합이 홀수가 되어 문제가 생겼다는 것을 인지할 수 있게 된다.
문제는 짝수개의 문제가 발생하면 인지할 수 없고, 정확히 어디에 문제가 생겼는지 알 수 없다는 것.
이것보다 조금 더 발전한 게 해밍 코드.
해밍 거리는 길이가 같은 두 배열에서, 위치는 같은데 값이 다른 문자의 개수를 말한다.
가령 111과 101는 가운데 숫자만 다르므로 해밍 거리는 1이다.
이 공식을 통해 먼저 패리티 비트를 몇 개 추가할지 정한다.
p는 패리티 개수, d는 원본 데이터 개수이다.
처음엔 헷갈렸는데, 그냥 말 그대로 전체 배열 크기를 정하기 위해 나오는 식일 뿐이다.
이를 만족하는 p를 구하여 최소로 추가할 패리티 비트 개수를 정할 수 있다.
그후 패리티 비트를 2의 제곱 위치마다 배치하고, 남은 자리에 데이터들을 넣는다.
각 패리티 비트는 2의 자신의 위치로부터 값승 만큼의 주기로 체크한다.
이런 식으로 말이다.
위에서 말했던 짝수 패리티로 해당 비트에 뭐가 들어갈지만 구해주면 된다.
이렇게 하면 무엇이 되는가?
각 패리티 비트를 토대로 전부 검사를 때린다.
아까처럼 체크하는 범위를 각각 더해보면서 값을 구해본다는 것이다.
참고로 XOR 연산으로도 같은 결과를 낼 수 있는데, XOR 연산 결과를 내고 위치를 나열해보면 한 값이 나온다.
이 값은 현재 어느 비트에 문제가 생겼는지 알려줄 수 있게 된다.
어떤 데이터에 문제가 생겼을 때, 그 위치를 이진수로 나타내는 방법인 것이다.
원리는 탁 느낌이 오는데 말로 설명은 어렵다..
근데 직관적으로 딱 보이는 것은, 이건 오류 하나만 있을 때 위치를 찾고 정정할 수 있다는 것.
그래서 중복 패리티 머시기 방식을 쓸 수 있다는 데 다음에 다루겠다.
문제
패리티 디스크에 부하가 많이 걸린다.
그래서 가장 먼저 죽는 건 거의 패리티 디스크가 된다..
패리티 체크를 위해 연산을 진행하기에 쓰기 성능이 저하된다.
성능 상으로도 다음에 볼 RAID5보다 떨어진다고 한다.
단점이랄지는 모르겠지만, 최소 디스크가 3개 있어야 구성 가능하다.
그리고 RAID4는 간헐적으로나마 사용될 수도 있으나, 2,3의 경우 전혀 사용되지 않는다.
왜냐하면 현대 스토리지는 전부 블록 기반으로 동작하기 때문이다.
RAID 5
가장 사용빈도가 높은 방법.
RAID 4처럼 블록 단위 스트라이핑을 하는데, 패리티 블록을 스트라이프마다 자유롭게 준다.
기본적으로 RAID 4가 가진 장점들을 가지고 있다.
하나의 디스크 크기만큼만 손해 본다는 것이나, 읽기 성능이나..
RAID 0에서 성능과 용량을 소폭 줄이고 안정성을 확보한 방식이라고도 볼 수 있다.
유의사항
이거라고 문제가 없지는 않다.
- 많은 디스크(8개쯤)를 묶으면 패리티 연산오류 확률이 올라가서 깨질 확률이 올라간다.
- 그래서 RAID 6, RAID10을 쓰라는 이야기도 많다.
- 두 개 이상 죽기라도 하면 이 녀석은 복구가 다른 놈들보다 훨 까다롭다고 한다.
- 하나만 죽는 걸 잘 보장해줄 뿐이다.
- 패리티 과정으로 인해 레이드 구축 과정에 연산이 많이 소모된다.
- 8테라 정도 나가는 디스크에서는 복구나 리빌딩에 일 단위로 소모된다고 한다..!
이래서 사실 매우 까다로운 방식이라는 듯.
복구나 리빌딩 중에는 절대 건드리지 말고 잘 되길 기도하라는 말도 있다..
근데 이러면 안정성은 챙길 수 있어도 가용성이...
대충 이런 상황을 걱정할 수 있는 것 같다.
디스크 하나가 뻑났다!
그래서 그걸 교체하려는데 실수로 다른 놈을 뽑아버렸다..
RAID5는 이러면 조진다는 거다.
RAID 6
RAID5에서 조금 더 발전시켰다.
이번에는 패리티를 2개 둔다.
그래서 디스크 2개를 포기하고 용량을 확보하게 된다.
기본 원리 자체는 5와 크게 다르지는 않지만, 그래도 위에서 말한 위험한 상황은 줄어드니 훨씬 안정적이라고 할 수 있다.
디스크가 동시에 2개가 죽는 상황도 흔하지 않기 때문에..
다만 최소 디스크 4개가 필요하고 컨트롤러 자체도 훨씬 비싸다고 한다.
복합 레이드
위의 레이드들이 기본이고, 이를 토대로 여러 가지를 혼합하는 형태로도 많이 사용한다.[4]
이름은 단순하게 각 레이드를 붙이는 방식이고, 아랫단계를 먼저 붙여 네이밍한다.
어차피 레이드 구성하는 건 사람 마음이고, 다양한 방식이 존재할 수 있다.
많이 쓰이는 녀석들만 보자.
RAID 01
레이드 0을 두고 이를 1로 합쳤다.
RAID 10
이건 거꾸로다.
이놈이 디스크 복구가 조금 더 수월하다고 한다.
RAID 01의 경우 디스크 하나가 날아가면 해당 RAID 0을 구성한 부분이 다 깨진다.
그러나 이 놈은 하나가 깨지면 그것만 갈아끼고 RAID 1 컨트롤러가 리빌딩하게 해주면 된다.
RAID 60
보면 알겠지만, 정배는 최상단을 RAID 0으로 두는 것이다.
0을 쓰면 읽기 성능이 향상되니까, 그리고 아랫단을 안정성 높은 놈들로 구성하는 것이다.
RAID 100
안정성을 위한 사람들의 노력..
plaid RAID라고도 부른다고 한다.
SHR
Synology Hybrid RAID
시놀로지에서 만든 레이드 방식이라고 한다.
기본적으로 레이드는 용량이 같은 디스크끼리 묶는 기술이다.
근데 이건 일단 레이드를 진행한 후에 남는 용량으로 또 레이드를 진행한다고 한다.
참고
- 사진[5]