Linux 및 Amazon EC2의 ZFS

Linux 및 Amazon EC2의 ZFS

Amazon EC2에서 실행되는 Linux 시스템에서 스토리지 공간을 동적으로 확장해야 하는 상황에 직면하여 ZFS를 생각해 냈습니다. 내 기억이 정확하다면 ZFS는 중복되지 않은 JBOD 유사 배열을 동적으로 확장하는 방법을 지원합니다.

진행 중인 프로젝트에 대한 몇 가지 요구 사항이 있습니다.

  1. 필요한 경우 어레이를 다른 EC2 인스턴스로 이동할 수 있어야 합니다.
  2. 가동 중지 시간 없이 ZFS 볼륨에 새 "드라이브"를 추가하여 ZFS 어레이를 동적으로 확장할 수 있어야 합니다.

가능합니까? ZFS가 어레이를 동적으로 확장하는 기능을 제공하는 경우 스크립트를 실행하여 새 EBS 볼륨을 동적으로 생성하고, 이를 EC2 인스턴스에 연결하고, ZFS가 이를 풀에 추가하도록 할 수 있어야 합니다. 이 모든 작업은 다운타임 없이 동적으로 수행되어야 합니다.

답변1

Linux의 ZFS에는 팔로어 수가 아무리 많아도 충분하지 않습니다. ZFS는 효과적으로 사용자를 잠급니다. 기본 형식은 복구 디스크와 호환되지 않으며 ZFS 배포판은 거의 없습니다.

저는 ZFS에 대한 편견 때문에 이러한 제한 사항을 무시하는 경향이 있습니다. SmartOS/ZFS 기반 클라우드 호스팅을 제공하는 서비스 공급자를 검색할 수 있습니다.

Linux 파일 시스템 ext3/ext4 및 기타 다양한 파일 시스템은 동적 성장을 허용합니다. Linux에 내장된 볼륨 관리자인 LVM을 사용하면 볼륨을 새 디스크로 동적으로 확장할 수도 있습니다. 실험 이외의 경우 이는 현재 최고의 Linux 권장 사항이어야 하지만 ZFS가 Linux에서 충분히 큰 추종자를 얻으면 변경될 수 있습니다.

Linux + LVM + ext3의 프로세스는 다음과 같습니다.

예: LVM 볼륨 그룹 myvg, 마운트된 볼륨 이름은 uservol1, Linux의 디스크 장치는 /dev/sdf입니다.

  1. 가상 머신에 디스크를 할당합니다. (Amazon Management Console에서 EBS 볼륨을 생성하고 해당 ID를 기록한 후 인스턴스에 할당합니다.)
  2. EC2 인스턴스에는 장치 노드 생성을 위한 몇 가지 udev 규칙이 있어야 합니다. 따라서 /dev/sd*에 새 디스크가 표시되어야 합니다... 인스턴스에 로그인하여 EBS 볼륨이 표시되는지 확인합니다(예: fdisk -l /dev/sdf, cat /proc/partitions, blkid 실행).
  3. 파티션 테이블을 생성해야 하는 경우:fdisk / sfdisk
  4. LVM에서 사용하도록 초기화되었습니다.pvcreate /dev/sdf
  5. LVM 볼륨 그룹에 디스크(물리 볼륨) 추가vgextend myvg /dev/sdf
  6. 볼륨 크기 늘리기:lvextend -L +1024G /dev/myvg/uservol1
  7. ext3/ext4 파일 시스템을 확장합니다.resize2fs /dev/myvg/uservol1
  8. ( df -h)를 선택하면 마운트된 파일 시스템에 이제 더 많은 공간이 있는 것을 볼 수 있습니다.

양자 전자 장치.

답변2

예. ZFS를 사용하여 어레이를 자동으로 확장할 수 있습니다. 다음 속성을 설정하기만 하면 됩니다.

# zpool set autoexpand=on pool
# zpool set expandsize=on pool

이러한 속성은 두 가지 이점을 제공합니다.

  1. 풀에 VDEV를 추가하면 자동으로 확장됩니다.
  2. 1TB 드라이브를 2TB 드라이브로 교체하면 모든 드라이브가 교체된 후 새 드라이브 크기에 맞게 풀 크기가 자동으로 조정됩니다.

몇 가지 고려 사항이 있습니다.

  1. 드라이브를 삭제할 수 없으며 풀에서 VDEV를 삭제할 수도 없습니다. 따라서 풀을 확장할 수는 있지만 축소할 수는 없습니다. 그러나 미러에서만 드라이브를 분리할 수 있습니다.
  2. 모든 드라이브는 동일한 크기, 동일한 속도 등 사양을 가져야 합니다. 동일한 제조사와 모델이 필요하지 않습니다.
  3. 모든 VDEV는 동일한 VDEV여야 합니다. 풀에 RAIDZ가 있는 경우 모든 VDEV는 RAIDZ여야 합니다.
  4. 모든 VDEV의 크기는 동일해야 합니다. VDEV가 2TB인 경우. 모든 VDEV는 2TB여야 합니다.

관련 정보