Neste post será apresentado como realizar o deploy do ambiente.
Ceph é uma solução de Software Defined Storage (SDS) , com o conceito de ser distrubuído e unificado foi desenhado para ter uma excelente confiabilidade, escalabilidade e performance.
Para um rápido overview vocês podem acessar o link com informações gerais sobre o conceito de object store e o Ceph como SDS.
1. Introdução
Neste lab estamos realizando deploy da versão Luminous versão Filestore.
FileStore é a abordagem legada para armazenar objetos no Ceph. Ele se baseia em um sistema de arquivos padrão (normalmente XFS) em combinação com um banco de dados chave / valor (tradicionalmente LevelDB) para alguns metadados.
Para melhor compreensão da versão Filestore e Bluestore o link abaixo explica com detalhes .
http://docs.ceph.com/docs/mimic/rados/configuration/storage-devices/
No cenário serão deployados via Vagrant e Virtualbox as vms controller , mon1,mon2 ,mon3,osd1,osd2 e osd3.
Recursos iniciais das vms :
- Centos 7
- RAM : 512 Mb (OSD’s e Mon’s) Controller 1Gb
- 1 CPU
- 40 Gbs disco do Sistema Operacional e 5Gbs para OSD`s.
Durante o laboratório estamos utilizando :
- NTP apontando para os servidores do CentOS (0.centos.pool.ntp.org)
- FirewallD desabilitado
- SELinux desabilitado
Laboratório do site :
https://cephbrasil.com/laboratorio-do-site/
2. Deploy das VMs
Primeiro vamos baixar o repositório
cd /opt
git clone https://github.com/cephbrasil/deploy
Iremos iniciar o deploy das vms
vagrant up mon1 mon2 mon3 osd1 osd2 osd3 controller
Estamos deixando a vm controller por último , pois durante o processo dele é copiado as chaves ssh de acesso.
Segue abaixo um exemplo do momento do deploy do Vagrant.
3. Criação do Usuário
Configuração do usuário Ceph
useradd -d /home/cephuser -m cephuser
passwd cephuser
Configuração do sudo
echo "cephuser ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/cephuser
chmod 0440 /etc/sudoers.d/cephuser
sed -i s'/Defaults requiretty/#Defaults requiretty'/g /etc/sudoers
Crie as chaves do usuário ceph
[vagrant@controller ~]$ su - ceph
[ceph@controller ~]$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/ceph/.ssh/id_rsa):
Created directory '/home/ceph/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/ceph/.ssh/id_rsa.
Your public key has been saved in /home/ceph/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:v35gS/7YWnUPZkae6Jm9dLPDTtPCUYD/8EetlzeT7bE ceph@controller
The key's randomart image is:
+---[RSA 2048]----+
| .. |
| . . |
| .. o|
| +ooo|
| S . X*=|
| .+. X.XX|
| +.o= **@|
| o=...E=|
| .=+o oo.|
+----[SHA256]-----+
Crie o arquivo de ssh do usuário ceph
[ceph@controller ~]$ vi ~/.ssh/config
Host controller
Hostname controller
User ceph
Host mon1
Hostname mon1
User ceph
Host osd1
Hostname osd1
User ceph
Host osd2
Hostname osd2
User ceph
Host osd3
Hostname osd3
User ceph
Distribua a chave ssh entre os hosts do cluster
ssh-keyscan osd1 osd2 osd3 mon1 mon2 mon3 >> ~/.ssh/known_hosts
ssh-copy-id <HOST>
4. Preparação do Ceph
Configuração do repositório do Luminous.
sudo rpm -Uvh http://download.ceph.com/rpm-luminous/el7/noarch/ceph-release-1-1.el7.noarch.rpm
sudo yum update -y && sudo yum install ceph-deploy -y
Vamos gerar a configuração dos Ceph monitors.
su - ceph
mkdir ceph
cd ceph
ceph-deploy new mon1 mon2 mon3
Vamos a ajustar a configuração do ceph.conf colocando a rede 10.10.10.0/24 , pois esta é a rede de storage para o lab e neste momento não teremos um lab com rede de replicação .
vi ceph.conf
[global]
[global]
fsid = 40de64cc-7e71-45fb-a892-15361b18e227
mon_initial_members = mon1, mon2, mon3
mon_host = 10.10.10.100,10.10.10.101,10.10.10.102
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
public network = 10.10.10.0/24
cluster network = 10.10.10.10/24
#Choose reasonable numbers for number of replicas and placement groups.
osd pool default size = 2 # Write an object 2 times
osd pool default min size = 1 # Allow writing 1 copy in a degraded state
osd pool default pg num = 256
osd pool default pgp num = 256
#Choose a reasonable crush leaf type
#0 for a 1-node cluster.
#1 for a multi node cluster in a single rack
#2 for a multi node, multi chassis cluster with multiple hosts in a chassis
#3 for a multi node cluster with hosts across racks, etc.
osd crush chooseleaf type = 1
Execute a instalação inicial dos pacotes com o comando abaixo .
ceph-deploy install controller mon1 mon2 mon3 osd1 osd2 osd3
Após da instalação do ambiente crie o as chaves do Ceph .
ceph-deploy mon create-initial
[ceph@controller ceph]$ ls -l
total 472
-rw-------. 1 ceph ceph 113 Aug 27 01:09 ceph.bootstrap-mds.keyring
-rw-------. 1 ceph ceph 113 Aug 27 01:09 ceph.bootstrap-mgr.keyring
-rw-------. 1 ceph ceph 113 Aug 27 01:09 ceph.bootstrap-osd.keyring
-rw-------. 1 ceph ceph 113 Aug 27 01:09 ceph.bootstrap-rgw.keyring
-rw-------. 1 ceph ceph 151 Aug 27 01:09 ceph.client.admin.keyring
-rw-rw-r--. 1 ceph ceph 828 Aug 27 00:48 ceph.conf
-rw-rw-r--. 1 ceph ceph 453562 Aug 27 01:14 ceph-deploy-ceph.log
-rw-------. 1 ceph ceph 73 Aug 27 00:25 ceph.mon.keyring
Se a execução falhar por algum motivo , execute novamente com o comando abaixo para reiniciar o processo:
ceph-deploy –overwrite-conf mon create-initial
Faça deploy do ceph manager , em nosso cenário será realizado no mon1.
ceph-deploy mgr create mon1 mon2 mon3
5. Deploy das OSD’s
Vamos executar o comando abaixo para checar se os discos SDB , SDC e SDD estão nas vms OSD1 , OSD2 e OSD3.
[ceph@controller ceph]$ ceph-deploy disk list osd1 osd2 osd3
...
[ceph_deploy.conf][DEBUG ] found configuration file at: /home/ceph/.cephdeploy.conf
[ceph_deploy.cli][INFO ] Invoked (2.0.1): /bin/ceph-deploy disk list osd1 osd2 osd3
[ceph_deploy.cli][INFO ] ceph-deploy options:
[ceph_deploy.cli][INFO ] username : None
[ceph_deploy.cli][INFO ] verbose : False
[ceph_deploy.cli][INFO ] debug : False
[ceph_deploy.cli][INFO ] overwrite_conf : False
[ceph_deploy.cli][INFO ] subcommand : list
[ceph_deploy.cli][INFO ] quiet : False
[ceph_deploy.cli][INFO ] cd_conf : <ceph_deploy.conf.cephdeploy.Conf instance at 0x7fd6edc7aa28>
[ceph_deploy.cli][INFO ] cluster : ceph
[ceph_deploy.cli][INFO ] host : ['osd1', 'osd2', 'osd3']
[ceph_deploy.cli][INFO ] func : <function disk at 0x7fd6ee0c19b0>
[ceph_deploy.cli][INFO ] ceph_conf : None
[ceph_deploy.cli][INFO ] default_release : False
Execute a preparação dos discos de journal e dados em cada host OSD.
# journal
parted /dev/sdb --script -- mklabel gpt
parted --script /dev/sdb mkpart primary 0MB 2420MB
parted --script /dev/sdb mkpart primary 2421MB 4842MB
sgdisk --zap-all --clear --mbrtogpt -g -- /dev/sdb1
sgdisk --zap-all --clear --mbrtogpt -g -- /dev/sdb2
ceph-volume lvm zap /dev/sdb1
ceph-volume lvm zap /dev/sdb2
# data
dd if=/dev/zero of=/dev/sdc bs=1M count=1000
dd if=/dev/zero of=/dev/sdd bs=1M count=1000
Deploy das OSDs.
ceph-deploy osd create --filestore --fs-type xfs --data /dev/sdc --journal /dev/sdb1 <OSD HOST>
ceph-deploy osd create --filestore --fs-type xfs --data /dev/sdd --journal /dev/sdb2 <OSD HOST>
6. Deploy do Ceph
Configure os arquivos de configuração e chaves com o comando abaixo.
ceph-deploy admin controller mon1 mon2 mon3 osd1 osd2 osd3
Valide instalação executando o comando abaixo.
[root@mon1 ~]# ceph -s
cluster:
id: 40de64cc-7e71-45fb-a892-15361b18e227
health: HEALTH_OK
services:
mon: 3 daemons, quorum mon1,mon2,mon3
mgr: mon1(active), standbys: mon3, mon2
osd: 50 osds: 5 up, 5 in
data:
pools: 0 pools, 0 pgs
objects: 0 objects, 0 B
usage: 433 MiB used, 20 GiB / 20 GiB avail
pgs:
Referência
https://cephbrasil.com/ceph-filestore-deploy-do-luminous/