Disco compartilhado no data center moderno (SAN, virtualização, etc)

6

Eu sou um desenvolvedor ... pisando aqui em terrenos estranhos. Por favor, perdoe qualquer ingenuidade.

Eu trabalho em um aplicativo que armazena dados em um banco de dados e no sistema de arquivos.

Contexto: Clustering e compartilhamentos de rede

No passado, quando executávamos o aplicativo em cluster (ou seja, vários servidores de aplicativos que controlavam os dados), manipulamos o sistema de arquivos da seguinte forma:

  • Nó A: compartilha o "diretório de dados" (via samba ou nfs)
  • Nós B, C, D, etc: monta o "compartilhamento de rede" e usa isso em seu "diretório de dados"

Redução da "velocidade do disco" para os nós B, C, D foi abaixo do ideal, mas não é um grande problema.

Observe também : O aplicativo usa seu próprio mecanismo de bloqueio de arquivos. Gravações simultâneas não são um problema.

As perguntas

  • Assim, em um moderno data-channel fiber-channel conecta os servidores ao SANS, qual é a melhor maneira de compartilhar um "pedaço de disco" entre vários servidores?

  • Esse 'compartilhamento de disco' é amplamente usado?

  • Quaisquer preocupações específicas do sistema operacional ("funciona no linux, mas não disponível no Windows")

  • Alguma advertência? Difícil de configurar, não confiável, etc?

Eu ouvi muito "nós não podemos fazer isso" dos nossos administradores ..que finalmente, quando eu pedi mais detalhes, eles disseram "bem, tecnicamente é possível, mas não é como fazemos aqui"

obrigado antecipadamente,

Atualização: Obrigado pelas respostas. (Eles foram todos bons: eu tive que escolher um. Desculpe se não era seu) Assim como eu tinha (um pouco) esperado: minhas esperanças de que você poderia simplesmente anexar NTFS ou XFS ou qualquer sistema de arquivos "regular" ao mesmo de 'disco' provou ingênuo. Sistema de arquivos clusterizado é o ticket. E os sistemas de arquivos sofisticados não estão nas principais prioridades da nossa equipe de hospedagem).

    
por user50460 24.09.2014 / 21:58

3 respostas

4

"well, technically it's possible, but it's not how we do it here"

Isso parece muito com o que eu digo regularmente aos desenvolvedores;)

De uma perspectiva operacional corporativa, você quer, tanto quanto possível, que os aplicativos usem soluções padrão repetíveis. Se a sua aplicação não precisar de um tratamento especial, você não irá obtê-lo. Soluções não padronizadas exigem habilidades especializadas, equipamentos mais caros ou simplesmente mais equipamentos e, se as falhas no estado-da-arte são também catastróficas.

Para muitos aplicativos, um compartilhamento de arquivos (altamente disponível) ainda é uma solução muito adequada e comumente implantada.

As soluções alternativas comuns de HA para usar um compartilhamento de arquivos são:

  • Não armazene arquivos em sistemas de arquivos, mas use um banco de dados altamente disponível e armazene-os como BLOBs. Uma abordagem muito comum. Muitas vezes você já precisa de um banco de dados e isso torna os servidores de aplicativos quase sem estado, resolve muitos problemas de bloqueio, replicação, HA, consistência e acesso, mudando-os para a camada de banco de dados, onde muitos desses problemas são notícias antigas, bem compreendidas e resolvido. Pode ser caro manter uma vez que você alcance (uma fração considerável) a faixa de petabyte.

  • Um sistema de arquivos em cluster adequado, que permite acesso simultâneo em nível de bloco de leitura / gravação ao seu armazenamento compartilhado em Fibre Channel ou iSCSI. Os arrays de armazenamento corporativo tendem a ser bem caros , mas isso pode ser muito bem dimensionado. Geralmente, o sistema de arquivos de cluster requer licenciamento (caro) para cada nó do software FS do cluster. Também é bastante comum em ambientes corporativos para aplicativos especializados.

  • Use um repositório de objetos distribuídos. Essa é a solução mais aberta, com hardware básico de baixo custo, criando redundância e escalabilidade no software. Essa é uma abordagem comum de "nuvem".

por 24.09.2014 / 22:49
3

Se você estiver conectando vários servidores a um dispositivo de bloco compartilhado (DASD / SAN), ainda precisará gerenciar manualmente o acesso a partes do disco (alguns bancos de dados fazem isso em discos brutos, o LVM também é uma opção, com LV gerenciado acesso) ou usar um sistema de arquivos de cluster, que gerenciará o acesso simultâneo.

Mesmo com os bloqueios de gravação gerenciados em uma base por arquivo, você pode incorrer em corrupção de FS, caso contrário, dois hosts tentam executar alterações de metadados do FS ao mesmo tempo, em um FS não agrupado. Nada de moderno, BTW, SANs e acesso a blocos simultâneos existe desde os anos 80 (se não nos anos 70).

Todos os sistemas operacionais modernos têm implementações de FS em cluster, e o isolamento de blocos de blocos também é possível se você estiver disposto a escrever tudo sozinho, por isso é muito específico para o que você pretende usar.

EDIT: Sua abordagem de compartilhamento de rede "antiga" ainda é bastante viável, e o servidor de arquivos cuidará dos bloqueios de arquivos, para que você não precise de mecanismos de bloqueio extras. Se você não tem desempenho extra e deseja uma implantação simples, provavelmente ainda é o caminho mais fácil.

Agora, se você quiser falar "moderno", comece a pensar no armazenamento de objetos e dimensione a arquitetura do seu aplicativo.

    
por 24.09.2014 / 22:40
2

Você não precisa apenas do hardware compartilhado, mas também de um sistema de arquivos em cluster.

Sistemas de arquivos regulares não funcionam - dois computadores acabam substituindo os demais, e você acaba tendo um sistema de arquivos corrompido.

Os sistemas de arquivos em cluster fazem com que os computadores notifiquem uns aos outros sobre as alterações que estão fazendo e manipulem os arquivos de bloqueio quando necessário, para que não pise no pé um do outro.

Alguns desses sistemas de arquivos são específicos de aplicativos - o VMware tem VMFS, por exemplo, e o Hyper-V tem volumes compartilhados de cluster - eles funcionam muito bem para armazenar máquinas virtuais, mas não servem como armazenamento geral de arquivos. Existem outros que são projetados para armazenar quaisquer arquivos. Cada um tem várias vantagens e desvantagens, portanto, o melhor depende muito do que você está fazendo com ele. Eles são todos (tanto quanto eu sei) OS específico - você não será capaz de compartilhar um sistema de arquivos entre o Windows eo Linux dessa maneira.

Para algumas coisas, como failover de máquina virtual de alta disponibilidade, você realmente precisa disso. Para aplicativos em que o SMB ou o NFS servem, eles geralmente são preferidos - eles podem ser um pouco mais lentos, mas há muito menos coisas que poderiam dar errado e mais fáceis de recuperar quando se quebram.

    
por 24.09.2014 / 22:40