Como compartilhar discos permanentes entre VMs

É possível anexar um disco permanente SSD no modo de vários gravadores com até duas instâncias de máquina virtual (VM, na sigla em inglês) N2 simultaneamente, para que ambas as VMs possam ler e gravar no disco. Para ativar o modo de vários gravadores em novos discos permanentes, crie um disco permanente e especifique a sinalização --multi-writer na ferramenta gcloud ou a propriedade multiWriterna API Compute Engine.

Os discos permanentes no modo de vários gravadores são compatíveis com um subconjunto de comandos de reservas persistentes (SCSI PR) SCSI-3. Aplicativos de alta disponibilidade podem usar esses comandos para configurações de encapsulamento e failover de E/S.

Os seguintes comandos SCSI PR são compatíveis:

  • ENTRADA {REPORT CAPABILITIES, READ FULL STATUS, READ RESERVATION, READ KEYS}
  • SAÍDA {REGISTER, REGISTER AND IGNORE EXISTING KEY, RESERVE, PREEMPT, CLEAR, RELEASE}

Restrições

  • Disponível apenas para discos permanentes do tipo SSD.
  • É possível criar um disco permanente no modo de vários gravadores em qualquer zona, mas só é possível anexá-lo às VMs nos seguintes locais:
    • australia-southeast1
    • europe-west1
    • us-central1 (somente zonas us-central1-a e us-central1-c)
    • us-east1 (apenas para a zona us-east1-d)
    • us-west1 (somente zonas us-west1-b e us-west1-c)
  • As instâncias anexadas precisam ter um tipo de máquina N2.
  • Tamanho mínimo: 10 GB
  • Máximo de instâncias anexadas: 2
  • Os discos permanentes no modo de vários gravadores não são compatíveis com as métricas de discos permanentes.
  • Não é possível mudar discos que estejam no modo de vários gravadores para o modo somente leitura.
  • Não é possível usar imagens de disco ou snapshots para criar discos permanentes no modo de vários gravadores.
  • Não é possível criar snapshots ou imagens de discos permanentes no modo de vários gravadores.
  • Limites menores de IOPS. Consulte o desempenho do disco para saber detalhes.
  • Não é possível redimensionar um disco permanente de vários gravadores.
  • Ao criar uma VM usando a ferramenta de linha de comando gcloud, não é possível criar um disco permanente de vários gravadores usando a sinalização --create-disk.

Práticas recomendadas

  • O encapsulamento de E/S usando os comandos de SCSI PR resulta em um estado consistente de falha dos dados do disco permanente. Alguns sistemas de arquivos não têm consistência de falha e, portanto, podem ser corrompidos se você usar comandos SCSI PR.
  • Muitos sistemas de arquivos, como EXT4, XFS e NTFS, não são projetados para ser usados com armazenamento em blocos compartilhado e não têm mecanismos para sincronizar ou executar operações originadas de várias instâncias de VM.
  • Antes de usar discos permanentes no modo de vários gravadores, conheça seu sistema de arquivos e saiba como ele pode ser usado de maneira segura com armazenamento em blocos compartilhado e acesso simultâneo de várias VMs.

Desempenho

Os discos permanentes criados no modo de vários gravadores têm limites específicos de IOPS e capacidade.

Modo de vários gravadores para Discos permanentes SSD zonais
IOPS máximas sustentadas
IOPS de leitura por GB 30
IOPS de gravação por GB 30
IOPS de leitura por instância 15.000–60.000*
IOPS de gravação por instância 15.000–60.000*
Capacidade sustentada máxima (MB/s)
Capacidade de leitura por GB 0,48
Capacidade de gravação por GB 0,48
Capacidade de leitura por instância 240–1.200*
Capacidade de gravação por instância 240–1.200*
* O desempenho de IOPS e capacidade do disco permanente depende do tamanho do disco, número de vCPUs da instância e tamanho do bloco de E/S, entre outros fatores.
A anexação de um disco de vários gravadores a várias instâncias de máquina virtual não afeta o desempenho ou o custo agregado. Cada máquina recebe uma parcela do limite de desempenho por disco.

