Redundância do sistema de arquivos + velocidade

4

Procurando por alguma informação e se alguém tiver conquistado esse problema com uma solução que ele esteja confiante.

Procurando configurar um ambiente da Web tolerante a falhas. Portanto, a configuração é alguns nós atrás de um balanceador de carga. Agora, os desenvolvedores web podem ssh em um servidor para editar o código e tal.

Estou pensando em glusterfs, mas colocar um sistema de arquivos glusterfs como a raiz do doc leva a uma redução de cerca de 20 a 30% nas páginas que o servidor da web poderia servir. Espero isso, já que estou apenas na ethernet e não no infiband ou algo parecido.

Então eu estava pensando em usar o glusterfs + inotify. Então, eu tenho um script inotify em execução que monitora o docroot e o gluster mount para alterações e faz um rsync nesse arquivo / dir que é alterado. Desta forma, o apache pode servir a partir do disco local e não gluster, mas dá o efeito que está sendo servido através de um sistema de arquivos em cluster.

Meu único problema com isso é que eu precisaria rodar 2 dos scripts inotify e para o número de filas que estamos rodando para adicionar todos os watchers inotify que eu estaria usando em torno de 700megs de RAM para ambos.

Então, alguém tem algum conselho ou ponteiros?

obrigado!

EDITAR

Pense nisso como um serviço de hospedagem. Clientes ssh em 1 servidor, mas os arquivos que eles criam / editam / apagam estão em todos os outros nós

O inverso também precisa ser verdadeiro. Se o servidor da Web criar arquivos, eles também precisarão estar em todos os nós.

Então, isso gera um rsync direto, já que é muito lento.

    
por Mike 22.07.2011 / 22:42

2 respostas

3

Ah, uau, estou tendo flashbacks de um trabalho anterior, onde o GFS foi usado para o raciocínio exato que você está descrevendo. O cenário: mais de 2000 clientes executando seus aplicativos em várias nuvens de grande escala.

Basicamente, você não pode fazer o que acha que quer fazer. Você não pode obter um sistema de arquivos em cluster ou de rede que funcionará em qualquer lugar próximo da velocidade de um sistema de arquivos local. Deixe-me enfatizar que por um segundo: NÃO PODE . Se você acha que pode, você está se iludindo. Se alguém disser que pode, está mentindo. É simples matemática: velocidade do disco + controlador IO + latência de rede + cluster fu deve ser maior que a velocidade do disco + IO do controlador.

Agora, até as razões pelas quais você pode estar criando isso e por que o que você quer fazer é inútil:

  • Simplicidade de implantação : não é mais simples implantar em uma máquina e executá-la automaticamente em todos os lugares, porque - obtenha isso - não é uma máquina que você está implantando para . Claro, você pode pensar que é conveniente ter apenas que copiar uma instância do código, mas há muitas coisas por servidor que você precisará fazer em várias situações. Em muitos casos, eu pessoalmente tive que lidar com isso, instalar em um sistema de arquivos compartilhado acabou tornando o processo de implantação mais complicado do que teria sido. A resposta correta para a pergunta "como implantar em várias máquinas" é "Implantação automática".
  • Clustering for reliability : Esse limite faz uma brincadeira para mim. O hardware moderno é tão confiável, e as tecnologias de clustering são tão confiáveis, que o armazenamento em cluster ( especialmente sistemas de arquivos em cluster) AUMENTA seu tempo de inatividade. Eu tenho dados suficientes para um white paper sobre esse tópico. Agora, algumas pessoas dirão "tive uma EMC SAN funcionando por quatro anos sem interrupção de produção", mas quanto eles pagaram por essa confiabilidade? Eu nunca ouvi falar de alguém que tenha esse tipo de confiabilidade por menos de 7 dígitos (com base no custo total de propriedade), e havia muito custo de experiência lá também. O fato de você estar fazendo essa pergunta diz que você não tem essa experiência, e eu aposto que você não está querendo colocar 7 números para baixo também.
  • Clustering for capacity : Isso volta às minhas instruções de abertura - qualquer tipo de sistema de arquivos em cluster é mais lento que o local. Tentar extrair grandes quantidades de desempenho de um sistema de arquivos em cluster ou de rede é uma causa perdida. Isso vai deixá-lo louco (certamente fez o truque para mim).

Agora que estou com um negativo para uma tela, o que pode você faz? Bem, basicamente se trata de ajudar seus clientes em um nível individualizado.

Você não pode criar uma infra-estrutura de hospedagem de tamanho único para todos os tipos de cookies, em escala infinita. Isso é o que meu empregador antigo que ama GFS tentou fazer, e por chiclete não funcionou, e estou confiante de que isso não pode ser feito com as tecnologias operacionais e de desenvolvimento disponíveis atualmente.

Em vez disso, reserve um pouco de tempo para avaliar os requisitos de seus clientes e ajudá-los a encontrar uma solução que atenda aos requisitos deles. Você não precisa necessariamente fazer uma análise completa de cada cliente; depois dos primeiros, você (esperançosamente) começará a ver padrões surgindo, o que o guiará em direção a uma gama de soluções "padrão". Torna-se "OK, você tem os requisitos F, P e Aleph-1, então seria melhor se você tivesse a solução ZZ-23-plural-Z-alpha - e aqui está nosso abrangente conjunto de documentação sobre a implantação dessa solução , e os nossos preços para consultoria personalizada sobre esta solução, caso você não consiga implementá-la, estão na parte inferior ".

No que diz respeito aos detalhes, há muitos para listar, mas darei algumas dicas:

  • Implemente o código para cada servidor de aplicativos individualmente.
  • Se você realmente precisa compartilhar recursos dinâmicos compartilhados, use o NFS. É estupidamente simples e tem de longe a menor taxa de quebra. Note que eu disse ASSETS - não o código, não a configuração, não os logs, nada além dos ativos fornecidos pelo cliente.
  • O NFS não é escalável para sempre (apesar da propaganda da NetApp); em algum momento, seus clientes precisarão migrar para outra coisa (um exemplo do qual eu tenho fornecido antes ), e você pode ajudá-los a mudar para uma solução mais escalável com boa documentação e outras assistências prontas.
  • Se você está pensando que isso pode ser um negócio de fogo e esqueça, você está errado. Você tem hospedagem na web de commodities (com todos os pontos positivos - baixa manutenção - e pontos negativos - sem margem - o que isso implica) e hospedagem especializada na web (que é o que você está tentando fazer), e este último é de alta manutenção (mas com margens correspondentemente altas).
por 23.07.2011 / 02:14
6

Leia o comentário do @ Zypher. Leia-o várias vezes até compreender a sabedoria dessas palavras, enxergar a luz e expulsar seus desenvolvedores de seus servidores de produção para uma caixa de proteção apropriada.
Você pode pegar meu pau pontudo. : -)

Reformulando sua pergunta sob essa luz, "Como manter o código em meus servidores da Web consistentes?". Resposta: fantoche (ou Chef ), radmind , ou qualquer um dos muitos sistemas maravilhosos de configuração / implantação existentes.

Essas ferramentas oferecem uma maneira muito mais simples de atingir sua meta, ocupam muito menos RAM / CPU e podem ser configuradas para garantir consistência em todos os seus nós.
Esta parte da resposta foi retirada com base na edição da pergunta original

Existe realmente apenas uma solução para você, e isso é uma SAN (ou dispositivo NAS que atende arquivos via NFS).
A razão pela qual eu sugeriria essa rota é que você precisa ter arquivos criados por cada um dos servidores disponíveis para todos os outros. Fazer uma sincronização N-way massiva se tornará pesada e lenta. Centralizar-se em uma SAN proporcionará melhor desempenho, boa redundância (as SANs são bastante à prova de balas se você não sai barato) e a capacidade de aumentar a escala conforme suas necessidades aumentam.

Não é sem desvantagens: a menos que você faça um par de SANs espelhadas e redundantes com malha redundante, você estará introduzindo um único ponto de falha. As SANs também não são baratas, e a redundância apenas aumenta as despesas.

Observe que nada disso elimina a necessidade de manter os desenvolvedores fora da caixa de produção, a menos que você tenha a garantia de que eles nunca ligarão para você quando eles quebrarem alguma coisa. No mínimo, você deve estar sugerindo strongmente que eles aluguem um ambiente de desenvolvimento de você (com um lucro razoável, obviamente, algo para ajudar a pagar pelo custo da SAN ...)

    
por 22.07.2011 / 23:03