Pesquisa de site

Armazenamento de alta disponibilidade com GlusterFS no CentOS 7 - espelhamento em dois servidores de armazenamento


Este tutorial existe para estas versões do sistema operacional

  • CentOS 7.2
  • CentOS 5.4

Nesta página

  1. 1 Nota Preliminar
  2. 2 Habilitar repositórios adicionais
  3. 3 Configurando os servidores GlusterFS
  4. 4 Configurando o cliente GlusterFS
  5. 5 Testes
  6. 6 links

Este tutorial mostra como configurar um armazenamento de alta disponibilidade com dois servidores de armazenamento (CentOS 7.2) que usam GlusterFS. Cada servidor de armazenamento será um espelho do outro servidor de armazenamento e os arquivos serão replicados automaticamente em ambos os servidores de armazenamento. O sistema cliente (CentOS 7.2 também) poderá acessar o armazenamento como se fosse um sistema de arquivos local. GlusterFS é um sistema de arquivos em cluster capaz de escalar para vários peta-bytes. Ele agrega vários blocos de armazenamento sobre Infiniband RDMA ou interconexão TCP/IP em um grande sistema de arquivos de rede paralela. Os tijolos de armazenamento podem ser feitos de qualquer hardware comum, como servidores x86_64 com RAID SATA-II e Infiniband HBA.

1 Nota Preliminar

Neste tutorial eu uso três sistemas, dois servidores e um cliente:

  • server1.example.com: endereço IP 192.168.0.100 (servidor)
  • server2.example.com: endereço IP 192.168.0.101 (servidor)
  • client1.example.com: endereço IP 192.168.0.102 (cliente)

Todos os três sistemas devem ser capazes de resolver os nomes de host dos outros sistemas. Se isso não puder ser feito por meio do DNS, edite o arquivo /etc/hosts para que fique da seguinte maneira nos três sistemas:

nano /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
192.168.0.100   server1.example.com     server1
192.168.0.101   server2.example.com     server2
192.168.0.102   client1.example.com     client1

::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

(Também é possível usar endereços IP em vez de nomes de host na configuração a seguir. Se você preferir usar endereços IP, não precisa se preocupar se os nomes de host podem ser resolvidos ou não.)

2 Habilitar repositórios adicionais

server1.example.com/server2.example.com/client1.example.com:

Primeiro, importamos as chaves GPG para pacotes de software:

rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY*

Em seguida, habilitamos o repositório EPEL 7 em nossos sistemas CentOS:

yum -y install epel-release
yum -y install yum-priorities

Edite /etc/yum.repos.d/epel.repo...

nano /etc/yum.repos.d/epel.repo

... e adicione a linha priority=10 à seção [epel]:

[epel]
name=Extra Packages for Enterprise Linux 7 - $basearch
#baseurl=http://download.fedoraproject.org/pub/epel/7/$basearch
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-7&arch=$basearch
failovermethod=priority
enabled=1
priority=10
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
[...]

Em seguida, atualizamos nossos pacotes existentes no sistema:

yum -y update

3 Configurando os servidores GlusterFS

O GlusterFS está disponível no repositório do grupo de interesse especial de armazenamento do CentOS. Instale o repositório com este comando:

yum -y install centos-release-gluster

Em seguida, instale o servidor GlusterFS da seguinte maneira:

yum -y install glusterfs-server

Crie os links de inicialização do sistema para o daemon Gluster e inicie-o:

systemctl enable glusterd.service
systemctl start glusterd.service

O comando

glusterfsd --version

agora deve mostrar a versão do GlusterFS que você acabou de instalar (3.7.12 neste caso):

[ ~]# glusterfsd --version
glusterfs 3.7.12 built on Jun 24 2016 14:11:19
Repository revision: git://git.gluster.com/glusterfs.git
Copyright (c) 2006-2013 Red Hat, Inc. <http://www.redhat.com/>
GlusterFS comes with ABSOLUTELY NO WARRANTY.
It is licensed to you under your choice of the GNU Lesser
General Public License, version 3 or any later version (LGPLv3
or later), or the GNU General Public License, version 2 (GPLv2),
in all cases as published by the Free Software Foundation.

Se você usar um firewall, certifique-se de que as portas TCP 111, 24007, 24008, 24009-(24009 + número de tijolos em todos os volumes) estejam abertas em server1.example.com e server2.example.com.

Em seguida, devemos adicionar server2.example.com ao pool de armazenamento confiável (observe que estou executando todos os comandos de configuração GlusterFS de server1.example.com, mas você também pode executá-los de server2.example.com porque a configuração é replicada entre os nós GlusterFS - apenas certifique-se de usar os nomes de host ou endereços IP corretos):

Em server1.example.com, execute

gluster peer probe server2.example.com
[ ~]# gluster peer probe server2.example.com
peer probe: success.

O status do pool de armazenamento confiável agora deve ser semelhante a este:

gluster peer status
[ ~]# gluster peer status
Number of Peers: 1
Hostname: server2.example.com
Uuid: 582e10da-aa1b-40b8-908c-213f16f57fe5
State: Peer in Cluster (Connected)

Em seguida, criamos o compartilhamento chamado testvol com duas réplicas (observe que o número de réplicas é igual ao número de servidores neste caso porque queremos configurar o espelhamento) em server1.example.com e server2.example.com em o diretório /data (será criado se não existir):

gluster volume create testvol replica 2 transport tcp server1.example.com:/data server2.example.com:/data force
[ ~]#

Iniciar o volume:

gluster volume start testvol

O resultado deve ser:

