Quorum Cluster Proxmox GlusterFS

02 – Como configurar discos locais como LVM-Thin no Proxmox.

Fala Jovens, Rafael aqui! Continuando nossa série rumo a alto disponibilidade de dois hosts Proxmox. Hoje iremos tratar sobre um assunto muito interessante o famoso LVM sobre discos. 



CONSIDERAÇÕES

Estou levando em consideração que já possua familiaridade com o tema abordado e que se o seu objetivo for criar uma alto disponibilidade com o proxmox, tenha visto o artigo anterior, para não pegar o bonde andando. 😉



REFRESCANDO A MEMÓRIA: O QUE É LVM?

“LVM” (Logical Volume Manager – Gerenciador de Volume Lógico) é um método de alocar espaço do disco rígido em volumes lógicos que podem ser facilmente redimensionados, ao contrário das partições. Com o LVM, o disco rígido ou conjunto de discos rígidos são alocados em um ou mais volumes físicos. Podemos analisar melhor o funcionamento do LVM através da ilustração abaixo.

Analisando a imagem acima é possível observar que existe uma regra a seguir para trabalharmos de forma correta com LVM, sendo a seguinte ordem:

a) Disco físico.
b) Criação de partições. (Uma para cada disco físico).
c) Criação de “Phisical Volumes” (Uma para cada partição criada).
d) Criação de um ou mais “Volume Groups” com base nos PV criados.
e) Criação de “Logical Volume” baseado nos VGs.
f) Formatação e criação de sistema de arquivos.



1)  CRIANDO PARTIÇÕES

Agora que estamos por dentro do LVM, vamos criar nossa primeira partição. Irei tratar aqui o procedimento somente no pve1 para não ficar repetitivo, mas todos os procedimentos aqui abordados devem ser executados igualmente nos outros nós do Cluster, no nosso exemplo, no pve2. 

Acesse o Shell do pve1 e execute o comando “fdisk -l”, repare que será listado todos os discos locais disponíveis neste host como demostrado abaixo:

				
					root@pve1:~# fdisk -l
Disk /dev/sda: 20 GiB, 21474836480 bytes, 41943040 sectors
Disk model: VBOX HARDDISK   
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: D413CF4E-C49C-4999-8CD0-A6AC93952E16

Device       Start      End  Sectors  Size Type
/dev/sda1       34     2047     2014 1007K BIOS boot
/dev/sda2     2048  1050623  1048576  512M EFI System
/dev/sda3  1050624 41943006 40892383 19.5G Linux LVM


Disk /dev/sdb: 40 GiB, 42949672960 bytes, 83886080 sectors
Disk model: VBOX HARDDISK   
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/mapper/pve-swap: 2.4 GiB, 2550136832 bytes, 4980736 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/mapper/pve-root: 4.8 GiB, 5100273664 bytes, 9961472 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
				
			

Iremos utilizar somente o disco /dev/sdb de 40GB, o único disco disponível. Vamos então criar uma partição única do tipo GPT com o mesmo tamanho do disco utilizando a ferramenta cfdisk

				
					cfdisk /dev/sdb
				
			

Ao acessar o “cfdisk /dev/sdb” escolha a opção “gpt”.

				
					
                  ┌ Select label type ───┐
                  │ gpt***               │
                  │ dos                  │
                  │ sgi                  │
                  │ sun                  │
                  └──────────────────────┘


				
			

Agora escolha a opção “New”, e crie uma nova partição do tamanho total de 40GB. Também escolha o tipo da partição como “Linux LVM”.

				
					              │ Linux home                   │
              │ Linux RAID                   │
              │ Linux extended boot          │
              │ Linux LVM****                │
              │ FreeBSD data                 │
              │ FreeBSD boot                 │
              │ FreeBSD swap                 │
              └────────────────────────────↓─┘

				
			

Com o tipo escolhido, vá até a opção “Write” e ao ser perguntado se deseja gravar, responda “yes”.

				
					 Are you sure you want to write the partition table to disk? yes

   Type "yes" or "no", or press ESC to leave this dialog.
				
			

Pronto, ao sair do cfdisk, nossa partição estará criada. Caso deseje visualizar a partição para ter certeza que foi criada corretamente, podemos utilizar o comando “fdisk -l /dev/sdb”, como demonstrado abaixo:

				
					root@pve1:~# fdisk -l /dev/sdb
Disk /dev/sdb: 40 GiB, 42949672960 bytes, 83886080 sectors
Disk model: VBOX HARDDISK   
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: F8B5474E-E30F-5341-AA47-659BC00E7A74

Device     Start      End  Sectors Size Type
/dev/sdb1   2048 83886046 83883999  40G Linux LVM
				
			


2) CRIANDO PHISICAL VOLUME.

Com nossa partição física criada, vamos criar nosso Phisical Volume no LVM. Para isso, iremos utilizar o comando pvcreate passando o caminho da partição como ilustrado abaixo:

				
					root@pve1:~# pvcreate /dev/sdb1
  Physical volume "/dev/sdb1" successfully created.
				
			

Para listar nosso PV criado, utilize o comando “pvs” como ilustrado abaixo:

				
					root@pve1:~# pvs
  PV         VG  Fmt  Attr PSize   PFree  
  /dev/sda3  pve lvm2 a--  <19.50g  <2.38g
  /dev/sdb1      lvm2 ---  <40.00g <40.00g
				
			


3) CRIANDO VOLUME GROUP.

Com nosso PV criado, vamos agora criar o Volume Group. Para cria-lo precisamos ter em mente que dependemos de um ou alguns PVs (Phisical Volumes). No nosso exemplo, irei utilizar somente um PV, o que criamos anteriormente. Porém, é importante ressaltar que a ideia por trás do VG e justamente concatenar vários discos ou partições em um único volume, disponibilizando assim um espaço agrupado de vários discos como se fosse um só.

Vamos criar um VG chamado vg_glusterfs com o comando vgcreate utilizando a partição /dev/sdb1 como ilustrado abaixo:

				
					root@pve1:~# vgcreate vg_glusterfs /dev/sdb1
  Volume group "vg_glusterfs" successfully created

				
			

Para listar nosso VG criado, utilize o comando “vgs” como ilustrado abaixo:

				
					root@pve1:~# vgs
  VG           #PV #LV #SN Attr   VSize   VFree  
  pve            1   3   0 wz--n- <19.50g  <2.38g
  vg_glusterfs   1   0   0 wz--n- <40.00g <40.00g

				
			


4) CRIANDO LOGICAL VOLUME

Com nossos PV e VG criados agora precisamos criar nosso “Logical Volume”. Em nosso exemplo iremos criar um LV de 1Mb, isso porque o utilizaremos como LVM-Thin no Proxmox. 

Vamos então criar um LV chamado lv_vms com o comando lvcreate no VG criado anteriormente chamado vg_glusterfs, como ilustrado abaixo:

				
					root@pve1:~# lvcreate -L 1MB -n lv_vms vg_glusterfs
  Rounding up size to full physical extent 4.00 MiB
  Logical volume "lv_vms" created.
				
			

Para listar nosso LV criado, utilize o comando “lvs” como ilustrado abaixo:

				
					root@pve1:~# lvs
  LV     VG           Attr       LSize 
  data   pve          twi-a-tz-- <8.00g   
  root   pve          -wi-ao----  4.75g                                                 
  swap   pve          -wi-ao---- <2.38g                                           
  lv_vms vg_glusterfs -wi-a-----  4.00m   
				
			


5) CONFIGURANDO LVM-Thin

Agora já podemos transformar nosso  LV chamado “lv_vms” em um armazenamento LVM-Thin. A ideia deste armazenamento e manter um espaço disponível dinamicamente alocado. Para isso vamos utilizar o comando lvconvert como ilustrado abaixo:

				
					root@pve1:~# lvconvert --type thin-pool vg_glusterfs/lv_vms
  Thin pool volume with chunk size 64.00 KiB can address at most 15.81 TiB of data.
  WARNING: Converting vg_glusterfs/lv_vms to thin pool's data volume with metadata wiping.
  THIS WILL DESTROY CONTENT OF LOGICAL VOLUME (filesystem etc.)
Do you really want to convert vg_glusterfs/lv_vms? [y/n]: y
  Converted vg_glusterfs/lv_vms to thin pool.
				
			

Repare que existe uma pergunta, logo após a execução do comando solicitando confirmação para conversão do Logical Volume. digite “y”. Pronto, já temos nosso LVM-thin criado.



6) ESTENTENDO LOGICAL VOLUME.

Agora que criamos nosso LVM-thin, vamos estender todo o volume lógico de forma a ocupar todo os espaço disponível no Volume Group. Para isso, iremos utilizar o comando lvextend e passar como parâmetros a informação 100%FREE, para que ele entenda que desejamos utilizar todo o espaço vazio disponível, e os nomes do VG e LV como ilustrado abaixo:

				
					root@pve1:~# lvextend -l 100%FREE vg_glusterfs/lv_vms
  Size of logical volume vg_glusterfs/lv_vms_tdata changed from 4.00 MiB (1 extents) to 39.98 GiB (10236 extents).
  Logical volume vg_glusterfs/lv_vms_tdata successfully resized.
				
			


7) FORMANTANDO PARTIÇÃO LVM-Thin.

Precisamos finalmente formatar nossa partição LVM-Thin com um sistema de arquivos para que possamos utiliza-la. Para isso, iremos utilizar o sistema de arquivos XFS.

				
					root@pve1:~# ls /dev/mapper/vg*
/dev/mapper/vg_glusterfs-lv_vms        /dev/mapper/vg_glusterfs-lv_vms_tmeta
/dev/mapper/vg_glusterfs-lv_vms_tdata
				
			

Repare que dentro de nosso /dev/mapper/ é possível localizar nossa partição LVM-Thin criada: “/dev/mapper/vg_glusterfs-lv_vms“. Vamos então realizar a formatação de nossa partição com o comando mkfs.xfs passando o caminho de nosso LVM-Thin, como ilustrado abaixo:

				
					root@pve1:~# mkfs.xfs /dev/mapper/vg_glusterfs-lv_vms
