Instalando o Ceph em um ambiente mono node

Houve um tempo atrás que tive que criar um Storage para um ambiente de Openstack usando o FreeNAS. Devo dizer que não encontrei uma única documentação que explicasse como seria possível fazer a integração entre os dois, por isso acabei tomando a liberdade no projeto de usar o caminho mais fácil, no caso uma que tivesse suporte total ao Openstack. Por isso minha escolha foi o Ceph: um object storage planejado para trabalhar da melhor maneira possível dentro de um cluster.

Esse post tem como intuito explicar um pouco o que é o Ceph, e como fazer a instalação dele em um ambiente mononode (que é possível, já que o que ele se refere a cluster são 1 ou mais discos).

O que é o Ceph

 Como já dito anteriormente, o Ceph se trata de um object storage, aonde todos os dados são armazenados dentro de um pool, que seria o equivalente a um diretório aonde seus arquivos podem ser armazenados. O Ceph pode ter N pools dentro de um mesmo cluster, porém tudo depende da quantidade de Placement Groups que você ainda tem disponível.

Placement Groups é a unidade que o Ceph usa para armazenar seus dados dentro do disco – seria um equivalente a uma extent do EXT4. Cada pg irá fazer parte de algum membro do cluster, ou um OSD (object storage device). Quanto mais PGs você tiver, mais seus dados serão fragmentados, por outro lado mais rápido será a recuperação em caso de falha. Lembre-se também que o número de PGs também afeta o desempenho do disco, então em casos que seu cluster for pequeno, como no caso do nosso que terá somente dois discos e uma única máquina, dê preferência a manter os valores padrão.

Além disso o Ceph é formado por 3 serviços importantes: ceph-monitor (cmon), ceph-osd (cosd), e o ceph-admin (cmds). Ceph-monitor é responsável por manter uma cópia de como os dados estão armazenados dentro de seu cluster, já o ceph-osd é responsável por gerenciar os nodes do seu cluster, e por ultimo o ceph-admin que é o serviço de administração do seu cluster.

Instalando o Ceph Mononode

Para instalar esse ambiente, nosso cluster será baseado em discos e não em máquina, sendo que teremos somente 1 máquina com 2 discos de 2TB com o sistema operacional CentOS 7. Primeiramente precisamos instalar o repositório EPEL (Extra Packages for Enterprise Linux) para que possamos ter acesso aos pacotes de dependência do Ceph.

# yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm -y

Para instalar o Ceph, abra o arquivo /etc/yum.repos.d/ceph.repo e inclua as linhas abaixo para que possamos instalar os pacotes do Ceph, como o ceph-deploy. Para essa instalação iremos usar a luminous, mas caso queira usar outra versão basta alterar no arquivo a palavra luminous para o nome da versão escolhida (como por exemplo jewel):

# cat >/etc/yum.repos.d/ceph.repo
[ceph]
name=Ceph packages for $basearch
baseurl=https://download.ceph.com/rpm-luminous/el7/$basearch
enabled=1
priority=1
gpgcheck=1
gpgkey=https://download.ceph.com/keys/release.asc

[ceph-noarch]
name=Ceph noarch packages
baseurl=https://download.ceph.com/rpm-luminous/el7/noarch
enabled=1
priority=1
gpgcheck=1
gpgkey=https://download.ceph.com/keys/release.asc

[ceph-source]
name=Ceph source packages
baseurl=https://download.ceph.com/rpm-luminous/el7/SRPMS
enabled=0
priority=1
gpgcheck=1
gpgkey=https://download.ceph.com/keys/release.asc

Instale o ceph-deploy na máquina, que se trata de um programa responsável por fazer a instalação e configuração do Ceph dentro de todas as máquinas do Cluster:

# yum install ceph-deploy -y

