Porque usar Storage Distribuído com Proxmox
Quem trabalha com virtualização sabe dos benefícios em contar com um storage em sua estrutura. Pode ser um equipamento montado e instalado com FreeNas ou Nas4Free, pode ser um equipamento proprietário dos grandes players do mercado como IBM e Dell; são inúmeras às vantagens em relação a utilização das maquinas virtuais nos hds locais. Características como migração de Maquinas Virtuais (VMs) entre diferentes Hosts (Computador físico onde roda a VM) de forma on-line sem se preocupar com quedas de serviço; utilização de alta disponibilidade entre tantas outras. Este é o mundo dos storages centralizados tradicionais.
Mas se você pudesse obter os benefícios do Storage centralizado, porém aproveitando a capacidade de processamento e gravação de disco de seus Hosts atuais, ou seja, utilizar os discos locais fisicamente conectados nos hosts como uma espécie de Storage Distribuído, onde o storage é na verdade repartido em vários equipamentos que também podem ser virtualizadores e os dados entre eles são trocados através de uma rede rápida exclusiva? Esta proposta não é nova e existem alguns projetos que fazem isso a algum tempo. No mundo OpenSource, talvez os mais conhecidos sejam o Gluster e o Ceph.
O projeto Gluster assim como o Ceph são bem maduros e recebem apoio de grandes empresas como a RedHat. Existe um farto material na internet sobre comparação entre estes dois projetos. Através da leitura do histórico do desenvolvimento de ambos, me passa a impressão que o Ceph esteja tomando a dianteira nesta ‘briga’ talvez este seja o motivo no qual a Proxmox resolveu apostar todas as suas fichas no desenvolvimento para facilitar a integração de seu produto de virtualização (Proxmox Virtual Environment) com o Ceph. A versão Proxmox 5.1 vem pronta para instalação e configuração do Ceph sem necessidade quase alguma de interação com linhas de comando. Ele também disponibiliza dashboards para monitoramento das replicações de dados e saúde dos discos. A Proxmox fornece suporte oficial (pago) para implantação do Ceph junto a sua ferramenta, eles também mantém as versões mais atualizadas em seus próprios repositórios para facilitar correção de bugs e implementação de novidades.
Um pouco sobre o Ceph
O Ceph é um projeto que inicialmente tinha seu foco no armazenamento de objetos, como arquivos por exemplo. Nas versões mais atuais ele passou a tratar de armazenamento de blocos, que é o caso dos HDs das maquinas virtuais. Ele é utilizado em um dos maiores projetos de nuvem privada do mundo que é o OpenStack, o que por si só o credencia como uma alternativa inovadora e conta com o desenvolvimento e atenção de muitos membros da comunidade.
Como descrevi brevemente no inicio do artigo, a função do Ceph é tomar conta do HD do computador configurado para ela, fazer a interação com os Hds de outros computadores, mantendo os dados replicados nos diferentes Hosts. O cérebro por traz desta operação é um algoritmo chamado Crush que fica monitorando os mapeamentos dos dados, alocando novas informações conforme a necessidade. A arquitetura do Ceph permite que novos discos sejam adicionados ao ‘cluster’ de discos sem nenhuma configuração complexa extra; ela foi desenvolvida para ser flexível e quase ilimitada.
O Proxmox e o Ceph
O Proxmox já conta com suporte ao Ceph a algum tempo. Na versão 4.4 do Proxmox o Ceph estava na versão Jewel, na versão 5.1 o Ceph é o Luminous, produto considerado LTS estável pela Ceph. Nesta versão ele utiliza como padrão, para acessar e controlar os discos um sistema de arquivos próprio chamado Bluestore com incremento nas velocidades de gravação e leitura.
Se você quer saber mais detalhes sobre o Proxmox, você pode fazer nosso curso que compreende as versões 3, 4 e 5 do Proxmox. Veja mais neste link: Curso Proxmox
Além da integração do ambiente gráfico do Proxmox com o Ceph para facilitar a implantação e a manutenção, uma das vantagens de sua utilização é a integração com o Qemu/KVM que acessam os dispositivos Ceph através de uma biblioteca de compatibilidade (LibRbd), resultando em um acesso mais direto e auxiliando na melhora do tempo de resposta.
O Ceph foi desenvolvido para funcionar de maneira descentralizada. É importante entender a função dos seus principais módulos(serviços) e a nomenclatura utilizada.
-
Monitor(ceph-mon): É necessário no mínimo 3 destes serviços para HA. Mantém o mapa do estado do cluster, incluindo Mapa de monitor, Mapa do Manager, Mapa do OSD e Mapa do Crush
-
Manager(ceph-mgr): É necessário no mínimo 2 destes serviços para HA. Mantém um rastreio de métricas do estado atual do cluster.
-
Ceph OSD (ceph-osd): É necessário no mínimo 3 para redundância. Responsável por armazenar os dados, chamadas de dados para replicação, recuperação e rebalanceamento.
-
MDS(ceph-mds): Armazena o metadata dos arquivos. Usado para filesystems.
Requisitos de Hardware:
Ao começar a utilizar o storage distribuído, uma das preocupações deve ser com o hardware que será utilizado, principalmente a rede que estão os Hosts que compõem o cluster do Storage. Em aplicações maiores o recomendável é que esta interligação ocorra com placas de 10Gb, para aplicações menores podem ser utilizadas placas de rege gigabit combinadas.
Os discos devem estar plugados diretamente nos hosts sem configuração de Raid. Isso parece estranho e arriscado, mas como o Ceph será o responsável pela segurança e distribuição dos dados entre os hosts e os discos, a utilização de Raid no equipamento irá gerar perda acentuada de performance. É recomendável a utilização de SSDs, se não for possível é indicada a utilização de SSDs para o journaling dos dados, servindo como um cache do storage, melhorando consideravelmente os tempos de leitura e gravação.
Se você pretende ativar o Ceph junto a hosts que também fazem a virtualização das maquinas, deve verificar se existem recursos de CPU sobrando e também memória que consome em torno de 1gb para cada TB de dados Ceph. Minha indicação é que você seja mais cauteloso nesta parte e sempre disponibilize mais recursos que o mínimo recomendável.
Use com moderação:
Como qualquer recurso novo a ser implementado na sua realidade, utilize com cautela. Primeiro configure como um ambiente de testes, simule algumas cargas e faça testes de performance. Depois de bem compreendido, coloque cargas de produção leves e com backups regulares.
Acredito que cargas de trabalho que demandam IO de disco intensivo de leitura e gravação devem ser bem avaliadas antes de migrar para um storage distribuído. Já cargas de trabalho que demandam uso baixo ou moderado de discos, podem ser migradas sem maiores problemas.
Testes de performance:
A otimização de configurações ou identificação dos melhores arranjos podem ser obtidas através de testes de performance. Para Windows uma ferramenta muito utilizada é o CrystalDiskInfo. No Linux o Bonnie++ pode ser usado, ou mesmo uma ferramenta de teste de performance da própria Ceph. As estatísticas geradas a partir destes programas devem ser observadas e estudadas.
Abaixo seguem alguns exemplos para utilização das ferramentas de performance Linux.
* Bonnie++
Na maquina virtual que você quer testar a performance de gravação e leitura:
# mkdir /testeio
# chmod 777 /testeio
# bonnie++ -d /testeio -s 1553M -n 10 -m TesteIO -f -b -u USUARIO > /tmp/estat_vda.txt
# tail -n1 /tmp/estat_vda.txt|bon_csv2html > /tmp/estat_vda.html
Onde:
(-s) Deve ser o dobro da Ram da VM
(Usuário) Deve ser um usuário não root do sistema
(/tmp/estat_vda.html) É o local e arquivo onde as estatísticas são geradas em HTML.
* Ceph
No host com o Ceph configurado, digitar:
. Para teste performance de gravação
# rados -p NOME_DO_POOL bench 10 write –no-cleanup
. Para teste de performance de leitura
# rados -p NOME_DO_POOL bench 10 seq
Mão na massa: Configurando o Ceph no Proxmox 5,1
O passo a passo da configuração do Ceph em um Cluster no Proxmox 5.1 pode ser visto neste vídeo criado por mim, juntamente com as explicações de cada etapa de configuração:
Mais informações:
Se você pretende se aprofundar no assunto, seguem alguns links que são ótimas dicas de documentação:
-
Informações gerais: https://en.wikipedia.org/wiki/Ceph_(software)
-
Introdução oficial: https://docs.ceph.com/docs/master/start/intro/
-
Glossário: https://docs.ceph.com/docs/luminous/glossary/
-
Ceph no Proxmox: Documentação principal: https://pve.proxmox.com/wiki/Ceph_Server
-
Ceph no Proxmox (documentação das primeiras versões bem explicado):https://pve.proxmox.com/wiki/Manage_Ceph_Services_on_Proxmox_VE_Nodes#_footnote_2
-
Sobre testes com Ceph e SSD: https://www.sebastien-han.fr/blog/2014/10/10/ceph-how-to-test-if-your-ssd-is-suitable-as-a-journal-device/
-
O que são os Placement Groups: https://docs.ceph.com/docs/master/rados/operations/placement-groups/
-
Calculadora PgCalc: https://ceph.com/pgcalc/
-
Usando o Bonie++ para efeitos de comparação de performance: https://www.coker.com.au/bonnie++/readme.html
-
Video de configuração do Ceph no Proxmox: https://www.youtube.com/watch?v=jFFLINtNnXs
-
Manual completo de administração do Ceph(RedHat): https://access.redhat.com/documentation/en-us/red_hat_ceph_storage/2/paged/administration_guide/index
-
Estratégias de uso do Ceph (RedHat): https://access.redhat.com/documentation/en-us/red_hat_ceph_storage/2/paged/storage_strategies_guide/index
-
Questão de forum: https://forum.proxmox.com/threads/storage-model-ceph-vs-glusterfs.33791/
-
Questão de fórum 2: https://pve.proxmox.com/pipermail/pve-user/2016-April/155501.html