Ceph: Um sistema de arquivos distribuído Linux de escala petabyte

Explorando o sistema de arquivos e o ecossistema Ceph

O Linux® continua invadindo o espaço da computação escalável e, em particular, o espaço de armazenamento escalável. O Ceph é um acréscimo recente à impressionante seleção de sistemas de arquivos Linux, sendo constituído por um sistema de arquivos distribuído que incorpora a replicação e a tolerância a falhas ao mesmo tempo em que mantém compatibilidade POSIX. Explore a arquitetura Ceph e saiba como ela fornece tolerância a falhas e simplifica o gerenciamento de grandes quantidades de dados.

M. Tim Jones, Consultant Engineer, Emulex Corp.

M. Tim JonesM. Tim Jones é arquiteto de firmware integrado e autor das obras Artificial Intelligence: A Systems Approach, GNU/Linux Application Programming (agora, na segunda edição), AI Application Programming (na segunda edição) e BSD Sockets Programming from a Multilanguage Perspective. Sua experiência em engenharia vai desde o desenvolvimento de kernels para espaçonaves geossíncronas até a arquitetura de sistemas integrados e o desenvolvimento de protocolos de rede. Tim é engenheiro consultor da Emulex Corp. em Longmont, Colorado.



02/Jul/2010

Entre em contato com Tim

Ele é um dos nossos autores mais populares e produtivos. Procure todos os artigos de Tim no developerWorks. Confira o perfil de Tim e entre em contato com ele, com outros autores e com leitores no My developerWorks.

Como arquiteto do setor de armazenamento, tenho afinidade com sistemas de arquivos. Esses sistemas são a interface do usuário para sistemas de armazenamento e, embora todos eles tenham a tendência de oferecer um conjunto semelhante de recursos, podem também fornecer recursos notavelmente distintos. O Ceph não é diferente, e oferece alguns dos mais interessantes recursos que podem ser encontrados em um sistema de arquivos.

O Ceph começou como um projeto de pesquisa de PhD em sistemas de armazenamento de Sage Weil na University of California, Santa Cruz (UCSC). No entanto, desde o final de março de 2010 já era possível encontrar o Ceph no principal kernel Linux (desde 2.6.34). Embora o Ceph possa não estar pronto para ambientes de produção, ainda é útil para fins de avaliação. Este artigo explora o sistema de arquivos Ceph e os recursos exclusivos que o tornam uma alternativa atrativa para armazenamento distribuído escalável.

Objetivos do Ceph

Por que "Ceph"?

"Ceph" é um nome estranho para um sistema de arquivos e foge da típica tendência de acrônimos seguida pela maior parte das tecnologias. O nome é uma referência ao mascote da UCSC (onde o Ceph se originou), que é o "Sammy," uma larva da banana, um molusco sem concha da classe dos cefalópodes. Os cefalópodes, com seus vários tentáculos, são uma ótima metáfora para um sistema de arquivos distribuído.

O desenvolvimento de um sistema de arquivos distribuído é uma empreitada complexa, mas imensamente valiosa se for capaz de resolver os problemas certos. Os objetivos do Ceph podem ser simplesmente definidos como:

  • Fácil escalabilidade para capacidade de vários petabytes
  • Alto desempenho com cargas de trabalho variáveis (operações de entrada/saída por segundo [IOPS] e largura da banda)
  • Grande confiabilidade

Infelizmente, esses objetivos podem competir uns com os outros (por exemplo, a escalabilidade pode reduzir ou inibir o desempenho ou afetar a confiabilidade). O Ceph desenvolveu alguns conceitos muito interessantes (como particionamento dinâmico de metadados e distribuição e replicação de dados) que são brevemente expostos neste artigo. O projeto Ceph também incorpora recursos de tolerância a falhas para proteção contra pontos únicos de falha, com a pressuposição de que falhas de armazenamento em grande escala (petabytes de armazenamento) serão a regra e não a exceção. Finalmente, seu projeto não pressupõe cargas de trabalho específicas, mas inclui a capacidade de adaptação a cargas de trabalho distribuídas em constante mudança, a fim de oferecer o melhor desempenho. Tudo isso é feito com o objetivo da compatibilidade POSIX, que permite que o Ceph seja implementado de forma transparente aos aplicativos existentes que contam com semântica POSIX (por meio de aprimoramentos propostos pelo Ceph). Finalmente, o Ceph é um armazenamento distribuído de software livre e faz parte do principal kernel Linux (2.6.34).


Arquitetura Ceph

Agora, vamos explorar a arquitetura Ceph e seus principais elementos em alto nível. Em seguida, explorarei outro nível para identificar alguns dos principais aspectos do Ceph e fornecer uma explicação mais detalhada.