meta-data=/dev/mapper/vg_glusterfs-lv_vms isize=512    agcount=16, agsize=655104 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=0
data     =                       bsize=4096   blocks=10481664, imaxpct=25
         =                       sunit=16     swidth=16 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=5120, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
root@pve1:~# 
				
			

Após formatado, precisamos montar nossa partição. Para isso, iremos criar um ponto de montagem no diretório raiz chamado xfsdata. Este ponto de montagem será responsável por montar nossa nova partição LVM-thin, como ilustrado abaixo:

				
					root@pve1:/mnt# mkdir /data
root@pve1:/mnt# mount -t xfs /dev/mapper/vg_glusterfs-lv_vms /data/
				
			

Repare que nossa partição esta montada e acessível, como ilustrado abaixo: 

				
					root@pve1:/mnt# df -hlT | grep xfs
/dev/mapper/vg_glusterfs-lv_vms xfs        40G   74M   40G   1% /data
root@pve1:/mnt# cd /data/
root@pve1:/xfsdata# 
				
			


8) MONTANDO PARTIÇÃO NA INICIALIZAÇÃO DO SISTEMA.

Precisamos também realizar a configuração de montagem automática de nossa partição. Isso se faz necessário porque se caso o servidor reiniciar, nossa partição será montada automaticamente na inicialização. Para isso, vamos fazer um pouco diferente.

Como minha mãe falou que eu não sou todo mundo, uma alternativa que inclusive acho mais viável do que alterar o fstab, é utilizar o SystemD. Para isso, precisamos criar dois scripts, uma target para o SystemD e um script propriamente dito para realizar a montagem da partição.

Vamos criar um script target.service  em /etc/systemd/system/ chamado data.service, esta target irá executar na inicialização do sistema chamando nosso script de montagem de partição.

				
					root@pve1:/# vim /etc/systemd/system/data.service
				
			
				
					[Unit]
Description=Script de montagem da partição /data

[Service]
Type=simple
RemainAfterExit=yes
ExecStart=/etc/init.d/mount-data.sh start
ExecStop=/etc/init.d/mount-data.sh stop
ExecReload=/etc/init.d/mount-data.sh restart

[Install]
WantedBy=multi-user.target
				
			

Após criar nossa target e importante atualizar as deamons para que o SystemD enxergue nossa nova target criada.

				
					root@pve1:/# systemctl daemon-reload
				
			

Repare que no script acima, estamos apontando nosso ExecStart para o script de montagem que criaremos dentro de /etc/init.d/ chamado mount-data.sh, como ilustrado abaixo:

				
					root@pve1:/# vim /etc/init.d/mount-data.sh
				
			
				
					#!/bin/bash

case "$1" in 
start)
   mount -t xfs /dev/mapper/vg_glusterfs-lv_vms /data
   ;;
stop)
   umount /data
   ;;
restart)
   $0 stop
   $0 start
   ;;
status)
   ;;
*)
   echo "Usage: $0 {start|stop|status|restart}"
esac

exit 0 
				
			

De permissão de execução ao arquivo mount-data.sh através do comando chmod +x /etc/init.d/mount-data.sh

Agora precisamos adicionar nossa target para inicializar junto com o sistema. Para isso, vamos adicioná-la a inicialização com o comando systemctl enable, como ilustrado abaixo:

				
					root@pve1:/# systemctl enable data.service 
Created symlink /etc/systemd/system/multi-user.target.wants/mount-data.service → /etc/systemd/system/mount-data.service.
				
			

Pronto, realize o procedimentos em todos os nós do cluster e reinicie, repare que ao voltar, os pontos estarão montados e funcionando.



CONCLUSÃO

Neste artigo vimos como criar de maneira simples, um LVM-Thin baseando-se em uma partição física de um disco local utilizando LVM e XFS. No próximo artigo iremos falar sobre Glusterfs.

Se você gostou deste post e através dele pude lhe ajudar, o que acha de aproximarmos nosso contato? Siga meu blog, twitter, youtube, instagram e me adicione no Linkedin, aproveite para classificar algumas das minhas competências/recomendações, este simples gesto faz toda a diferença.

Att,
Rafael Oliveira
SysAdmin

Você pode compartilhar esse artigo.

Siga o Blog Via E-mail

Digite seu endereço de e-mail para assinar este blog e receber notificações de novas publicações por e-mail.

Junte-se a 46 outros assinantes

Sobre o Autor

Rafael Oliveira Maria - Linux

Rafael Oliveira

Bacharel em Sistemas de Informação, SysAdmin, Professor, Blogueiro e Entusiasta Linux.

Certificados:

LPIC-1-Large
LPIC-2
LinuxPlus Logo Certified
itil-foundation-digital-badge

Gostou do conteúdo? Ajude-me a manter o blog.

PicPay - Linux

Aceitamos pagamentos e doações via PicPay link picpay.me/rafaeloliveimar

Ficou com dúvida? Alguma Sugestão ou Elogio? Deixe seu comentário!