오늘은 Storage Space에서 사용하는 LRC(Local Reconstruction Code)에 대해 알아보겠습니다.
일반적으로 Raid 6는 2개의 Parity를 가지고 있습니다.
일반적으로 Raid 구성 시 사용하는 Reed-Solomon(RS) Algorithm의 경우 2개의 Data영역 Failure가 발생해도 안전한 구성입니다.
물론 Parity가 두 개라는건 한 개의 Parity에 비해 Write 시 I/O 비용이 증가합니다.
(두 개의 Parity 영역까지 계산해야하기 때문이죠)~
JBOD 시나리오에서는 2개의 Disk Failure까지 커버할 수 있습니다.
심지어 JBOD 2개 Failure까지 커버할 수 있습니다.
일반적으로 Disk Fault가 1개가 발생하기 때문에 과도한 리소스 사용일 수 있습니다.
이런 점을 개선하기 위해 LRC 알고리즘이 Storage Space에서는 사용되었습니다.
그럼 LRC는 무엇이냐?
Local Parity와 Global Parity라는 개념을 두어 안정성과 성능 두가지를 잡기 위한 알고리즘 입니다.
우선 안정성 측면에서 살펴보겠습니다.
위와 같이 RAID 5와 같이 Local Parity가 사용되어집니다.
단, RAID 5와 다른 점은 Global Parity가 존재합니다.
일반적인 Data Disk Fault의 경우 Local Parity를 사용하여 Data를 복원합니다.
예를 들어 다음과 같이 Data가 구성되어 있다고 가정하겠습니다.
Disk 명 |
Data |
D11 |
1 |
D12 |
2 |
D13 |
3 |
D14 |
4 |
Local Parity P1 = 10
만약 D11이 Fault가 난 경우 다음과 같이 Data가 복구되어 집니다.
10 - (2 + 3 + 4) = 1
일반적인 RAID 5와 동일하다고 보시면 됩니다.
그럼 Global Parity의 용도는 무엇일까요?
위와 같이 JBOD Enclosure가 4개로 분할되어 있는 경우를 예로 들업보겠습니다.
여기서 1번 Enclosure가 H/W 장애로 죽게되면 Local Parity를 사용하여 복원이 가능합니다.
만약 1번 Enclosure가 장애가 나고 D12 Disk가 Fault 가 나면!!!?
RAID5로는 복구가 불가능하게 됩니다.
(이럴때 RAID6로 할걸이란 후회를 하게 되겠죠;;)
하지만 LRC 알고리즘에는 Global Parity가 존재합니다.
D23, D24, P2, G1을 사용하여 복구가 가능하게 됩니다.
LRC 알고리즘은 결국 RAID6의 안정성과 RAID5의 성능을 혼합하여 만든 알고리즘이라는 것을 알 수 있습니다.
다음으로 성능 측면으로 알아보도록 하겠습니다.
위와 같이 12 + 3 + 1 구성인 경우 RAID6는 Storage 용량이 18개가 필요합니다.
LRC의 경우 16개가 필요하죠
즉 2개의 용량을 절약할 수가 있습니다.
(간단하게 갯수로 알아보아 2개뿐이네 라고 생각할 수 있지만 LUN의 단위가 100GB라고 하면 200GB를 절약할 수 있기 때문에 적은 용량은 아닙니다.)
Parity 연산에 사용하는 비용은 동일하다고 봐도 될거 같습니다.
(Local Parity 연산 + Global Parity 연산)
단 Disk Fault 시는 위에 설명한 대로 Reconstruction I/O는 줄어들며 Enclosure + Disk 장애 or Disk 2개 이상 장애 시는 Reconstruction I/O도 동일하다고 보면 됩니다.
2 개 이상의 Disk가 동시에 Fault 날 확률이 적다고 가정 했을때 일반적인 Disk Fault 시에도 성능에 우위를 가져 올 수 있습니다.
이렇게 Storage Space에서는 LRC라는 Algorithm을 도입하여 Storage 용량과 성능을 최적화하기 위해 노력하였다는 것을 알 수 있습니다.