O ecossistema Ceph pode ser amplamente dividido em quatro segmentos (consulte a Figura 1): clientes (usuários dos dados), servidores de metadados (que armazenam em cache e sincronizam metadados distribuídos), um cluster de armazenamento de objetos (que armazena dados e metadados como objetos e implementa outras responsabilidades importantes) e, finalmente, os monitores do cluster (que implementam as funções de monitoramento).

Figura 1. Arquitetura conceitual do ecossistema Ceph
Conceptual architecture of the Ceph ecosystem

Como mostra a Figura 1, os clientes executam operações de metadados (para identificar a localização de dados) usando os servidores de metadados. Os servidores de metadados gerenciam a localização de dados e também onde armazenar novos dados. Observe que os metadados são armazenados no cluster de armazenamento (conforme indicado por "Metadata I/O"). O arquivo de E/S real ocorre entre o cliente e o cluster de armazenamento de objetos. Dessa forma, funções POSIX de nível superior (como abrir, fechar e renomear) são gerenciadas por meio dos servidores de metadados, enquanto funções POSIX (como ler e gravar) são gerenciadas diretamente por meio do cluster de armazenamento de objetos.

Outra perspectiva da arquitetura é fornecida na Figura 2. Um conjunto de servidores acessa o ecossistema Ceph por meio de uma interface do cliente, que compreende o relacionamento entre servidores de metadados e armazenamento no nível do objeto. O sistema de armazenamento distribuído pode ser visualizado em poucas camadas, incluindo um formato para os dispositivos de armazenamento (Extent and B-tree-based Object File System [EBOFS] ou uma alternativa) e uma camada de gerenciamento de substituição chamada Reliable Autonomic Distributed Object Storage (RADOS), que é projetada para gerenciar replicação de dados, detecção de falhas, recuperação e subsequente migração de dados. Finalmente, os monitores são usados para identificar falhas de componentes, incluindo a subsequente notificação.

Figura 2. Visualização simplificada em camadas do ecossistema Ceph
Simplified layered view of the Ceph ecosystem

Componentes Ceph

Com a arquitetura conceitual de Ceph nas mãos, é possível explorar outro nível para ver os principais componentes implementados no ecossistema Ceph. Uma das principais diferenças entre o Ceph e os sistemas de arquivos tradicionais é que, em vez de concentrar a inteligência no sistema de arquivos em si, a inteligência é distribuída em todo o ecossistema.

A Figura 3 mostra um simples ecossistema Ceph. O Cliente Ceph é o usuário do sistema de arquivos Ceph. O Daemon de Metadados Ceph fornece os serviços de metadados, enquanto o Daemon de Armazenamento de Objetos Ceph fornece o armazenamento real (para dados e metadados). Por fim, o Monitor Ceph fornece gerenciamento de cluster. Observe que pode haver muitos clientes Ceph, muitos terminais de armazenamento de objetos, numerosos servidores de metadados (dependendo da capacidade do sistema de arquivos) e pelo menos um par redundante de monitores. Então, como esse sistema de arquivos é distribuído?

Figura 3. Ecossistema Ceph simples
Simple Ceph ecosystem

Cliente Ceph

Kernel ou espaço do usuário

Versões anteriores do Ceph utilizavam o Filesystems in User SpacE (FUSE), que insere o sistema de arquivos no espaço do usuário e pode simplificar muito seu desenvolvimento. No entanto, atualmente, o Ceph foi integrado no kernel principal, o que o torna mais rápido, já que comutadores de contexto do espaço do usuário não são mais necessários para a E/S do sistema de arquivos.

Uma vez que o Linux apresenta uma interface comum para os sistemas de arquivos (por meio do virtual file system switch [VFS]), o usuário tem uma perspectiva transparente do Ceph. A perspectiva do administrador certamente será diferente, dada a possibilidade de muitos servidores formarem o sistema de armazenamento (consulte a seção Resources para obter informações sobre como criar um cluster do Ceph). Do ponto de vista do usuário, eles têm acesso a um grande sistema de armazenamento e não estão cientes dos servidores de metadados, monitores e dispositivos individuais de armazenamento de objeto que são subjacentes e formam um robusto conjunto de armazenamento. Os usuários veem simplesmente um ponto de montagem, a partir do qual é possível executar a E/S de arquivos padrão.

O sistema de arquivos Ceph—ou pelo menos a interface do cliente—é implementado no kernel Linux. Observe que, na grande maioria dos sistemas de arquivos, todo o controle e a inteligência são implementados na própria origem do sistema de arquivos do kernel. Mas, com o Ceph, a inteligência do sistema de arquivos é distribuída nos nós, o que simplifica a interface do cliente e também fornece ao Ceph a capacidade de escala robusta (até mesmo dinamicamente).

Em vez de contar com listas de alocação (metadados para mapear blocos em um disco ou para um determinado arquivo), o Ceph usa uma alternativa interessante. Um arquivo da perspectiva Linux recebe um número de nó-i (INO) do servidor de metadados, que é um identificador exclusivo do arquivo. O arquivo é, em seguida, gravado em alguns objetos (com base no tamanho do arquivo). Usando o INO e o número do objeto (ONO), cada objeto recebe um ID de objeto (OID). Usando um hash simples no OID, cada objeto é designado a um grupo de posicionamento. O grupo de posicionamento (identificado como PGID) é um contêiner conceitual de objetos. Finalmente, o mapeamento do grupo de posicionamento para os dispositivos de armazenamento de objetos é um mapeamento pseudoaleatório que usa um algoritmo chamado Controlled Replication Under Scalable Hashing (CRUSH). Dessa forma, o mapeamento de grupos de posicionamento (e réplicas) para dispositivos de armazenamento não conta com nenhum metadado e, em vez disso, usa uma função de mapeamento pseudoaleatório. Esse comportamento é ideal, porque minimiza a sobrecarga de armazenamento e simplifica a distribuição e a consulta de dados.

O componente final da alocação é o mapa de cluster. O mapa de cluster é uma representação eficiente dos dispositivos que representam o cluster de armazenamento. Com o PGID e o mapa de cluster, é possível localizar qualquer objeto.

O servidor de metadados Ceph

A tarefa do servidor de metadados (cmds) é gerenciar o espaço de nomes do sistema de arquivos. Embora metadados e dados sejam armazenados no cluster de armazenamento de objetos, eles são gerenciados separadamente para dar suporte à escalabilidade. De fato, os metadados são mais divididos em um cluster de servidores de metadados que pode, de maneira adaptável, replicar e distribuir o espaço de nomes para evitar pontos de acesso. Como mostra a Figura 4, os servidores de metadados gerenciam partes do espaço de nomes e podem se sobrepor (para redundância e também para fins de desempenho). O mapeamento de servidores de metadados para o espaço de nomes é executado no Ceph usando particionamento dinâmico de subárvores, o que permite que o Ceph se adapte a cargas de trabalho em constante mudança (migrando espaços de nomes entre servidores de metadados), enquanto preserva a localidade para fins de desempenho.

Figura 4. Particionamento do espaço de nomes Ceph para servidores de metadados
Partitioning of the Ceph namespace for metadata servers

Devido ao fato de cada servidor de metadados simplesmente gerenciar o espaço de nomes para a população de clientes, sua principal aplicação é um cache de metadados inteligente (porque os metadados reais são, ao final, armazenados dentro do cluster de armazenamento de objetos). Os metadados para gravação são armazenados em cache em um journal de curta duração que, ao final, é inserido no armazenamento físico. Esse comportamento permite que o servidor de metadados entregue os metadados recentes de volta aos clientes (o que é comum em operações de metadados). O journal também é útil para recuperação de falhas: se o servidor de metadados falhar, seu journal pode ser reproduzido para garantir que os metadados estejam seguramente armazenados no disco.

Os servidores de metadados gerenciam o espaço do nó-i, convertendo nomes de arquivo em metadados. O servidor de metadados transforma o nome de arquivo em nó-i, tamanho de arquivo e separação de dados em faixas (layout), que o cliente Ceph usa para E/S de arquivos.

Monitores do Ceph

O Ceph inclui monitores que implementam o gerenciamento do mapa de cluster, mas alguns elementos de gerenciamento de falhas são implementados no próprio armazenamento de objetos. Quando dispositivos de armazenamento de objetos falham ou novos dispositivos são adicionados, monitores detectam e mantêm um mapa de cluster válido. Essa função é executada de maneira distribuída, em que atualizações do mapa são comunicadas ao tráfego existente. O Ceph usa o Paxos, que é uma família de algoritmos para consenso distribuído.

Armazenamento de objetos do Ceph

De maneira semelhante ao tradicional armazenamento de objetos, os nós de armazenamento do Ceph incluem não apenas armazenamento, mas também inteligência. As unidades tradicionais são destinos simples que apenas respondem a comandos de iniciadores. No entanto, dispositivos de armazenamento de objetos são dispositivos inteligentes que atuam como destinos e iniciadores para dar suporte à comunicação e colaboração com outros dispositivos de armazenamento de objetos.

A partir da perspectiva do armazenamento, os dispositivos de armazenamento de objetos do Ceph executam o mapeamento de objetos para blocos (uma tarefa tradicionalmente realizada na camada do sistema de arquivos no cliente). Esse comportamento permite que a entidade local decida melhor como armazenar um objeto. Versões anteriores do Ceph implementaram um sistema de arquivos customizado de baixo nível no armazenamento local chamado EBOFS. Esse sistema implementou uma interface não padrão no armazenamento subjacente que é ajustada para semântica de objetos e outros recursos (como notificação assíncrona de cometimentos no disco). Atualmente, o B-tree file system (BTRFS) pode ser usado nos nós de armazenamento, o que já implementa alguns dos recursos necessários (como integridade incorporada).