Consulte Como adicionar ou redimensionar discos permanentes zonais para saber como anexar discos permanentes a várias instâncias.

Como compartilhar um disco permanente zonal entre instâncias de VM

Compartilhar um disco no modo somente leitura entre várias instâncias

É possível anexar um disco permanente que não seja de inicialização a mais de uma VM no modo somente leitura. Isso permite o compartilhamento de dados estáticos entre várias VMs. O compartilhamento de dados estáticos entre várias VMs de um disco permanente é mais barato do que replicar os dados em discos exclusivos para instâncias individuais.

Se for necessário compartilhar espaço de armazenamento dinâmico entre várias VMs, use uma das seguintes opções:

Console

  1. No Console do Google Cloud, acesse a página Instâncias de VM.

    Acessar instâncias de VM

  2. Na lista de instâncias do projeto, clique no nome da instância em que você quer anexar o disco. A página Detalhes da instância de VM será aberta.

  3. Na página de detalhes da instância, clique em Editar.

  4. Na seção Discos adicionais, clique em uma das opções a seguir:

    1. Adicionar um disco para adicionar um disco no modo somente leitura à instância.
    2. Anexe o disco atual para selecionar um disco atual e anexá-lo no modo somente leitura à instância.
  5. Especifique outras opções para seu disco.

  6. Clique em Concluído para aplicar as alterações.

  7. Clique em Salvar para aplicar as alterações à instância.

  8. Conecte a instância e ative o disco.

  9. Repita este processo para adicionar o disco a outras instâncias em modo somente leitura.

gcloud

Na ferramenta gcloud, use o comando compute instances attach-disk e especifique a sinalização --mode com a opção ro.

gcloud compute instances attach-disk INSTANCE_NAME \
  --disk DISK_NAME \
  --mode ro

Substitua:

  • INSTANCE_NAME: o nome da instância em que você quer anexar o disco permanente zonal.
  • DISK_NAME: o nome do disco que você quer anexar.

Depois de anexar o disco, conecte-se à instância e monte-o.

Repita este comando para cada instância onde quer adicionar esse disco no modo somente leitura.

API

Na API, crie uma solicitação POST para o método compute.instances.attachDisk No corpo da solicitação, especifique o parâmetro mode como READ_ONLY.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME/attachDisk

{
 "source": "zones/ZONE/disks/DISK_NAME",
 "mode": "READ_ONLY"
}

Substitua:

  • INSTANCE_NAME: o nome da instância em que você quer anexar o disco permanente zonal.
  • PROJECT_ID: ID do projeto
  • ZONE: a zona onde o disco está localizado.
  • DISK_NAME: o nome do disco que você está anexando.

Depois de anexar o disco, conecte-se à instância e monte-o.

Repita esta solicitação para cada instância onde você quer adicionar esse disco no modo somente leitura.

Como compartilhar um disco permanente SSD no modo de vários gravadores entre instâncias

É possível compartilhar um disco permanente SSD no modo de vários gravadores entre as instâncias N2 na mesma zona. Consulte Modo de vários gravadores em discos permanentes para detalhes sobre como ele funciona. Use o seguinte processo para criar e anexar discos permanentes com vários gravadores:

gcloud

