Visão geral técnica da arquitetura de armazenamento Infinidat

InfiniBox é um sistema de armazenamento moderno que imediatamente caiu no lado direito do quadrado mágico. Qual é a sua singularidade?

Um breve

histórico O que é o InfiniBox? Este é um sistema de armazenamento Infinidat. O que é o Infinidat? Esta é uma empresa criada por Moshe Yanay (criador do Symmetrix e XIV) para implementar um projeto de armazenamento ideal em nível corporativo.

A empresa foi criada como desenvolvedora de software, que é colocada em equipamentos comprovados, ou seja, é SDS, mas vem como um único conjunto monolítico.

Introdução

Neste artigo, veremos o sistema de armazenamento InfiniBox, sua arquitetura, como ele funciona e quão alta confiabilidade (99,9999999%) é alcançada, desempenho, capacidade a um preço relativamente baixo. Como a base do sistema de armazenamento é o seu software, e para esse sistema em particular, a ênfase principal estará no software, não haverá belas glândulas fotográficas.

Por que você precisa de outro sistema de armazenamento no mercado?

Há várias tarefas para as quais é necessária uma capacidade muito grande, enquanto a confiabilidade e o desempenho também são importantes. Por exemplo, sistemas em nuvem, tarefas padrão de grandes empresas, a Internet das coisas, pesquisa de genes, sistemas de segurança para grandes estruturas. É muito difícil encontrar o sistema de armazenamento ideal para essas tarefas, principalmente se você observar o preço. De olho nessas tarefas, a arquitetura de software do InfiniBox foi construída.

Endereçamento

Como posso armazenar quantidades ilimitadas de dados? Fornecendo espaço de endereço ilimitado. Para isso, o InfiniBox usa o VUA - espaço de endereço de usuário virtual. Todos os objetos criados no InfiniBox que são acessíveis ao usuário (volumes, instantâneos, sistemas de arquivos) estão incluídos neste VUA, e o tamanho total desses objetos é o tamanho atual do VUA. O endereçamento é limitado e não está associado a discos: ou seja, o tamanho do VUA pode ser muito maior que a capacidade de disco disponível e é de fato ilimitado.



Em seguida, precisamos dividir esse espaço em partes que serviremos, para que seja mais fácil trabalhar com elas.



Todo o espaço de endereço é dividido em 6 partes - VU (unidade virtual - peça virtual). O espaço de endereço de cada objeto, como um volume, é distribuído igualmente entre essas partes. A gravação ocorre em blocos de 64kB e, no processo, você pode entender de maneira incrivelmente simples e rápida a que VU esse endereço de volume pertence (o restante da divisão LBA / 64kB, a função módulo, é feita muito rapidamente para o número mínimo de ciclos de CPU).

Além de simplificar o trabalho com espaços menores, as VUs são o primeiro nível de abstração de discos físicos e a base para a tolerância a falhas do sistema no nível do controlador. Por exemplo, existem 3 controladores (servidores físicos), cada um dos quais é responsável pela operação e é o principal de duas VUs, bem como o backup de outras duas VUs. O controlador não atende a VU para a qual é uma reserva, mas ao mesmo tempo recebe operações de metadados e gravação do outro controlador para essa VU, de modo que, no caso de uma falha do controlador principal, ele imediatamente retira todo o trabalho com essa VU.



No caso de falha de um controlador, os outros dois assumem sua tarefa - trabalham com sua VU.



Endereçamento, Instantâneos, Cache



VUA é um espaço de endereço virtual disponível para o usuário e praticamente ilimitado. O VDA (endereço de disco virtual) é um espaço de armazenamento interno virtual. Seu tamanho é rigorosamente determinado com antecedência pelo número e capacidade dos discos rígidos (menos a paridade, os metadados e o espaço para substituir as unidades com falha). A conexão entre o VUA e o VDA é organizada por meio de um trie (árvore de prefixos). Cada entrada na árvore é um ponteiro do espaço do usuário (VUA) para o espaço interior (VDA). O endereçamento na forma de uma árvore de prefixos permite endereçar blocos de qualquer tamanho. Ou seja, quando um elemento de qualquer tamanho (arquivo, fluxo de dados serial, objeto) é adicionado aos discos, ele pode ser endereçado com um registro na árvore e a árvore permanece compacta.

No entanto, o recurso mais importante da árvore é seu alto desempenho ao pesquisar e expandir a árvore. A pesquisa é realizada durante a operação de leitura, quando é necessário encontrar o bloco com o endereço fornecido no disco. A extensão da árvore ocorre durante uma operação de gravação, quando adicionamos novos dados ao disco e devemos adicionar um endereço à árvore onde eles podem ser encontrados. O desempenho é extremamente importante ao trabalhar com estruturas grandes, e a árvore de prefixos permite alcançá-lo com uma enorme margem para o futuro, por exemplo, no caso de um aumento no volume de discos.

O que pode ser dito sobre o relacionamento entre VUA e VDA:

  1. O tamanho do VUA pode exceder em muito o tamanho do VDA
  2. O VUA não tem nada a ver com o VDA até que o thin provisioning seja escrito lá
  3. Mais de um VUA pode fazer referência a um VDA (instantâneos / clones)

Assim, a organização do VUA e do VDA, as conexões entre eles e o endereçamento dessas conexões permitem instantâneos muito rápidos e provisionamento dinâmico. Como a criação de um instantâneo está apenas atualizando os metadados na memória e é uma operação que ocorre constantemente durante o trabalho, na verdade, essa operação não leva tempo. Normalmente, ao criar capturas instantâneas, os sistemas de armazenamento clássicos param de atualizar os metadados e / ou E / S para garantir a integridade da transação. Isso leva a uma latência de E / S desigual. O sistema em questão funciona de maneira diferente: nada para e o registro de data e hora dos metadados do bloco (64 + 4KB) é usado para determinar se a operação está no instantâneo. Assim, o sistema pode tirar centenas de milhares de fotos sem diminuir a velocidade do trabalho,e o desempenho de um volume com centenas de instantâneos e um volume sem instantâneos não é diferente. Como tudo é feito na memória e esses são processos regulares, dezenas de instantâneos por segundo podem ser obtidos em grupos de volumes. Isso permite implementar a replicação assíncrona em instantâneos com uma diferença entre as cópias em segundos ou menos e sem afetar o desempenho, o que também é importante.

Vejamos o sistema como um todo, como os dados vão. As operações são recebidas pelas portas dos três controladores (servidores). Os drivers de porta funcionam no espaço do usuário, o que permite simplesmente reiniciá-los se alguma combinação de eventos nas portas suspender o driver. Nas implementações clássicas, isso é feito no kernel e o problema é resolvido reiniciando o controlador inteiro.

Em seguida, o fluxo é dividido em seções de 64 KB + 4KB. Quais são esses 4KBs adicionais? Essa é uma proteção contra erros silenciosos e contém somas de verificação, tempo e informações adicionais sobre a operação, que são usadas para classificar essa operação e para otimizar o armazenamento em cache e ler com antecedência.



A gravação em cache é uma coisa bastante simples que não pode ser dita para leitura. O cache de leitura funciona bem se sabemos o que ler. Os sistemas clássicos usam algoritmos de leitura antecipada de acesso seqüencial. Mas o que fazer com arbitrário? O acesso completamente aleatório é extremamente raro no trabalho de aplicativos reais, mesmo sendo emulado corretamente é bastante difícil, escrever um gerador de números aleatórios reais é uma tarefa bastante interessante. Mas se considerarmos cada operação de E / S separadamente, como é feito em sistemas clássicos, todas elas são arbitrárias e imprevisíveis, exceto as completamente sequenciais. No entanto, se você observar todo o fluxo de E / S por algum tempo, poderá ver padrões que combinam operações diferentes.

O cache do sistema basicamente não sabe nada sobre volumes, arquivos ou qualquer estrutura lógica construída no VUA. O cache examina apenas as seções e seus metadados, baseando o cache em seus comportamentos e atributos, o que permite encontrar dependências entre diferentes aplicativos que estão realmente conectados. Para operações de entrada e saída, vetores de atividade são construídos.



O sistema acumula estatísticas, cria esses vetores de atividade e tenta identificar a E / S atual e vinculá-lo aos vetores conhecidos ou criar um novo. Após a identificação, ocorre a leitura preditiva de acordo com o vetor, ou seja, o comportamento dos aplicativos é previsto e a leitura preditiva é feita para uma carga aparentemente arbitrária.

Gravar em discos

14 seções são montadas em faixas para discagem. Isso é feito por um processo especial que seleciona seções para essa faixa.



