Como devemos servir arquivos em um pequeno cluster de bioinformática?

7

Temos um pequeno cluster de seis servidores Ubuntu. Nós executamos análises de bioinformática nesses clusters. Cada análise leva cerca de 24 horas para ser concluída, cada servidor i7 principal pode manipular 2 por vez, recebe dados de 5 GB e gera cerca de 10 a 25 GB de dados. Nós corremos dezenas deles por semana. O software é uma miscelânea de scripts perl customizados e software de alinhamento de sequência de terceiros escrito em C / C ++.

Atualmente, os arquivos são servidos por dois dos nós de cálculo (sim, estamos usando nós de computação como servidores de arquivos) - cada nó tem 5 drives sata de 1 TB montados separadamente (sem invasão) e é agrupado via glusterfs 2.0.1 . Cada um deles tem três placas ethernet intel ethernet pci gigabit ligadas, conectadas a um switch DGS-1224T d-link (US $ 300 24 port-consumer level). No momento, não estamos usando quadros gigantes (não sei por que, na verdade). Os dois nós de cálculo de exibição de arquivos são então espelhados via glusterfs.

Cada um dos outros quatro nós monta os arquivos via glusterfs.

Os arquivos são todos grandes (4gb +) e são armazenados como arquivos nus (sem banco de dados / etc) se isso for importante.

Como você pode imaginar, isso é uma bagunça que cresceu organicamente sem premeditação e queremos melhorar agora que estamos ficando sem espaço. Nossas análises são intensivas em E / S e é um gargalo - estamos obtendo apenas 140mB / s entre os dois servidores de arquivos, talvez 50mb / s dos clientes (que possuem apenas NICs únicos). Nós temos um orçamento flexível que eu posso provavelmente levantar $ 5k ou mais.

Como devemos gastar nosso orçamento?

Precisamos de pelo menos 10 TB de armazenamento rápido o suficiente para atender a todos os nós. Quão rápido / grande a cpu / memória de tal servidor de arquivos tem que ser? Devemos usar o NFS, o ATA na Ethernet, o iSCSI, o Glusterfs ou alguma outra coisa? Devemos comprar dois ou mais servidores e criar algum tipo de cluster de armazenamento ou um servidor suficiente para um número tão pequeno de nós? Devemos investir em placas de rede mais rápidas (digamos, placas PCI Express com múltiplos conectores)? O interruptor? Devemos usar o RAID, em caso afirmativo, hardware ou software? e qual raid (5, 6, 10, etc)?

Qualquer ideia apreciada. Somos biólogos, não gurus de TI.

    
por cespinoza 05.01.2011 / 00:35

5 respostas

9

Estou no campo da ciência da computação e faço pesquisas em bioinformática. Atualmente 746 em Biostars :)

Eu tenho operado as instalações de computação de bioinformática por 3 anos em uma universidade (cerca de 40 servidores Linux, 300 CPUs, 100TB de espaço em disco + backups, cerca de 1T total de RAM - servidores com 16 a 256GB de RAM). Nosso cluster tem 32 nós de computação de 8 núcleos, 2 nós principais e estamos expandindo-o com mais 2 nós de computação de 48 núcleos. Nós servimos os arquivos para os nós de computação sobre o NFS.

Eu recomendaria mudar para o NFS para sua situação.

Consideramos mudar para Gluster, Lustre e Samba, mas decidimos não usá-los.

NFS

Eu tenho algumas dicas importantes sobre o NFS:

  1. Tenha um servidor NFS dedicado. Dê 4 núcleos e 16 GB de RAM. Um servidor dedicado é mais seguro e mais fácil de manter. É uma configuração muito mais estável. Por exemplo, às vezes você precisa reinicializar o servidor NFS - um servidor dedicado não irá falhar no seu disco acessando cálculos - eles simplesmente congelarão e continuarão assim que o servidor NFS voltar.
  2. Sirva apenas para os nós de computação e cabeça. Nenhuma estação de trabalho Nenhuma rede pública.
  3. Use o NFS versão 3. Da minha experiência, o NFSv4 era mais frágil - mais travamentos - mais difícil de depurar. Nós trocamos o cluster do NFSv3 para o NFSv4 e voltamos várias vezes antes de nos estabilizarmos. É uma rede local para que você não precise da segurança (integridade e / ou privacidade) do NFSv4.

Hardware de armazenamento

Nosso cluster atual foi comprado há três anos, por isso não está usando o SAS, mas tem unidades expansivas FibreChannel e san controladores. Isso está mudando, todo o novo armazenamento que estamos comprando é o SAS.

Eu sugiro considerar um armazenamento SAS . O SAS está substituindo o FibreChannel como uma solução mais barata, mais rápida e melhor. Recentemente fiz pesquisas sobre as diferentes soluções oferecidas. Convenientemente, as opções que analisamos estão documentadas de falha do servidor: Quais são as opções de armazenamento externo SAS (Promise, Infortrend, SuperMircro,. ..)?

