Persistent Disk 볼륨 복제


이 문서에서는 가상 머신(VM) 인스턴스에서 영구 디스크에 액세스하는 방법과 영구 디스크 복제 프로세스를 설명합니다. 또한 영구 디스크의 핵심 인프라도 설명합니다. 이 문서는 시스템에서 영구 디스크를 사용하려는 Google Cloud 엔지니어와 설계자를 대상으로 합니다.

영구 디스크는 물리적 머신에 연결된 로컬 디스크가 아닌 VM에 네트워크 블록 기기로 연결된 네트워킹 서비스입니다. 영구 디스크에서 읽거나 쓰면 데이터가 네트워크를 통해 전송됩니다. 영구 디스크는 네트워크 스토리지 기기이지만 기존 디스크에서 제공할 수 없는 용량, 유연성, 안정성 면에서 많은 사용 사례와 기능을 지원합니다.

영구 디스크 및 Colossus

영구 디스크는 분산 블록 스토리지 시스템인 Google 파일 시스템 Colossus와 함께 실행되도록 설계되었습니다. 영구 디스크 드라이버는 데이터가 VM에서 네트워크로 전송되기 전에 VM의 데이터를 자동으로 암호화합니다. 그런 다음 Colossus에서 데이터를 유지합니다. Colossus에서 데이터를 읽으면 드라이버는 들어오는 데이터를 복호화합니다.

이미지

영구 디스크는 스토리지 백엔드에서 Colossus를 사용합니다.

디스크를 서비스로 사용하면 다양한 경우에 유용하며 예를 들면 다음과 같습니다.

  • VM을 중지하는 경우보다 VM을 실행하는 동안에 디스크 크기를 더욱 간편하게 조절할 수 있습니다. VM을 중지하지 않고도 디스크 크기를 늘릴 수 있습니다.
  • 디스크와 VM이 같은 수명 주기를 공유하지 않거나 같은 위치에 있지 않더라도 디스크를 더욱 간편하게 연결하고 분리할 수 있습니다. VM을 중지하고 영구 부팅 디스크를 사용하여 다른 VM을 부팅할 수 있습니다.
  • 디스크 드라이버가 복제 세부정보를 숨기고 자동 쓰기 시간 복제를 제공할 수 있으므로 복제와 같은 고가용성 기능을 더욱 쉽게 사용할 수 있습니다.

디스크 지연 시간

디스크를 네트워킹 서비스로 사용하는 경우 오버헤드 지연 시간을 모니터링하는 데 사용할 수 있는 다양한 벤치마킹 도구가 있습니다. 다음 예시에서는 NVMe 인터페이스가 아닌 SCSI 디스크 인터페이스를 사용하며 영구 디스크에서 4KiB 블록을 읽는 몇 가지 방법을 수행하는 VM의 출력을 보여줍니다. 다음은 읽기에 표시되는 지연 시간의 예시입니다.

$ ioping -c 5 /dev/sda1
4 KiB <<< /dev/sda1 (block device 10.00 GiB): time=293.7 us (warmup)
4 KiB <<< /dev/sda1 (block device 10.00 GiB): time=330.0 us
4 KiB <<< /dev/sda1 (block device 10.00 GiB): time=278.1 us
4 KiB <<< /dev/sda1 (block device 10.00 GiB): time=307.7 us
4 KiB <<< /dev/sda1 (block device 10.00 GiB): time=310.1 us
--- /dev/sda1 (block device 10.00 GiB) ioping statistics ---
4 requests completed in 1.23 ms, 16 KiB read, 3.26 k iops, 12.7 MiB/s
generated 5 requests in 4.00 s, 20 KiB, 1 iops, 5.00 KiB/s
min/avg/max/mdev = 278.1 us / 306.5 us / 330.0 us / 18.6 us

또한 프로세스를 최대한 빠르게 진행해야 하는 경우 Compute Engine을 사용하면 로컬 SSD를 가상 머신에 연결할 수 있습니다. 캐시 서버를 실행하거나 중간 출력이 있는 대용량 데이터 처리 작업을 실행할 때에는 로컬 SSD를 선택하는 것이 좋습니다. 영구 디스크와 달리 로컬 SSD의 데이터는 영구적이지 않습니다. 따라서 VM은 가상 머신이 다시 시작될 때마다 데이터를 지웁니다. 로컬 SSD는 최적화 사례에만 적합합니다.

다음 출력은 NVMe 디스크 인터페이스를 사용하여 로컬 SSD에서 4KiB를 읽을 때 발생하는 지연 시간의 예시입니다.

$ ioping -c 5 /dev/nvme0n1
4 KiB <<< /dev/nvme0n1 (block device 375 GiB): time=245.3 us(warmup)
4 KiB <<< /dev/nvme0n1 (block device 375 GiB): time=252.3 us
4 KiB <<< /dev/nvme0n1 (block device 375 GiB): time=244.8 us
4 KiB <<< /dev/nvme0n1 (block device 375 GiB): time=289.5 us
4 KiB <<< /dev/nvme0n1 (block device 375 GiB): time=219.9 us
--- /dev/nvme0n1 (block device 375 GiB) ioping statistics ---
4 requests completed in 1.01 ms, 16 KiB read, 3.97 k iops, 15.5 MiB/s
generated 5 requests in 4.00 s, 20 KiB, 1 iops, 5.00 KiB/s
min/avg/max/mdev = 219.9 us / 251.6 us / 289.5 us / 25.0 us

복제

새 Persistent Disk를 만들 때 한 영역에 디스크를 만들거나 동일한 리전 내의 두 영역 간에 디스크를 복제할 수 있습니다.

예를 들어 us-west1-a와 같이 영역에 디스크를 하나 만들면 디스크 사본이 하나만 생성됩니다. 이를 영역 디스크라고 합니다. 예를 들어 us-west1-b와 같이 리전 내의 다른 영역에 디스크의 다른 사본을 저장하여 디스크의 가용성을 높일 수 있습니다.

같은 리전의 두 개 영역에 복제된 디스크를 리전 Persistent Disk라고 합니다.

리전 하나가 완전히 실패할 가능성은 없지만 영역 장애가 발생할 수 있습니다. 다음 이미지와 같이 리전 내 서로 다른 영역에 복제하면 가용성을 높이고 디스크 지연 시간을 줄일 수 있습니다. 두 복제 영역이 모두 실패하면 리전 전체 오류로 간주됩니다.

이미지

디스크가 두 영역에 복제됩니다.

복제된 시나리오에서는 가상 머신이 실행 중인 영역인 로컬 영역(us-west1-a)에서 데이터를 사용할 수 있습니다. 그런 다음 데이터는 다른 영역(us-west1-b)에 있는 다른 Colossus 인스턴스에 복제됩니다. 영역 최소 하나 이상이 VM이 실행 중인 영역과 같아야 합니다.

영구 디스크 복제는 디스크의 고가용성을 위해서만 사용됩니다. 영역별 서비스 중단은 가상 머신이나 기타 구성요소에도 영향을 미칠 수 있으며, 이로 인해 서비스 중단이 발생할 수도 있습니다.

읽기/쓰기 시퀀스

읽기/쓰기 시퀀스 또는 디스크에서 데이터를 읽고 디스크에 쓰는 순서를 결정할 때 대부분의 작업은 VM의 디스크 드라이버에서 수행됩니다. 사용자는 복제 시맨틱스를 처리할 필요가 없으며 평소와 같이 파일 시스템과 상호작용할 수 있습니다. 기본 드라이버에서 읽기 및 쓰기의 시퀀스를 처리합니다.

기본적으로 시스템은 디스크에서 읽기 또는 쓰기 요청이 두 복제본으로 전송되는 전체 복제 모드에서 작동합니다.

전체 복제 모드에서는 다음과 같은 결과가 발생합니다.

  • 쓰기 작업에서 쓰기 요청은 두 복제본에 쓰기를 시도하고 두 쓰기 모두 성공하면 확인합니다.
  • 읽기 작업에서 VM은 읽기 요청을 두 복제본에 보내고 성공한 복제본에서 결과를 반환합니다. 읽기 요청이 타임아웃되면 다른 읽기 요청이 전송됩니다.

복제본이 지연되어 읽기 또는 쓰기 요청 완료를 확인하지 못하면 읽기 및 쓰기가 더 이상 복제본으로 전송되지 않습니다. 복제를 다시 시작하려면 먼저 복제본이 현재 상태로 되돌아가도록 조정 프로세스를 수행해야 합니다.

다음 단계