Crie e anexe um disco permanente zonal usando a ferramenta gcloud:

  1. Use o comando gcloud beta compute disks create para criar um disco permanente zonal. Inclua a sinalização --multi-writer para indicar que o disco precisa ser compartilhado entre as instâncias no modo de vários gravadores.

    <pre class="devsite-click-to-copy">
    gcloud beta compute disks create <var>DISK_NAME</var> \
        --size <var>DISK_SIZE</var> \
        --type pd-ssd \
        --multi-writer
    </pre>
    

    Substitua:

    • DISK_NAME: o nome do novo disco.
    • DISK_SIZE: o tamanho, em GB, do novo disco. Os tamanhos aceitáveis variam de 1 GB a 65.536 GB para discos permanentes SSD ou de 200 GB a 65.536 GB para discos permanentes padrão no modo de vários gravadores.
  2. Depois de criar o disco, anexe-o a qualquer instância em execução ou parada com um tipo de máquina N2. Use o comando gcloud compute instances attach-disk:

    <pre class="devsite-click-to-copy">
    gcloud compute instances attach-disk <var>INSTANCE_NAME</var> /
        --disk <var>DISK_NAME</var>
    </pre>
    

    Substitua:

    • INSTANCE_NAME: o nome da instância N2 em que você está adicionando o novo disco permanente zonal.
    • DISK_NAME: o nome do novo disco que você está anexando à instância.
  3. Repita o comando gcloud compute instances attach-disk, mas substitua INSTANCE_NAME` pelo nome da segunda instância.

Depois de criar e anexar um novo disco a uma instância, formate e monte o disco usando um sistema de arquivos de disco compartilhado. A maioria dos sistemas de arquivos não usa armazenamento compartilhado. Confirme se o sistema de arquivos é compatível com esses recursos antes de usá-los com o disco permanente de vários gravadores. Não é possível ativar o disco em várias VMs usando o mesmo processo que você normalmente usaria para ativar o disco em uma única VM.

API

Use a API Compute Engine para criar e anexar um disco permanente SSD às instâncias N2 no modo de vários gravadores.

  1. Na API, construa uma solicitação POST para criar um disco permanente zonal usando o método disks.insert. Inclua as propriedades name, sizeGb e type. Para criar esse novo disco como um disco vazio e não formatado que não será usado para inicialização, não especifique uma imagem de origem ou um snapshot de origem para esse disco. Inclua a propriedade multiWriter com um valor True para indicar que o disco precisa ser compartilhável entre as instâncias no modo de vários gravadores.

    <pre class="devsite-click-to-copy">
    POST https://compute.googleapis.com/compute/beta/projects/<var>PROJECT_ID</var>/zones/<var>ZONE</var>/disks
    
    {
     "name": "<var>DISK_NAME</var>",
     "sizeGb": "<var>DISK_SIZE</var>",
     "type": "zones/<var>ZONE</var>/diskTypes/pd-ssd",
     "multiWriter": "True"
    }
    

    Substitua:

    • PROJECT_ID: o ID do projeto
    • ZONE: a zona em que a instância e o novo disco estão localizados.
    • DISK_NAME: o nome do novo disco.
    • DISK_SIZE: o tamanho, em GB, do novo disco. Os tamanhos aceitáveis variam de 1 GB a 65.536 GB para discos permanentes SSD ou de 200 GB a 65.536 GB para discos permanentes padrão no modo de vários gravadores.
  2. Elabore uma solicitação POST para o método compute.instances.attachDisk e inclua o URL do disco permanente zonal que você acabou de criar:

    POST https://compute.googleapis.com/compute/v1/projects/<var>PROJECT_ID</var>/zones/<var>ZONE</var>/instances/<var>INSTANCE_NAME</var>/attachDisk
    
    {
     "source": "/compute/v1/projects/<var>PROJECT_ID</var>/zones/<var>ZONE</var>/disks/<var>DISK_NAME</var>"
    }
    

    Substitua:

    • PROJECT_ID: ID do projeto
    • ZONE: a zona em que a instância e o novo disco estão localizados.
    • INSTANCE_NAME: o nome da instância em que você está adicionando o novo disco permanente.
    • DISK_NAME: o nome do novo disco.
  3. Repita o comando disks.insert, mas especifique a segunda instância.

Depois de criar e anexar um novo disco a uma instância, formate e monte o disco usando um sistema de arquivos de disco compartilhado. A maioria dos sistemas de arquivos não usa armazenamento compartilhado. Confirme se o sistema de arquivos é compatível com esses recursos antes de usá-los com o disco permanente de vários gravadores.

A seguir