[ ~]#

É possível que o comando acima diga que a ação não foi bem-sucedida:

[ ~]#

Neste caso, você deve verificar a saída de...

netstat -tap | grep glusterfsd

em ambos os servidores.

Se você obtiver uma saída como esta...

[ ~]#

... está tudo bem, mas se você não obtiver nenhuma saída...

[ ~]#

... reinicie o daemon GlusterFS no servidor correspondente (server2.example.com neste caso):

systemctl restart glusterd.service

Em seguida, verifique a saída de ...

netstat -tap | grep glusterfsd

... novamente naquele servidor - agora deve ficar assim:

[ ~]#

Agora, de volta ao server1.example.com:

Você pode verificar o status do volume com o comando

gluster volume info

[[email  ~]# informações de volume gluster

Volume Name: testvol
Type: Replicate
Volume ID: e1f825ca-c9d9-4eeb-b6c5-d62c4aa02376
Status: Started
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: server1.example.com:/data
Brick2: server2.example.com:/data
Options Reconfigured:
performance.readdir-ahead: on
[ ~]#

Por padrão, todos os clientes podem se conectar ao volume. Se você deseja conceder acesso apenas a client1.example.com (= 192.168.1.102), execute:

gluster volume set testvol auth.allow 192.168.1.102

Observe que é possível usar curingas para os endereços IP (como 192.168.*) e que você pode especificar vários endereços IP separados por vírgula (por exemplo, 192.168.1.102,192.168.1.103).

As informações do volume agora devem mostrar o status atualizado:

gluster volume info
[ ~]# gluster volume info
Volume Name: testvol
Type: Replicate
Volume ID: e1f825ca-c9d9-4eeb-b6c5-d62c4aa02376
Status: Started
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: server1.example.com:/data
Brick2: server2.example.com:/data
Options Reconfigured:
auth.allow: 192.168.1.102
performance.readdir-ahead: on
[ ~]#

4 Configurando o cliente GlusterFS

No cliente, podemos instalar o cliente GlusterFS da seguinte forma:

yum -y install glusterfs-client

Então criamos o seguinte diretório:

mkdir /mnt/glusterfs

É isso! Agora podemos montar o sistema de arquivos GlusterFS em /mnt/glusterfs com o seguinte comando:

mount.glusterfs server1.example.com:/testvol /mnt/glusterfs

(Em vez de server1.example.com, você também pode usar server2.example.com no comando acima!)

Agora você deve ver o novo compartilhamento nas saídas de...

mount
[ ~]#

... e...

df -h
[ ~]#

Em vez de montar o compartilhamento GlusterFS manualmente no cliente, adicione o comando mount ao arquivo /etc/rc.local. Não vou adicioná-lo a /etc/fstab porque rc.local é sempre executado depois que a rede está ativa, o que é necessário para um sistema de arquivos de rede

Abra /etc/rc.local e anexe a seguinte linha:

nano /etc/rc.local
[...]
/usr/sbin/mount.glusterfs server1.example.com:/testvol /mnt/glusterfs

(Novamente, em vez de server1.example.com, você também pode usar server2.example.com!)

Para testar se o /etc/rc.local modificado está funcionando, reinicie o cliente:

reboot

Após a reinicialização, você deve encontrar o compartilhamento nas saídas de...

df -h

... e...

mount

5 Testes

Agora vamos criar alguns arquivos de teste no compartilhamento GlusterFS:

touch /mnt/glusterfs/test1
touch /mnt/glusterfs/test2

Agora vamos verificar o diretório /data em server1.example.com e server2.example.com. Os arquivos test1 e test2 devem estar presentes em cada nó:

server1.example.com/server2.example.com:

ls -l /data
[ ~]

Agora encerramos server1.example.com e adicionamos/excluímos alguns arquivos no compartilhamento GlusterFS em client1.example.com.

shutdown -h now
touch /mnt/glusterfs/test3
touch /mnt/glusterfs/test4
rm -f /mnt/glusterfs/test2

Os comandos podem levar algum tempo para serem executados, pois o Glusterfs muda para o server2 depois que ele não consegue mais acessar o server1. Podemos ver aqui a tolerância a falhas do sistema, pois ainda podemos trabalhar em nosso compartilhamento de armazenamento de dados quando o servidor1 estiver offline. As alterações devem estar visíveis no diretório /data em server2.example.com:

ls -l /data
[ ~]# ls -l /data
total 8
-rw-r--r--. 2 root root 0 Jul 1 15:17 test1
-rw-r--r--. 2 root root 0 Jul 1 15:19 test3
-rw-r--r--. 2 root root 0 Jul 1 15:19 test4

Vamos inicializar server1.example.com novamente e dar uma olhada no diretório /data:

ls -l /data
[ ~]#

Como você pode ver, server1.example.com sincronizou automaticamente o arquivo alterado. Caso a alteração ainda não tenha sido sincronizada, isso é fácil de corrigir, tudo o que precisamos fazer é invocar um comando de leitura no compartilhamento GlusterFS em client1.example.com, por exemplo:

ls -l /mnt/glusterfs/
[ ~]#

Agora dê uma olhada no diretório /data em server1.example.com novamente e você verá que as alterações foram replicadas para esse nó:

ls -l /data
[ ~]#

6 Ligações

  • GlusterFS: http://www.gluster.org/
  • Documentação do GlusterFS 3.2: http://download.gluster.com/pub/gluster/glusterfs/3.2/Documentation/AG/html/index.html
  • CentOS: http://www.centos.org/

Artigos relacionados: