Como compartilhar eficientemente a pasta do host com os convidados do KVM?

6

Estou configurando o serviço que armazena muitos arquivos carregados pelo nginx em / srv / storage dir no sistema host. Esses arquivos são processados por convidados KVM do trabalhador, que podem criar novos arquivos ou atribuir atributos estendidos aos existentes. Os arquivos nunca são sobrescritos, mas são eventualmente excluídos por um dos trabalhadores.

Portanto, o servidor host possui velocidade de gravação de arquivo de cerca de 177MB / s. A imagem KVM é um arquivo QCOW2 armazenado no sistema de arquivos do host e a imagem atinge ~ 155MB / s dentro da instância KVM graças a essa configuração de virtio:

<driver name='qemu' type='raw' cache='none' io='native'/>

No entanto, não consigo obter esses resultados para a pasta compartilhada. Eu consegui no máximo 40MB / s com virtfs também conhecido como virtio 9p . Parece que não há equivalente AIO para montagem:

mount -t 9p -o trans=virtio,version=9p2000.L uploads /srv/storage

Eu também estava pensando em:

  • sem NFS - atributos estendidos estão ausentes
  • não GlusterFS - funciona, mas o desempenho é pior que o virtio porque está em rede, é um pouco exagerado em uma única máquina de hardware,
  • talvez compartilhando o volume do LVM para o r / w? - na verdade, a pasta é armazenada em uma partição separada, mas eu li em algum lugar que o LV não pode ser compartilhado porque isso pode causar corrupção de fs.
  • mantém os arquivos enviados no QCOW2 e os compartilha por todas as partes?
  • mantém arquivos nginx e enviados na instância do KVM no QCOW2, compartilha a imagem com todos os convidados de alguma forma?
  • iSCSI - possível com partição única?

Então, como compartilhar eficientemente a pasta do host com convidados do KVM com atributos estendidos em funcionamento).

    
por gertas 15.06.2013 / 23:52

4 respostas

2

O CIFS pode fazer atributos estendidos. Você pode configurá-lo com o Samba no Linux.

    
por 20.06.2013 / 14:02
1

Se o seu problema for taxa de transferência, você poderá se beneficiar do aumento do tamanho máximo do pacote. O padrão é 8 KiB (msize = 8192).

O valor ideal pode levar um pouco de experimentação, e pode variar dependendo do seu uso e do sistema de arquivos subjacente, mas eu achei 256 KiB (msize = 262144) para funcionar bem para os meus propósitos. Isso elevou a taxa de transferência de ~ 150 MB / s para ~ 1,5 GB / s.

Veja também: link

    
por 17.02.2016 / 11:09
0

Se você decidir compartilhar um volume LV, diretamente ou via iSCSI, não poderá compartilhá-lo como r / w sem um FS em cluster. Se você não tiver pouco espaço, poderá compartilhar dois volumes, um r / w no host e o outro r / w no guest, enquanto o outro pary terá apenas permissões de leitura no volume não-r / w. E mantenha os dois sincronizados com drbd ou rsync.

Muito feio, mas é isso que você gera quando não é possível usar o NFS

    
por 16.06.2013 / 17:29
-2

Por fim, mudei do contêiner de KVM para LXC + Docker, que suporta montagens de bind. Os diretórios do host selecionados são montados dentro do contêiner. Como não há rede ou tradução envolvida, o desempenho é o mesmo da máquina host. Além disso, vários contêineres podem gravar em um único "volume" de uma vez sem nenhum bloqueio exclusivo.

    
por 21.12.2014 / 22:52