Google File system paper - (4) Fault Tolerance

Jin Hur·2021년 7월 25일
0

[Linux] File system

목록 보기
22/22

GFS를 비롯하여 시스템 설계 시 가장 큰 어려움 중 하나는 잦은 구성 요소 장애를 처리하는 것이다. 구성 요소의 질과 양으로 인해 이러한 문제는 예외(exception)이라기보단 일반적인 것(norm)으로 간주된다.
GFS에서는 수 많은 머신을 전적으로 신뢰할 수 없고, 수 많은 디스크 또한 전적으로 안정적이라 믿을 수 없다. 구성 요소 오류로 인해 시스템을 사용할 수 없거나 데이터가 손상될 수 있다.
이번 장에선 GFS 설계에서 어떻게 이러한 문제를 해결하고 불가피하게 문제가 발생할 때 진단할 수 있도록 시스템에 내장되어 있는 툴들을 논의한다.

High Avaulability

GFS 클러스터에 속한 수백 대의 서버 중 일부는 사용 불가할 수도 있다. 이 경우 단순하면서도 효과적인 두 가지 전략으로 전체 시스템의 가용성(availaility)를 높인다. -> 빠른 복구와 복제(fast recovery and replication).

Fast Recovery

마스터와 청크서버 모두 상태를 복원하고, 어떻게 종료되었든간에 상관없이 몇 초내에 시작하도록 설계되었다(정상 종료와 비정상 종료를 구분하지 않음). 프로세스를 중단하는 것만으로 서버가 종료된다.

Chunk Replication
이전에 설명하였듯 각 청크는 서로 다른 랙의 여러 청크서버에 복제된다. 사용자는 파일 네임스페이스의 여러 부분(to chunk)에 대해 서로 다른 복제수준을 지정할 수 있고, 디폴트는 3이다.
마스터는 청크서버가 오프라인 상태가 되거나 체크섬 확인을 통해 손상된 복제본을 탐지하는 데 필요한 경우 기존 복제본을 복제한다.

Master Replication
안전성을 위해 마스터의 상태 또한 복제된다. 해당 마스터의 작업 로그 및 체크포인트는 여러 머신들에 복제된다. 상태에 대한 변화는 로그 레코드가 로컬 및 모든 마스터 복제본에서 드스크로 디스크로 플러시된 후에만 커밋된 것으로 간주된다. 단순화를 위해 시스템을 내부적으로 변경하는 가비지 컬렉션과 같은 백그라운드 활동은 물론 모든 변화를 담담하는 마스터 프로세스 하나가 남는다.

마스터에 장애가 발생하면 거의 즉시 다시 재시작할 수 있다. 머신 또는 디스크에서 장애가 발생할 때 GFS 외부의 모니터링 인프라는 이전 복제된 작업 로그를 사용하여 다른 머신에서 새 마스터 프로세스를 시작한다. 클라이언트는 마스터의 표준 이름만 사용한다. 이 이름은 마스터가 다른 시스템으로 재배치된 경우 변경할 수 있는 DNS 별칭이다.

또한 쉐도우 마스터는 기본 마스터가 중단된 경우에도 파일 시스템에 대한 읽기 전용 접근을 제공한다. primaty 약간 늦을 수 있다는 점에서 쉐도우라 칭한다.
이러한 기능은 현재 변경되지 않은 파일이나 다소 오래된 결과를 얻어도 상관하지 않는 애플리케이션에 대해 읽기 가용성을 향상시킨다. 실제로 파일 내용은 청크서버에서 읽기 때문에 응용 프로그램에서 stale 파일 내용을 확인하지 않는다. 짧은 창에서는 디렉터리 내용이나 접근 제어 정보와 같은 메타데이터가 stale 해질 수 있다.



Data Integrity

각 청크서버는 체크섬(checksum)을 사용하여 저장된 데이터의 손상을 감지한다. GFS 클러스터 내에는 수 백개의 머신들에 존재하는 수 천개의 디스크가 있다. 읽기 및 쓰기 과정 모두에서 데이터 손상 또는 손실을 일으키는 디스크 장애가 지속적으로 발생한다.

다른 청크 복제본을 사용하여 손상을 복구할 수 있지만, 청크서버 간 복제본을 비교하여 손상을 탐지하는 것은 비현실적이다. 따라서 체크섬 방식을 도입한다.

하나의 청크는 64KB 블록으로 분할된다. 그리고 각각에 해당하는 32비트 체크섬이 있다. 다른 메타데이터와 마찬가지로 체크섬은 메모리에 보관되며 사용자 데이터와는 별도로 로깅되어 영구적으로 저장된다.

읽기 작업의 경우 청크서버는 데이터를 요청자에게 반환하기 전 읽기 범위와 겹치는 데이터 블록의 체크섬을 확인한다. 이에 따라 청크서버는 손상된 것을 다른 머신에 전달하지 않는다. 만약 블록이 기록된 체크섬과 일치하지 않으면 청크서버는 요청자에게 오류를 반환하고, 마스터에게 체크섬 불일치를 보고한다.

이에 요청자는 다른 복제본에서 읽는 반면 마스터는 다른 복제본에서 청크를 복제한다. 유효한 새 복제본이 잇으면 마스터는 불일치를 보고한 청크서버에 복제본을 삭제하도록 지시한다.

0개의 댓글