• Nenhum resultado encontrado

3.3 Fornecedores de Armazenamento Backend para o OpenStack

3.3.3 Sheepdog

O Sheepdog é um sistema de armazenamento distribuído desenvolvido especificamente para fornecer volumes ou contentores de objetos a VMs a executar em ambientes KVM, sendo a sua escalabilidade viável até centenas de nós de armazenamento.

Arquitetura

A arquitetura simétrica do Sheepdog não necessita de um servidor central, pois todos os nós são responsáveis por armazenar objetos, e gerir o cluster. Os componentes que com- põem a arquitetura (Figura 3.4, retirado de [She]) do Sheepdog são:

• Gateway: Este componente recebe os pedidos E/S vindos do cliente, juntamente com os respetivos parâmetros necessários para as operações que pode realizar (iden- tificador global do objeto, offset, tamanho e tipo de operação) pelo driver QEMU, calcula os nós de armazenamento que irão armazenar o objeto, calculo feito através de uma função hashing consistente.

• O Gestor de Objetos (ou Object Manager): Este componente recebe pedidos E/S do Gateway e executa as operações no disco local.

• Gestor do Cluster (ou Cluster Manager): Componente responsável por gerir os membros do cluster, o Gestor do Cluster possui a responsabilidade de adicionar ou remover membros quando há alteração do cluster face a comandos do administra- dor ou face a falhas, sendo ainda responsáveis por gerir operações que necessitem de um consenso geral dos nós de armazenamento.

• Driver QEMU para armazenamento baseado em blocos: O lado cliente do sistema, divide a imagem da VM em objetos (que por omissão possuem uma dimensão de 4 MB) e armazena-os através do Gateway.

Objetos

Os objetos são de tamanho variável e possuem um identificador global; fornecendo este identificador, é possível realizar operações de leitura e escrita. A camada de armazena- mento de objetos implementa vários tipos de objetos:

3. ARMAZENAMENTO NOOPENSTACK 3.3. Fornecedores de Armazenamento Backend para o OpenStack

Figura 3.4: Arquitetura Sheepdog.

• Objeto de Dados (ou Data Object): Objetos que armazenam o conteúdo dos discos virtuais das VMs.

• Objeto de Imagem de Disco Virtual (Virtual Disk Image Objet ou VDI Object): Ob- jetos que armazenam metadados dos discos virtuais das VMs (nome de imagem, tamanho, identificadores dos objetos de dados, etc).

• Objeto de estado da VM (VM State Object): Objetos que armazenam o estado atual da VM, sendo usado para carregar o estado da VM na inicialização, resumo, na criação de snapshots, e sendo armazenado o estado no encerramento e pausa da VM.

• Objeto de atributo da imagem de disco virtual (VDI Attribute Object): Funciona como extensões de ficheiros, tendo como estrutura pares chave-valor.

O algoritmo utilizado pelo Sheepdog para distribuir os objetos e réplicas pelo arma- zenamento é o hashing consistente. Em termos de replicação, o Sheepdog assume que em qualquer instante só existe um escritor, pelo que não existe a possibilidade ocorrer colisões de escrita; por isso, clientes podem enviar operações de escrita em paralelo, que não existe a possibilidade de ambos os escritores estarem a escrever nos mesmos blocos ou objetos, deixando-os incoerentes.

A execução do fluxo de operações de escrita no sistema de armazenamento Sheepdog é como se segue: 1º) o Gateway recebe um pedido de escrita, calculando através de uma função de hashing consistente, o resultado será um vetor de nós para o qual o Gateway irá reencaminhar o pedido; 2º) a operação é enviada em simultâneo para todos os nós (tendo em conta que existe replicação), e quando a escrita é concluída em todos os nós, a operação também é dada como concluída. Em leituras, a localização dos objetos é calculada pela função de hashing, sendo a operação reencaminhada para um dos nós do vetor resultante.

3. ARMAZENAMENTO NOOPENSTACK 3.3. Fornecedores de Armazenamento Backend para o OpenStack

Figura 3.5: Replicação em cadeia e replicação direta.

Replicação

Um pedido de escrita de um objeto chega ao Gateway, após o qual, este é responsável por definir o(s) destino(s) onde o objeto vai ser armazenado. O Gateway fica responsável por assegurar que todas as réplicas do objeto são escritas em disco antes de dar a operação como concluída.