A instalação do Ceph pode ser feita com usuário administrativo, porém por questões de segurança é solicitado que tudo seja feito com um usuário sem privilégios. Sendo assim crie um usuário chamado ceph-user dentro de seu sistema antes de continuarmos com a instalação. Aproveite e também troque a senha do mesmo para que possamos fazer a troca de chaves entre os servidores, já que toda a comunicação do cluster será feita através de SSH (mesmo sendo uma única máquina):

# useradd ceph-user
# passwd ceph-user

Altere para o usuário que acabou de criar e crie uma chave de SSH para o mesmo, de preferência sem senha para usar. Troque a chave entre os servidores com o comando ssh-copy-id e então valide a autenticação via SSH com chave.

# su - ceph-user
$ ssh-keygen
$ ssh-copy-id ceph-user@localhost
$ ssh ceph-user@localhost

Para começar a instalação, inicialize o servidor atual como um node do Ceph através do comando ceph-deploy new <servidor> conforme abaixo:

$ ceph-deploy new localhost

Após o término da execução será criado um diretório chamado my-cluster no seu diretório atual. Entre nele e altere o arquivo ceph.conf para ficar conforme abaixo (ignore o fsid, pois ele é único por node):

$ vim my-cluster/ceph.conf 
[global]
fsid = 5328cf3a-8dc4-40c9-a0c5-8cdb4d99e132
mon_initial_members = storage01
mon_host = 10.0.0.49
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
osd pool default size = 2
osd crush chooseleaf type = 0

O que faz com que o Ceph possa trabalhar com um número limitado de máquinas é a opção osd crush chooseleaf type, que é usado pelo serviço de CRUSH do Ceph para decidir quais servidores os dados serão armazenados. Por se tratar de um ambiente mononode, basta colocar a opção como 0 que esse serviço será desabilitado. Alteração feita, agora basta instalar seus serviços na nossa única máquina através do comando ceph install conforme abaixo:

$ ceph-deploy install localhost --release luminous

A opção –release serve para informarmos que queremos que seja feito a instalação da versão mais recente. Aguarde o término da instalação dos pacotes e configuração para que possamos criar o monitor. O monitor será criado através do comando abaixo:

$ ceph-deploy mon create-initial

Pronto! Feito isso temos um cluster de Ceph, porém não temos nenhum armazenamento para ele. Precisamos incluir os discos para que possamos começar a criar nossos PGs e começarmos a armazenar nossos dados. Para incluir os discos, supondo que eles se chamem sdb e sdc, execute o comando de preparação dos discos conforme abaixo:

$ ceph-deploy osd create --data /dev/sdb localhost
$ ceph-deploy osd create --data /dev/sdb localhost

Ao término você terá duas partições em cada disco, uma que será aonde os dados serão armazenados (/dev/sdx1) e outra aonde ficará o Journaling da partição (/dev/sdx2). Ambas as partições são necessárias para consistência de escrita do Ceph. Por ultimo instale o serviço do ceph-admin e o ceph-manager para concluir a instalação:

$ ceph-deploy admin storage01
$ ceph-deploy mgr create storage01

Para validar, verifique se o comando ceph -s retorna a saúde como HEALTH_OK.

$ ceph -s
 cluster:
 id: 5328cf3a-8dc4-40c9-a0c5-8cdb4d99e132
 health: HEALTH_OK
 
 services:
 mon: 1 daemons, quorum storage01
 mgr: storage01(active)
 osd: 4 osds: 2 up, 2 in
 
 data:
 pools: 2 pools, 128 pgs
 objects: 9072 objects, 35427 MB
 usage: 73610 MB used, 3653 GB / 3725 GB avail
 pgs: 128 active+clean
 
 io:
 client: 75819 B/s wr, 0 op/s rd, 13 op/s wr

Com isso encerramos o artigo de instalação do Ceph em mononode. Para esse artigo foi usado a documentação do Ceph conforme link abaixo, e num post futuro irei retornar para explicar como será feito para criar um “pool” de armazenamento de arquivos.

  • http://docs.ceph.com/docs/master/start/

1 comentário

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *