Recommanded Free YOUTUBE Lecture: <% selectedImage[1] %>

Contents

Volume 구성

create volume을 이용하면 볼륨을 만들 수 있으니, 볼륨을 만드는 것은 결코 어렵지 않다고 할 수 있다. 하지만 예컨데 퍼블릭 클라우드 서비스를 위해서 수백 테라바이트의 볼륨을 구성해야 한다면, 상당한 고민이 필요할 것이다. 고민 뿐만 아니라 테스트에도 많은 시간이 필요하다.

운이 참 좋게도 24개씩 Disk가 꽂혀 있는 JBOD 4개로 구성된 스토리지를 테스트할 기회를 얻었다. SAS 인터페이스를 가지는 2T짜리 Disk이니 대략 190T의 공간을 구성하고 테스트하는 셈이다. 좋은 운이다. 삽질은 좀 했지만.

파일 시스템 타입 선택

이런 장비를 가지고 놀라고 줬을리는 없을 것이다. 저장공간을 서비스하기 위한 용도로 다음의 요구사항에 맞는 파일 시스템을 선택해야 했다.
  • 성능
  • fault tolerant
    • volume에 대한 fault tolerant
    • storage node에 대한 fault tolerant : 이건 HA로
  • 관리 용이성
그래서 ZFS의 RADIZ-2를 선택했다.
  • 성능 : striped로 대역폭을 높일 수 있을 테다.
  • fault tolerant : double parity이니 하나의 파일 시스템에서 2개의 Disk에 문제가 생기더라도 복구할 수 있을 것이다.

일반적인 문제와 최악의 문제

일단 fault tolerant.

disk에 문제가 생겨서 사용할 수 없게 되면, 여분의 disk가 문제의 disk를 대체할 수 있도록 구성한다. spare 디스크를 준비하면 될 일이다. 만약 특정 disk에 문제가 생기면 spare 가 올라오고 resilvering 과정을 거쳐서 데이터를 복구할 것이다. 하나의 파일 시스템에서 3개의 디스크가 동시에 문제가 생긴다면 데이터를 잃어버릴 수도 있지만 이런 일은 발생하지 않는다고 가정한다. 컴퓨터 세계에서 가정한 상황은 반드시 일어난다는 격언이 있긴 하지만, 돈과 시간이 유한하니 어쩔 수 없지 싶다.

가능한 최악의 상황에도 유저 정보를 복구할 수 있어야 한다. 최악의 상황은 JBOD 하나가 몽땅 날라가는 것으로 가정했다. JBOD의 입출력 어뎁터가 날아간다던가 전원이 나가거나, SAS 케이블에 문제가 생기거나 하는 뭐 그런 상황이다. 먼저 JBOD 4개의 disk를 골고루 분배해서 파일 시스템을 구성해야 할테고, JBOD 하나가 몽땅 날아가서 '24개의 disk가 빠지더라도 데이터 복구가 가능하도록 해야 한다.

24개의 disk가 빠져도 하나의 파일 시스템에서 2개 이상의 디스크가 빠지지 않게 하려면 96개 disk 기준으로 적어도 12개 이상의 파일 시스템을 만들어야 할 것이다.
  • 12 * 2 = 24
  • 이제 96 개의 디스크를 12개의 파일 시스템에 나눈다.
하지만 위는 96개의 disk를 모두 데이터 볼륨에 할당 할 경우로, 실제로는 spare에 사용할 디스크와 cache 디스크 거기에 (HA 구성을 위해서)heartbeat에 사용 할 디스크를 빼고 구성해야 한다.
  • heatbeat disk x 1
heatbeat용으로 하나를 빼기로 했다. 3.1.x 버전은 데이터 볼륨의 디스크를 heatbeat disk로 사용할 수 있지만, (지금 테스트 중인) 3.0.5 버전은 heatbeat 전용으로 분리해야만 한다. 3.0.5는 단지 하나의 디스크만 heatbeat 디스크로 사용할 수 있다. 3.1.1은 하나 이상의 heatbeat 디스크를 사용할 수 있다.
  • cache x 4
각 JBOD에는 cache로 사용할 SSD 하나씩이 들어 있다.
  • raidz2 파일 시스템을 12개 만들기로 했다. 하나의 파일시스템에 7개의 디스크를 배분하기로 했다. 그러면 (12 * 7)+4+1= 89
  • spare disk x 7
남은 디스크가 7개다. 남은 7개의 디스크는 spare로 전용하기로 했다.

디스크는 아래와 같이 분산했다. 이렇게 하면 이론적으로 하나의 JBOD이 빠져도 parity를 이용한 완전한 복구가 가능할테다. google docs로 힘들게 그렸는데, 이런 프로그램 하나 만들어야 할 것 같다.

디스크 분산 스크립트

sasinfo를 이용해서 JBOD별 디스크 정보를 확인할 수 있다. 해서 노가다로 디스크를 선택해서 파일 시스템을 만들 수 있겠지만 말그대로 노가다다. 그래서 sasinfo 정보를 파싱하는 perl 스크립트를 만들었다.

히스토리

  • 2012년 1월 10일 작성