Como os clientes Ceph implementam o CRUSH e não sabem do mapeamento em bloco de arquivos nos discos, os dispositivos de armazenamento subjacentes podem, com segurança, gerenciar o mapeamento de objetos para blocos. Isso permite que os nós de armazenamento repliquem dados (quando é detectada a falha de um dispositivo). A distribuição da recuperação de falhas também permite que o sistema de armazenamento use escalonamento, já que a detecção e a recuperação de falhas são distribuídas pelo ecossistema. O Ceph chama isso de RADOS (consulte a Figura 3).


Outros recursos interessantes

Como se a natureza dinâmica e adaptável do sistema de arquivos não fosse suficiente, o Ceph também implementa alguns recursos interessantes visíveis para o usuário. Os usuários podem criar capturas instantâneas, por exemplo, em qualquer subdiretório no Ceph (incluindo todos os conteúdos). Também é possível executar contabilidade de arquivos e capacidade no nível do subdiretório, o que reporta o tamanho do armazenamento e o número de arquivos de um determinado subdiretório (e todos os seus conteúdos abrigados).


Status e futuro do Ceph

Embora o Ceph agora esteja integrado no principal kernel Linux, está apropriadamente registrado lá como experimental. Sistemas de arquivos nesse estado são úteis para avaliação, mas ainda não estão prontos para ambientes de produção. No entanto, considerando-se a adoção do Ceph no kernel Linux e a motivação de seus criadores para continuar seu desenvolvimento, ele deverá estar disponível em breve para atender às suas necessidades de armazenamento robusto.


Outros sistemas de arquivos distribuídos

O Ceph não é o único no espaço de sistemas de arquivos distribuídos, mas é único pela maneira como gerencia um grande ecossistema de armazenamento. Outros exemplos de sistemas de arquivos distribuídos incluem o Google File System (GFS), o General Parallel File System (GPFS) e o Lustre, para citar apenas alguns. As ideias por trás do Ceph parecem oferecer um interessante futuro para os sistemas de arquivos distribuídos, já que escalas robustas trazem desafios inéditos para a questão do armazenamento robusto.


Indo além

O Ceph não é apenas um sistema de arquivos, mas também um ecossistema de armazenamento de objetos com recursos de nível empresarial. Na seção Resources, você encontrará informações sobre como configurar um simples cluster Ceph (incluindo servidores de metadados, servidores de objetos e monitores). O Ceph preenche uma lacuna do armazenamento distribuído, e será interessante ver como a oferta de software livre se desenvolverá no futuro.

Recursos

Aprender

Obter produtos e tecnologias

  • Avalie os produtos da IBM da forma que melhor lhe convém: Faça o download de uma versão de teste de produto, experimente um produto on-line, use um produto em um ambiente de nuvem ou passe algumas horas no SOA Sandbox aprendendo como implementar Arquitetura Orientada a Serviço de forma eficiente.

Discutir

  • Envolva-se na comunidade My developerWorks. Entre em contato com outros usuários do developerWorks enquanto explora os blogs, fóruns, grupos e wikis dos desenvolvedores.

Comentários

developerWorks: Conecte-se

Los campos obligatorios están marcados con un asterisco (*).


Precisa de um ID IBM?
Esqueceu seu ID IBM?


Esqueceu sua senha?
Alterar sua senha

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

 


A primeira vez que você entrar no developerWorks, um perfil é criado para você. Informações no seu perfil (seu nome, país / região, e nome da empresa) é apresentado ao público e vai acompanhar qualquer conteúdo que você postar, a menos que você opte por esconder o nome da empresa. Você pode atualizar sua conta IBM a qualquer momento.

Todas as informações enviadas são seguras.

Elija su nombre para mostrar



Ao se conectar ao developerWorks pela primeira vez, é criado um perfil para você e é necessário selecionar um nome de exibição. O nome de exibição acompanhará o conteúdo que você postar no developerWorks.

Escolha um nome de exibição de 3 - 31 caracteres. Seu nome de exibição deve ser exclusivo na comunidade do developerWorks e não deve ser o seu endereço de email por motivo de privacidade.

Los campos obligatorios están marcados con un asterisco (*).

(Escolha um nome de exibição de 3 - 31 caracteres.)

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

 


Todas as informações enviadas são seguras.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=80
Zone=Linux
ArticleID=498972
ArticleTitle=Ceph: Um sistema de arquivos distribuído Linux de escala petabyte
publish-date=07022010