Estou usando o Ubuntu 20.04 com o Xen Hypervisor. Na minha máquina, tenho um SSD que hospeda minhas imagens de VM e, em seguida, quatro unidades sata nas quais tenho dados. Minha configuração atual é montar os dados no meu domínio0 e, em seguida, fornecer esses dados para as outras VMs no servidor de arquivos de rede.
Isso parece ineficiente, pois todas as VMs teriam que passar pela minha NIC para acessar os dados. Estou correto nessa suposição de que este é um grande gargalo?
Qual é o padrão do setor para fornecer dados que estão na mesma máquina física? Algum conselho ou melhorias para esta configuração?
Existe algum dano em montar o LVM de dados em cada uma das VMs? Minha preocupação com essa abordagem é o que ocorreria se duas VMs tentassem acessar o mesmo ponto de dados simultaneamente? Esta configuração é vulnerável à corrupção de dados?
Em geral, não, a menos que você atenda a uma das duas restrições muito específicas. Qualquer:
ou:
Em geral, os sistemas de arquivos que não reconhecem clusters são projetados para assumir que têm acesso exclusivo ao armazenamento de apoio, ou seja, que seu conteúdo não será alterado a menos que eles façam algo para alterá-lo. Isso obviamente pode causar problemas de cache se você violar essa restrição, mas na verdade é muito pior do que isso, porque se estende às estruturas internas do sistema de arquivos, não apenas aos dados do arquivo. Isso significa que você pode facilmente destruir completamente um sistema de arquivos montando-o em vários nós ao mesmo tempo.
Os sistemas de arquivos com reconhecimento de cluster são a solução tradicional para isso, eles usam bloqueio baseado em rede ou uma forma especial de sincronização no próprio armazenamento compartilhado para garantir a consistência. No Linux, suas opções são praticamente OCFS2 e GFS2 (recomendo OCFS2 sobre GFS2 para esse tipo de coisa com base na experiência pessoal, mas YMMV). No entanto, eles precisam de muito mais de todos os nós do cluster para manter as coisas em sincronia. Como regra geral, eles têm limitações de desempenho significativas em muitas cargas de trabalho devido aos requisitos de bloqueio e invalidação de cache que impõem, tendem a envolver muito tráfego de disco e rede e podem não ser completos em comparação com os tradicionais de nó único sistemas de arquivos.
Eu gostaria de salientar que o NFS em uma ponte de rede local (a opção 'fácil' de fazer o que você deseja) é realmente bastante eficiente. A menos que você use uma configuração bastante estranha ou insista que cada VM esteja em sua própria VLAN, o tráfego NFS nunca tocará sua NIC, o que significa que tudo acontece na memória e, portanto, tem muito pouco em termos de problemas de eficiência (especialmente se você estiver usando rede paravirtualizada para as VMs).
Em teoria, se você configurar o 9P, provavelmente poderá obter um desempenho melhor do que o NFS, mas o esforço envolvido provavelmente não valerá a pena (a diferença de desempenho provavelmente não será muito).
Além de tudo isso, há uma terceira opção, mas é um exagero para uso em uma única máquina. Você pode configurar um sistema de arquivos distribuído como GlusterFS ou Ceph. Na verdade, essa é provavelmente a melhor opção se seus dados não estiverem inerentemente colocados em suas VMs (ou seja, você pode estar executando VMs em nós diferentes daqueles em que os dados estão), pois, embora não seja tão eficiente quanto NFS ou 9P, é lhe dará muito mais flexibilidade em termos de infraestrutura.
Se você não executar o sistema de arquivos com reconhecimento de cluster dentro de suas VMs, simplesmente destruirá seu volume de fragmentação imediatamente após a primeira atualização de metadados. A história completa de esclarecimento está aqui:
https://forums.starwindsoftware.com/viewtopic.php?f=5&t=1392