ZFS 기반의 NAS/SAN 스토리지 만들기

부제: 최소 금액으로 만들어보는 통합 스토리지 시스템과 활용법

 작성자: 김경민(stone@nuxinfo.net)
1. 부득이 하게 경어는 생략합니다.
2. 마음대로 퍼가셔도 되며 수정해서 작성자 이름을 변경 후 재 배포해도 상관 없습니다. :-)
3. 내용 중 명확히 잘못된 부분이 있으면 언제라도 수정하셔도 됩니다.
4. 내용에 대한 반론이 있다면 메일 또는 공개 게시판에 반론 제기하시면 됩니다.
5. 부족한 부분이나 추가했으면 하는 부분이 있다면 메일로 요청하시면 됩니다만 언제 추가할 지 장담은 못합니다.

ZFS(Zettabyte File System)란?

 

* ZFS 파일 시스템은 기존의 유닉스 파일시스템을 대체하기 위하여 2005년 SOLARIS10에서 처음 소개된 파일시스템으로
파일시스템들 가운데 최초로 128bit파일 시스템을 적용하여 거의 무한대의 용량을 제공하며 파일시스템 자체에서 볼륨 매니저 기능을 포함하여
시스템 내에 있는 하드 디스크들을 구성하거나 스토리지 풀로 통합하여 사용하는 것이 특징이다.[http]wikipedia

2.1 ZFS 기본컨셉과 장점

물론 장단점이 있긴 하지만 필자가 생각했을 때 ZFS가 갖는 좋은 점 몇 가지를 소개하고자 한다.
극강의 파일시스템이라고 불리는 ZFS의 유연성과 편리함을 잘 활용했으면 봤으면 한다.
위의 그림을 다시 풀어보자면 아래와 같은 차이점이 있다는 것을 알 수 있다.
1. 고전적인 Unix,Linux,FreeBSD,etc 에서의 파일 시스템 사용 절차
Device인식(/dev/sda)=> partition => mkfs.ext3 /dev/sda1(format) => mount
또는
format =>partition => newfs /dev/rdsk/c0t0d1s5 => mount /dev/dsk/c0t0d1s1 /mnt
2. LVM 기반의 파일시스템 사용 절차
Device인식(/dev/sda) => PV생성 => VG(volume group)생성 => LV(logical volume)생성 =>mkfs(format) => mount
3. ZFS 사용 절차
zpool생성 => zfs 생성
정말 간단하지 않은가? :-)
ZFS는 고전적인 파일시스템의 개념과 LVM같은 볼륨 매니저가 결합된 형태이며 별도의 파일시스템 생성과 Mount과정이 필요가 없습니다.
물론 대부분의 경우 /storagepool/dataset 형태로 스토리지 풀 하위 디렉토리로 마운트가 되나
필요에 따라 원하는 위치로 마운트 시켜서 사용해도 된다.
  • 간단한 관리 명령어

위의 내용과 다소 중복이 되지만 ZFS의 경우에는 zpool,zfs명령 2가지로 모든 파일시스템에 관한 컨트롤을 다하게 되어 여러 명령어들이 기억하고 배울 필요가 없어진다.
또한 fatab,vfstab 같은 파티션 설정 파일자체도 필요가 없다.

– LVM case –
1. pvcreate /dev/sda /dev/sdb
2. vgcreate VG01 /dev/sda /dev/sdb
3. lvcreate -n lv-home -L 50G VG01(VG01 볼륨 그룹에 50G의 logical volume생성)
4. mkfs.ext3 /dev/VG01/lv-home
5. mount /dev/VG01/lv-home /home 또는 mount /dev/mapper/VG01-lv-home /home

– ZFS case –

  • 128bit 파일 시스템으로 거의 무제한 용량의 파일시스템을 활용할 수 있다.

zpool max size: 256zettabytes
참고로 래드햇 리눅스 기준으로 리눅스에서는 약 16T~500T(xfs사용 시)용량을 지원한다.

  • Software Raid system 지원

H/W raid시스템과 비슷하게 mirror(raid1),raid-z(raid5),raid-z2(raid6)등을 구현 가능 하도록 되어있어 값비싼(?) H/W RAID system 을 대체할 수 있다.
혹자는 성능의 문제를 제기할지도 모르겠지만 이 글의 의도는 성능에 촛점을 맞추기보다는 다양한 요구에 대처할수 있는 다기능 스토리지 구성에 목적이 있음을 인지해주기를 바란다.
각각의 장 단점이 있으므로 이 부분은 엔지니어들의 선택에 달려있다.

  • 빠른 snapshot 과 rollback,clone
    zfs 의 유용한 기능중의 하나인 snapshot,clone,rollback을 이용하여 관리자가 원하는 시점의 데이터에 쉽게 엑세스 할 수 있다. 실제 사용하는 예제는 추후 스토리지 활용편에서 좀 더 다루겠지만 간단한게 사용하는 예제를 소개해 보도록 하겠다.

위의 과정처럼 snapshot 을 생성해두고 뭔가 문제가 발생했을 때 snapshot을 생성한 시점으로 바로 데이터를 복구할 수 있다.
windows의 VSS(volume shadow copy)와 유사하지만 virtual devices(zvol)를 지원하고
생성된 snapshot을 복제 가능하다는 점에서는 MS VSS보다는 유연하다.

  • 데이터 용량 및 관리의 편의성 제공

zfs의 경우 스토리지풀에 생성된 데이터를 각각의 zfs(or zvol)들이 모두 공유하기 때문에 스토리지풀의 용량만 잘 관리해주면 disk full로 인한 시스템 장애에서 벗어날 수 있다.
참고로 각각의 zvol,dataset(zfs)의 용량을 제한(quota) 및 예약(특정 용량 만큼은 보장하도록) 지정할 수 있다.
아래의 고전적인 파일시스템에서의 용량 증설 과정을 살펴보자.
1. 새 디스크 추가=>파티션 생성 및 파일시스템 생성=>mount=>기존데이터 복제=>fstab or vfstab수정
또는 LVM의 경우
2. 새 디스크 추가 => PV 생성=> VG확장=> LV확장 => 파일시스템 확장(resize2fs,xfs_grow,etc)=>fstab 수정

참고)
ext3의 경우 online resize가 안되므로 반드시 umount하고 resizing을 진행해야 한다.
xfs의 경우 online resize가 가능하므로 동적으로 용량 변경이 필요하고 무정지 시스템이 필요하다면
리눅스의 경우 필자는 XFS를 사용하기를 권장한다.

아래의 예제는 zfs 에서 스토리지풀을 확장하는 과정이다.

  • 파일시스템의 기본 공유 기능

zfs는 기본적으로 nfs,smb(cifs) 등을 제공하여 별도의 설정이 없이도 쉽게 데이터를 공유할 수 있다.
물론 접근 제어(ACLs)의 설정등은 windows시스템보다는 다소 복잡한 면이 있지만
한번 잘 설정해두면 큰 문제없이 사용이 가능할 것이다.

  • 아키텍처와 상관없는 데이터 마이그레이션

스토리지 시스템의 H/W raid 컨트롤러가 고장이 났을 경우 동일 모델의 컨트롤러가 필요한 반면
zfs의 경우 zpool export/import를 이용하면 스토리지풀을 OS와는 상관없이 마이그레이션이 가능하다.
FreeBSD에서 만든 zpool을 Linux,opensolaris,solaris등에서도 별다른 설정 없이
가져와서 사용이 가능하다는 이야기가 된다. 물론 반대의 경우도 당연히 가능하다.

Pages:

stone has written 25 articles

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">