본문 바로가기

별걸다하는 IT/운영체제 OS

[운영체제 OS] RAID 개념잡기! RAID란? 신뢰성과 성능 두 마리 토끼 잡기, 레이드 기술

반응형

[ 운영체제 Operating System 완전 정복 목차! ]

안녕하세요~!

운영체제 포스팅을 한지 시간이 쪼끔 된 것 같아서, 오랜만에 운영체제 관련 글을 들고 왔어요 ㅎㅎ

오늘 다뤄볼까 하는 포스팅은 RAID관련입니다. ㅎㅎ

RAID란?

출처: http://www.forlooptech.com/what-is-raid-and-differences-between-hardware-and-software-raid/

RAID란 Redundant Array of Inexpensive Disk의 약자예요 ㅎㅎ

굳이 우리말로 옮겨보면, '값싼 디스크의 중복 배열법'이 되겠죠? 왜 이런게 나왔고 이런 이름이 붙었는지는 차근차근 포스팅을 읽다보면 이해가 될거예요 ㅎㅎ

RAID는 사실 이미 상용화가 널리 되어있어서 많이 사용되고 있는 기술입니다. 집에서 데스크탑 하나로 게임을 했던 학생 시절엔,, 사실 볼 일이 별로 없었겠지만,, 중소기업 같은 회사에서 서비스를 위해서 많이 사용되는 기술이예요 ㅎㅎ 데이터 공유라던가 좀 용량을 많이 필요로 하는 개인들도 저렴한 비용때문에 NAS를 간단하게 구축해서 많이 사용하기도 하죠 ㅎㅎ 학과 연구실에서도 데이터 공유를 위해 구축 많이 하는듯? 

 

아무튼 , 이런 NAS구축은 용량도 커야하기 때문에 ~ NAS장비에는 보통 디스크가 최소 4개 이상 달려있습니다.

여러 개의 디스크가 다닥다닥 달려있는데 이를 하나의 디스크처럼, 우리가 자연스레 사용할 수 있게 해주는게 RAID기술입니다. 즉 NAS는 RAID방식이기에 여러 디스크를 하나처럼 사용할 수 있는거예요 ㅎㅎ

왜 이렇게 여러 디스크들을 붙여 사용하게 되었나?

기술이 좋아지면서 점점 디스크 드라이브가 작아지고 가격이 싸졌어요 ㅎㅎ 디스크가 싸니까 여러 개 사는거야 문제 없겠죠! 싼 디스크를 여러 개를 달아가지고 신뢰도를 높이겠다 하는게 첫 번째 목표고, 이에 신뢰뿐만 아니라 성능까지 잡겠다! 하는게 RAID입니다.

결국 싼 디스크를 여러 개를 갖다가 붙여가지고, 마치 자연스레 하나의 디스크처럼 보이면서도 신뢰도와 성능 두 마리 토끼를 다 잡겠다!! 라는거죠 ㅎㅎ

자세히 어떻게 가능한지는 밑에 차차 알아보게 될거예요 ㅎㅎ

 

  • 초기의 RAID는 저용량 하드디스크를 하나의 디스크로 확장하여 사용하는 것이 주류였으나 현재는 백업을 가능하게 하고 안정적인 데이터의 보존과 유지기능, 속도 향상 등에 사용한다. 

RAID 구성 (software vs hardware)

출처:  https://www.datanumen.com/blogs/hardware-vs-software-raid-better/

RAID Software

디스크 4개를 붙일 때, 버스에다가 바로 직접적으로 붙이고 운영체제나 RAID소프트웨어가 RAID기능을 적용하게 할 수도 있고 (소프트웨어 툴 다운받아서 적용하는거죠 ㅎㅎ)

RAID Hardware

말그대로 하드웨어적으로 구성하는건데, RAID카드를 이용해서 구성하거나 마더보드에 내장되어 있는 경우도 있습니다. RAID Controller라는게 별도로 있고 얘 밑으로 디스크 4개가 다다닥 붙어서 하드웨어적으로 제어하면서 RAID기능을 적용해요. 보통 제조될때 하드웨어적으로 RAID 시스템을 수용하도록 구현된 거라 Raid Hardware라 해요. 

 