A seguir, duas seções de paridade são consideradas - a faixa está pronta para gravação em discos. A paridade é contada através de várias operações baseadas no XOR, duas vezes mais rápidas que no código Reed-Solomon. Uma faixa adicional (14 + 2 seções) é atribuída a um grupo RAID (RG). Um grupo RAID é apenas um objeto para armazenar várias tiras, nada mais. As faixas são agrupadas conforme mostrado abaixo, uma acima da outra, e a coluna vertical é chamada de membro do grupo RAID. VDS (espaço em disco virtual) é o espaço em disco disponível para dados do usuário e VDA é o endereço nele.



Uma coluna ou membro de um grupo RAID é gravada em um disco (PD - Unidade Física) em uma prateleira (Unidade de Disco). O local em que um membro do grupo RAID é gravado é chamado de Partição de Disco (DP - Drive Partition). O número de DP no disco é constante e igual a 264, o tamanho depende do tamanho do disco. Esse design permite carregar uniformemente todos os discos. Ao mesmo tempo, o algoritmo distribui colunas de um grupo RAID o mais longe possível um do outro, em diferentes discos e prateleiras. Isso leva ao fato de que, quando dois discos falham, o número de faixas comuns neles é mínimo ao mesmo tempo, e o sistema alterna do estado de proteção N para N + 1 em minutos, reconstruindo as faixas em que duas colunas estão ausentes imediatamente (a confiabilidade é de sete noves). )



Como resultado, o design lógico do sistema como um todo parece bastante simples e é apresentado no diagrama abaixo.



Implementação física

O sistema é feito para que todos os seus componentes sejam protegidos de acordo com o esquema N + 2 ou 2N, incluindo os canais de energia e dados dentro da matriz. Aqui está o diagrama de implementação da fonte de alimentação.

ATS (Automatic Transfer Switch) - ATS, interruptor de fase
BBU (Battery Backup Unit) - UPS,
nó de fonte de alimentação ininterrupta - controlador



Esse esquema permite proteger os controladores e a integridade da memória durante eventos complexos, por exemplo, no caso de uma falha na fonte de alimentação e um desligamento temporário de um circuito de energia. Os no-breaks são gerenciáveis, o que permite obter informações precisas sobre a carga e alterar de maneira flexível o tamanho do cache, para que o controlador sempre tenha tempo para redefini-lo. Ou seja, o sistema começará a usar ativamente o cache muito antes, diferentemente do esquema clássico, quando o cache for ativado apenas quando a bateria estiver totalmente carregada.

Aqui está um diagrama dos canais de dados dentro do sistema.



Os controladores são interconectados via Infiniband e conectados às unidades via SAS. Cada controlador pode acessar todos os discos do sistema. Além disso, se a conexão entre o controlador e o disco não funcionar, o controlador poderá solicitar dados através de outro controlador, atuando como proxy através do Infiniband. As prateleiras contêm comutadores SAS para acesso simultâneo a discos. Cada prateleira contém 60 discos, as prateleiras podem ser dois, quatro ou oito, totalizando até 480 discos de 3, 4, 6, 8 ou 12 TB. A capacidade total disponível para o usuário é superior a 4,1 PB sem compactação. Por falar em compactação, para implementar a compactação sem perda de desempenho, a memória não é compactada. Como resultado, o sistema às vezes funciona com a compactação ativada ainda mais rapidamente - ao ler, você precisa ler menos, a energia do processador é suficiente com uma margem,e durante a gravação, a resposta sai diretamente da memória e a compactação é feita de forma assíncrona durante a gravação direta em discos.

Os controladores contêm dois grupos de discos: um sistema para liberar a RAM e o segundo no SSD para armazenar em cache as operações de leitura (até 368 TB por sistema). Um cache tão grande possibilita a leitura preditiva de grandes blocos e, como os dados na faixa são selecionados com aproximadamente a mesma frequência, esses grandes blocos não apenas reduzem a carga em discos físicos, mas também têm grandes chances de demanda em um futuro próximo.

Resumo

Então, falamos sobre um sistema de armazenamento muito interessante, que possui uma arquitetura moderna e oferece alta capacidade, alta confiabilidade, excelente desempenho e custo adequado.



Fontes
1 https://techfieldday.com/video/infinidat-solution-deep-dive/
2 https://support.infinidat.com/hc/en-us

All Articles