Recentemente, encomendamos um sistema de armazenamento SAS de 6 Gb SAS - 6 Gb 24TB da RAID Incorporated. Apenas para o armazenamento pagamos US $ 12k. O pedido deve vir em algumas semanas. Este é um sistema sem ponto único de falha - todos os componentes são redundantes e failover automaticamente se algum componente falhar. Está ligado a 2 servidores, cada um usando uma partição diferente da matriz. É uma solução pronta para uso, portanto, uma vez enviada, basta conectá-la, ligá-la e ela funcionará (as partições RAID6 serão montadas no Linux). O pedido também incluiu servidores e o RAID Incorporated está instalando o Linux Debian neles sem nenhum custo extra.

Outras considerações

Infelizmente, se você faz operações de infra-estrutura de bioinformática, provavelmente precisará se tornar um guru de armazenamento.

Para sua partição de 10 TB, escolha unidades RAID6 - 2 que podem falhar sem perder seus dados. Recriar uma unidade de 2 TB em um hot spare leva 24 horas, outras unidades podem falhar durante esse tempo. Eu tive 2 unidades falharem simultaneamente em um array de 16 drives.

Considere dedicar um disco para ser um hot spare no array. Quando você tem mais de 16 drives, então eu diria que um hot spare é uma obrigação.

Pense em um plano de ação se o hardware falhar no servidor NFS dedicado. Eu manteria um gêmeo como um nó de computação como um potencial substituto para o servidor NFS original.

Finalmente, devo mencionar que nosso servidor de arquivos está executando o OpenSolaris (parece incomum - eu sei). OpenSolaris (como acabou por nós) tem excelente suporte a hardware de servidor (FibreChannel, IniniBand, ...). A configuração de um servidor NFS leva 1 hora - todos os passos são completamente diretos: instalar os, atualizar através de um NAT, configurar a rede, criar um pool zfs, criar sistemas de arquivos zfs, compartilhar NFS. Sun foi quem desenvolveu o NFS em 1984, não surpreendentemente o OpenSolaris é muito bom em servir o NFS. A principal razão para usar o OpenSolaris foi ZFS - a bom sistema de arquivos para bioinformática . Alguns recursos que gosto:

  • Integridade (todas as gravações são de checksum)
  • Armazenamento agrupado, instantâneos
  • As exportações do NFS são configuradas no sistema de arquivos servido
  • Compressão on-line
  • Reservas (garantias de espaço)
  • Nível de bloco Desduplicação
  • Backups eficientes (consulte zfs send ).

Usar o Linux para o seu servidor NFS seria bom - nesse caso, manter o XFS ou o Ext4.

    
por 05.01.2011 / 03:02
2

Seu orçamento não vai te levar muito longe com o hardware da classe SAN, mas você deve conseguir um desempenho muito melhor aprimorando o hardware que possui. Obtenha um controlador RAID decente, compre mais discos, obtenha um switch muito melhor e talvez um bom NIC de várias portas (obtenha os decentes tipos de servidor, como o Intel PRO 1000 GT ou ET's).

Se a sua descrição do padrão de IO estiver correta, você terá uma taxa de leitura / gravação de 15:85, portanto precisará ir para o RAID 10 para melhorar seus números de taxa de transferência com discos SATA. Dado o seu viés de gravação, se você fosse simplesmente reconfigurar suas unidades atuais para RAID-5 (ou RAID6, o que seria mais aconselhável nesta escala), o desempenho iria despencar. O RAID-10 reduzirá pela metade a capacidade utilizável dos discos.

Obter todos os itens acima e discos suficientes para entregar 10 TB em RAID10 por $ 5k é factível, mas não é um exercício livre de risco. Existem algumas opções muito interessantes descritas em esta questão e suas respostas que valem a pena considerar se você estiver satisfeito com os riscos e estiver construindo sua própria solução.

No entanto, meu principal conselho para você seria começar a se perguntar (ou quem assina os cheques) é quanto uma falha de armazenamento realmente custará à sua empresa e se você está confortável com esse risco. Seu orçamento de US $ 5k pode apenas melhorar o desempenho, mas você está falando de ter 10 TB do que eu presumo que sejam dados críticos de negócios e capacidade de processamento, tudo rodando em uma infraestrutura com muitos pontos únicos de falha. Agora, pode ser um bom momento para analisar a importância dessa infraestrutura e descobrir se você pode obter orçamento suficiente para comprar uma solução SAN ou NAS de nível de entrada adequada.

    
por 05.01.2011 / 01:22
2

Suas tarefas de processamento são auto-desenvolvidas? Eles são distribuídos atribuindo a cada nó algum pedaço de dados para processar?

Nesse caso, pode ser mais eficaz aproximar o processo dos dados, não veicular os dados nos processos. Não é muito difícil de fazer, mas requer um processo de pensamento diferente do que apenas construir servidores.

Primeiro, coloque algumas unidades em cada nó. Talvez não RAID, apenas um sistema de arquivos em cada um. Divida os dados em todos os discos em todos os nós e inicie as tarefas nos nós que contêm os dados necessários para a tarefa. Tente minimizar as transferências entre nós.

Claro, nada disso funcionaria se suas tarefas precisassem de partes imprevisíveis dos dados.

    
por 05.01.2011 / 04:19
1

Geralmente esse tipo de processamento é sobre extração de informações dos dados - mas sua saída é maior do que a entrada?

A primeira coisa a observar é como os dados estão sendo usados? A maior parte da análise genética e, até certo ponto, dobra de proteínas usando análise de elementos finitos depende do acesso sequencial a grandes arquivos de dados - em comparação com o acesso aleatório. Portanto, a latência não é tanto como um problema quanto a largura de banda do disco.

Portanto, em termos de organizar seus discos, você provavelmente vai querer o maior número possível de bandas em vários discos - então, o RAID 5 ou o 6.

Como você conecta isso aos nós de processamento depende muito do seu orçamento. Se você tiver muito dinheiro, a configuração de vários discos virtuais em uma SAN de malha comutada com os nós de processamento conectados diretamente é o caminho a ser seguido.

Para uma solução barata (ou seja, pelo seu orçamento), o armazenamento local em cada nó de processamento é o caminho a percorrer. O importante é que você mantenha sua E / S de processamento fora da rede (mas, se necessário, use a rede para copiar dados entre nós, se não houver SAN disponível). E se você puder mapear os dados localmente, ter muita memória nos nós de processamento ajudará no armazenamento em cache.

Certamente, se você tem um orçamento muito restrito, deseja obter esses discos locais em uma configuração de RAID 5. Além disso, se possível, armazene a saída no disco local durante o processamento em vez de gravar diretamente nos servidores.

HTH

    
por 05.01.2011 / 01:32
1

Eu não acho que você provavelmente não quer ir com o ATAoE, ou iScsi, ou FC, se você puder evitá-lo. Essas são todas as tecnologias de armazenamento em bloco e são melhores em fornecer espaço em disco para servidores individuais a partir de um conjunto comum de discos. Eles não são projetados para compartilhar esses dados facilmente entre máquinas cliente, a menos que você execute algum software especial para lidar com sistemas de arquivos compartilhados com gerenciadores de metadados e outros. O NFS é baseado em arquivos e projetado para compartilhar sistemas de arquivos entre vários servidores para você e é gratuito. Aleksandr está te mandando na direção certa se o que você precisa fazer é o que Javier diz, mova os dados para os processos para fazer o cálculo. Se você quiser que qualquer trabalho possa ir para qualquer nó, o NFS é o caminho a seguir. A taxa de transferência provavelmente será melhor se você puder preencher previamente os dados nos nós e enviar os trabalhos que precisam de dados específicos para os nós que os possuem. Essa é a maneira de hadoop, map / reduce de fazê-lo. Por exemplo, se você pré-carregou o genoma do mouse em um dos nós e quando alguém faz um trabalho de explosão nesse genoma, você envia o trabalho para o nó que já possui os dados. Nenhum dado real foi movido. No entanto, isso pode criar um gargalo nesse nó, se o conjunto de dados que ele possui for popular e os trabalhos puderem ser armazenados quando outros nós estiverem ociosos.

Alguns dos pesquisadores com quem tenho trabalhado recentemente optaram por alguns nós "gordinhos" ou cluster-in-a-box. Um deles comprou um único sistema baseado em AMD 48core (4 12 core cpus), com 128gig de memória RAM por cerca de US $ 15k. Seus algoritmos são altamente paralelos, portanto, uma maior contagem de núcleos faz sentido para ele. Com tanta memória, há muito espaço para o Linux usar no cache de arquivos, portanto, as leituras subsequentes de arquivos de dados de multigig nessa máquina são super rápidas. Além disso, com o cartão de raid que ele possui, ele recebe cerca de 300 megas por segundo para seu armazenamento local. Não estou dizendo que essa máquina funcionaria para todos, mas funciona para ele. Antes de darmos a ele para usar, por diversão eu fiz um benchmarking de um trabalho bzip paralelo naquela máquina, que comprimia um arquivo de texto de 3gig para 165meg e levava cerca de 4 segundos. (Arquivo foi armazenado em cache no RAM). Muito zippy.

FYI, você vai ver o que costumávamos chamar de médias de carga malucas com máquinas de alto número de núcleos. As médias de carga de 20+ são bastante comuns nesta máquina e seu desempenho interativo ainda é bastante vigoroso.

    
por 07.01.2011 / 01:12

Tags