No Sheepdog a replicação é feita de duas formas: pode-se utilizar uma estratégia de replicação em cadeia, em que o Gateway envia o pedido para o primeiro Gestor de Objetos, este envia para o segundo e assim sucessivamente até ser enviado para todos responsáveis por armazenar o objeto; a segunda estratégia implica o Gateway enviar diretamente o pedido para todos os Gestores de Objetos, tomando partido do paralelismo inerente (isto só acontece para escritas, leitura é sempre feita para um).

É ainda possível introduzir (tal como no Ceph) mecanismos de resiliência em forma de objetos de paridade, permitindo utilizar mais eficientemente o espaço de armazena- mento disponível.

Recuperação

O histórico de filiação dos nós é guardado num histórico que no Sheepdog é referido como ”Época”, ou seja, são guardadas várias versões do estado do cluster. Quando a Gateway faz um pedido de E/S para um dado nó e as épocas entre ambos são diferentes, os pedidos (já na fila de espera do nó) falham, é necessário que o Gateway repita os pedidos até que as épocas coincidam. Assim, é possível obter uma consistência forte para objetos replicados. A Gateway pode ter o mesmo comportamento caso encontre nós offline ou falhados.

O processo de recuperação é implementado pelo Sheepdog dando como prioridade a recuperação do estado dos nós, face a fornecer o serviço de armazanamento. Se o QEMU enviar um pedido E/S para objetos que ainda não recuperaram, esses pedidos são blo- queados até que os objetos estejam na época atual.

3. ARMAZENAMENTO NOOPENSTACK 3.3. Fornecedores de Armazenamento Backend para o OpenStack

• O Gestor de Objetos recebe todos os identificadores dos objetos no cluster; • Calcula qual o sub-conjunto de objetos pelo qual é responsável por armazenar; • Cria uma lista contendo os identificadores pelo qual é responsável por armazenar; • Envia um pedido de leitura para obter os objetos da lista, sendo o pedido enviado

para o Gestor de Objetos que continha o objeto na época anterior;

• Armazena o objeto como forma de ficheiro na diretoria da época correspondente.

Journal

O Gestor de Objetos é responsável por armazenar os objetos (em forma de ficheiro) para o disco local. Operações de escrita ao discos locais são executadas posteriormente, sendo prioritário a escrita no journal; a utilização do journal serve para registar as modifica- ções feitas ao armazenamento de uma forma atómica, de modo a prevenir atualizações parciais (o que é possível quando introduzimos falhas). Isto aplica-se aos objetos VDI, so- bretudo pois se os objetos VDI (os metadados) são parcialmente atualizados, perdemos um estado consistente, o que pode causar uma falha total do armazemento em questão (disco ou discos virtuais).

Gestor de Cluster

O Sheepdog utiliza um componente chamado Gestor do Cluster, mais propriamente uti- liza uma aplicação chamada Corosync Cluster Engine, este tem como responsabilidade verificar a filiação dos vários nós ao cluster e o estado de execução de cada um; inclui a adição de nós ou a sua exclusão, tendo também que garantir um consenso maioritário para operações tais como criação ou atualização de objetos VDI, snapshots, etc.

Driver QEMU

Abstracções do lado do cliente:

• A abstração baseada em blocos é desenvolvida para VMs que utilizem hipervisores KVM com QEMU para emulação de hardware, no entanto, também disponibiliza armazenamento como dispositivos SCSI (identificados por sda, sdb, etc); suporta ainda funcionalidades avançadas tais como snapshot, clonagem e imagens esparsas. O Sheepdog fornece imagens esparsas, isto significa que um volume criado na VM, irá criar uma imagem respetiva no lado do cluster, mas esta não aloca necessaria- mente todo o seu armazenamento no cluster, pelo contrário, apenas objetos escritos alocam o espaço necessário em disco;

• A abstração baseada em contentores de objetos é desenvolvida com API compatí- vel ao OpenStack Swift e Amazon S3, sendo por isso utilizada como uma solução alternativa de armazenamento backend para estas tecnologias.

3. ARMAZENAMENTO NOOPENSTACK 3.3. Fornecedores de Armazenamento Backend para o OpenStack

Sheepdog e o OpenStack

Sendo muito semelhante ao Ceph (excluindo a camada de FS), o Sheepdog permite in- tegrar com o OpenStack Swift e Cinder, fornecendo armazenamento não partilhado em forma de contentores ou volumes.