하드웨어 RAID의 단점이라면 비용이 좀 든다는거..?( RAID카드만 해도 괜찮은거 가격이 최소 100만원이라 해요 ㄷㄷ) 다만 하드웨어니까~ 예측할 수 있듯이 성능면에선 우월하겠죠 ㅎㅎ

 

  • 소프트웨어 RAID  : 고가 하드웨어 RAID의 대안으로, 하드디스크만 여러 개 있으면 운영체제에서 지원하는 방식으로 RAID를 구성하는 방법을 말한다. 하드웨어 RAID와 비교하면 신뢰성이나 속도 등이 떨어질 수 있지만 아주 저렴한 비용으로 좀 더 안전하게 데이터를 저장할 수 있다는 점에서 적극 고려해볼 수 있는 방식이다.

 

RAID가 잡으려는 신뢰도와 성능은 무엇인가!

4개의 디스크를 RAID CONTROLLER아래에 연결했다고 하면 위와 같은 그림으로 생각할 수 있겠죠?

그런데 운영체제가 봤을 때에는 이 디스크들이 하나인 것처럼 보이는 거예요 ㅎㅎ 그렇게 보이도록 raid controller가 관리를 해줍니다. 위에서 디스크 하나로 쓰는거보다 이렇게 여러개로 구성함으로써 신뢰도와 성능! 두 마리 토끼를 잡으려고 한다했었어요

 

신뢰도를 높인다는게 뭘까?

내가 너를 신뢰할 수 있다 = 데이터가 사라질까봐 걱정하지 않고 믿고 맡겨도 된다~

요런고~ 요런게 신뢰도가 높은거겠죠 ㅎㅎ하나의 디스크에 데이터를 저장했는데 이 디스크가 고장나면 데이터가 그냥 증발! 사라지는거예요! ㅎㅎ

그런데 만약 디스크가 싸서 여러개를 가지고 있다? 1번 디스크에 데이터를 저장할 때 2번 디스크에 그대로 또 저장해놓으면, 1번 디스크가 고장나도 2번 디스크에서 읽을 수 있겠죠? 이렇게 하면 신뢰도가 2배로 높아지는 겁니다. 이렇게 신뢰도를 높일 수 있는 이유는, 디스크 하나의 가격이 싸기 때문에라는거~

 

고러면 성능을 높인다는 개념은?

하나에서 데이터를 읽는거랑 여러 개에서 데이터를 읽는거랑, 당연히 여러 개에서 동시에 읽는게 훨씬 빠르겠죠 ㅎㅎ 빠르게 일처리하는거 그게 성능이 좋은거죠 ㅎㅎ

 

신뢰도 높이는 세 가지 방법

 

위 그림을 보면 신뢰도를 높이는 방법이 Redundancy!라고 되어있죠 ㅎㅎ 즉 중복으로 뭔가를 저장해서 이용해서 신뢰도를 높이는데, 이렇게 신뢰도를 높이는 방법이 크게 세 가지가 있다고 생각하면 됩니다. 

1. 미러링 Mirroring

2. 패리티 디스크 Parity Disk

3. 에러 코렉팅 코드 ECC

 

각각 어떻게 다른지 알아볼게요 ㅎㅎ

▶미러링 Mirroring

미러링은 정말 간단하고 직관적인 방법이예요 ㅎㅎ쉐도잉(shadowing)이라고 하기도 해요 ㅎㅎ

에러 대비 백업용을 똑같이 하나 만들어두는거죠 ㅎㅎ

내가 사용하는 A디스크가 있으면 A백업용 하나 만들어두는거고, 디스크 A,B두개를 사용한다 하면 A백업용 B백업용 각각 디스크를 전담마킹하는 걸 두는거죠!

디스크에 에러가 발생해도 백업용 디스크의 데이터는 그대로 보존되기 때문에 미러링기술을 결함허용(Fault-tolerance라고 부릅니다)

암튼, 미러링을 하려면 디스크 용량이 두 배로 있어야 합니다. 10개 디스크면 총 20개가 있어얗... 너무 많지 않아요?ㅎㅎ 당연히 다른 방법도 나왔겠죠?

 

▶패리티 디스크 Parity Disk

미러링으로 하려면 두 배나 필요해 그런데 두 배는 너무 많아~~ 그래서 하나만 두자! -> parity disk하나만 두는거예요 ㅎㅎ

총 디스크 4개 중 세 개는 데이터를 저장하는데 쓰고 나머지 하나는 paridy disk로 두는겁니다.

그러면, 이 세 개 중 하나가 고장이 나면, 나머지 두 개와 parity disk를 이용해서 그 고장난 애를 복구해내는 방법을 말해요 ㅎㅎ 만약 미러링 방식을 썼다면, 디스크 3개를 저장하는데 사용했다면 총 필요한 디스크는 총 6개가 됐겠죠? 근데 이 방법을 쓰면, 세 개에 parity disk 하나만 더 두면 끝이예요! 그리고 하나 정도의 디스크가 고장나는거 까지는 커버쳐줍니다.

그런데 요 방법의 문제점은 디스크 두개가 나가면 복구를 할 수가 없어요. 따라서 미러링보다 가격을 낮춘 대신, 신뢰도도 좀 낮춘 방식입니다.

 

▶ 에러 코렉팅 코드 ECC (Error Correcting Code)

미러링을 사용하자니 신뢰성은 짱인데, 늘어나는 디스크가....

패리티 디스크를 사용하자니,, 가격은 좋은데 한 개 이상의 디스크가 고장나면 망하니까 좀 불안해,,

당연히 요 둘 사이에 있는 방식이 존재를 하겠죠?

Error Correcting Code의 줄인말인 ECC가 그렇습니다 ㅎㅎ

패리티 디스크가 하나 디스크가 FAIL나면 커버 가능하지만, 두개가 FAIL나면 커버 불가능하죠

하지만 ECC는 패리티 디스크보다 디스크를 추가로 더 둬서 해밍코드 방식으로 동작게 함으로써 커버가 가능합니다. 요 아이는 읽을 때마다 데이터에 에러는 없었는지 확인도 해주지만, 딱 봐두 구현하기 어려워보이죠?

비싸고 복잡한 구현방법 때문에, 그리고 그 동안 더 좋은 기법들이 나왔기 때문에 더 이상 사용되지는 않아요

 

신뢰도를 높이는 3가지 방법을 비교해보면, mirroring쪽으로 갈수록 가격은 비싸지겠죠 하지만 올라갈수록 신뢰도도 높아집니다.

 

대략 STORY FLOW~

디스크 10개를 써서 10개에 데이터를 저장을 해놨다고 합시다. 근데 서비스를 1년 365일 켜놓고 운영하다보니까 디스크가 고장이 나는 경우가 있어요!ㅎㅎ 제품이 오래될수록 제품의 사이클주기 때문에 고장이 잦아질수도 있고 여러 주변환경 문제로 장기적인 원인이 되는 경우도 있고,,, 그럼 고장이 나는데 한 번에는 하나만 고장이 나더라! 그럼 패리티 디스크에서 게속 서비스가 되잖아요 ㅎㅎ 하나의 디스크만 더 있어도 신뢰도가 확 높아지라 그런데 디스크가 동시에 두 개가 고장나면 서비스가 중단되는 거죠! 

아 근데 우리는 서비스가 절대 중단이 되면 안된다. 그럼 미러링을 써야하는데 그 중간이 ECC

디스크가 10개인데 미러링을 하려면 디스크 10개를 복사해야 하는거고, (총 20개 필요)

근데 봤더니 디스크가 기껏해야 한 2~3개만 fail나더라 그럼 디스크 3개만 더 사가지고 ECC로 싸게 운영한다 이런 개념이 되는겁니다.

여러개의 조합으로 인해 다양한 configuration이 나타나지만, 일단 맥락은 이렇게 이해하고 있으면 됩니다 :)

 

성능을 높이는 두 가지 방법 STRIPING

성능에 관해서는 striping이라는 방법을 쓰는데 첫 번째는 bit striping이라는 방법이 있고, 두 번째는 block striping이라는 방법이 있습니다.

1. 비트 스트라이핑

2. 블럭 스트라이핑

▶ 비트 스트라이핑 Bit Striping

근데 STRIPE가 뭐죠? 우리말로 보면 줄이예요 줄!

아래는 비트스트라이핑을 한건데 저 주황색 쪼꼬미들이 줄 같이 보이지 않나요?ㅎㅎ

그래서 지금 현재 원래 디스크 하나에다가 저장을 하려면 디스크 블락 크기가 왼쪽 만큼이예요, 그럼 요걸, 요렇게 네 개에다가, 즉 디스크 블록 하나를 요렇게 4개에다가 비트로 쪼개어 나눠 저장하는걸 비트 스트라이핑 방법이라고 합니다.

 

만약 블럭이 4K라고 하면 Raid Controller가 4K를 알아서 1K 1K 1K 1K이렇게 나눠서 저장을 하는거예요.

그럼 나중에 아까 write한거 데이터 읽어줘! 이러면 여기 여기 여기 네 개의 디스크가 동시에 읽어서 합쳐가지고 전달하겠죠? 보통 요청은 데이터를 순차적으로 읽어서 줘야 하는 요청이 많은데, 이렇게 하면 동시에 읽으니까 하나에서 읽는거보다 속도가 빠를거예요 ㅎㅎ

디스크 블록 하나를 여러 개로 쪼개서 이런 줄을 만들어서 저장하는 방법을 bit striping이라고 한다!

 

▶ 블럭 스트라이핑 Block Striping

Block striping은 이제 디스크 블락이 0 1 2 3번 이렇게 여러개 블럭들이 있으면

원래라면 0,1,2,.. 이게 하나의 디스크에 쭉 저장이 되는데

블럭 스트라이핑을 하면 0번 블록은 첫 번째 디스크에 저장시키고, 1번 블록은 두 번째 디스크에 저장시키고

2번 블록은 여기 3번 블록은 여기 이렇게 나누어서 저장시키는걸 말해요 ㅎㅎ

 

보통 연속된 데이터의 접근이면 디스크블럭 0번 1번 2번 3번을 읽어라 그러면, 하나의 디스크에서 0번 읽고 1번읽고 2번읽고 3번읽고,, 이렇게 하는 것 보다, 각각에서 디스크에서 동시에 읽으니까 얘의 성능이 더 좋겠죠 

 

  • STRIPING이란? 연속된 데이터를 여러 개의 디스크에 라운드로빈 방식으로 기록하는 기술입니다. 네 개의 드라이브가 있을 경우, 보통 하나의 섹터를 읽을 수 있는 시간에 네 개의 섹터를 동시에 읽을 수 있게 되는 성능을 가지게 되는거죠 ㅎㅎ

비트레벨 스트라이핑보다 블락레벨 스트라이핑 뭐가 더 좋을까?

디스크라고 하는 것은 한 번에 가서 많이 읽어야 해요, 근데 비트 레벨은 디스크가 쪼금쪼금 나눠서 읽기 때문에 성능의 향상 폭이 그렇게 크지 않습니다. 그래서 비트 레벨 스트라이핑은 configuration에 있긴 한데 잘 안쓰인다는 사실!

 

마지막으로..

다음포스팅은 RAID configuration (RAID LEVEL)에 대해 진행될거예요 ㅎㅎ

Raid는 이 reliabilty와 performance 두 가지를 다 쓰는거니까, 이 신뢰도를 높이는 세 가지 방법과 성능을 높이는 둘의 조합으로 여러 개의 configuration이 나옵니다.

NAS에만 최소 4개의 디스크가 달려있는데 이런 많은 disk들을 Raid의 configuration으로 여러분이 설정을 해서 쓸 수 있어요. 어떤 configuration을 쓸 지는 사용자가 정하면 됩니다. 그러면 어떤 configuration을 써야 할지 여러분들이 이해를 하고 있어야 하겠죠~ 내가 NAS장비를 Disk 8개를 사서 쓰면 나는 어떤 configuration을 써서 써야되겠구나를 알 수 있어야 해!

다음 포스팅에서는 그 configuration에 대해서 하나하나 자세히 살펴볼거예요. 이런 설정도 처음부터 다 성립되어 있던게 아니라 어떤게 발전되고, 또 추가되고 이렇게 히스토리가 있겠죠? 그 흐름과 단계에 대해서 살펴보도록 합시다. 일단 오늘 배운 요 원리를 이해 하면 뒤에 나오는 RAID종류와 레벨에 대해서는 이해하기가 쉬워요 ㅎㅎ

 

오늘은 여기까지! RAID의 개념과 기본 원리에 대해 알아봤어요 ㅎㅎ

도움이 되셨다면 공감 or 댓글 or 광고보답으로 마음을 표현해주시는건 어떤가요/?

다음 포스팅에서 또 봐요 !

▼다음 포스팅 RAID0, RAID1, RAID2

 

[OS 운영체제] RAID LEVELS 레이드 단계와 배경, (RAID 0, RAID 1, RAID2)

[운영체제 Operating System 완정 정복 목차 링크 ] 안녕하세요~! 저번 포스팅에서 RAID의 개념, 원리, 기능 등에 대해서 전체적으로 OVERVIEW하는 시간을 가졌었어요 ㅎㅎ ▼해당 포스팅이 기억이 나지 않으면..

jhnyang.tistory.com

 

반응형