Tadeu Cruz


Linux: Alta Disponibilidade

Vamos supor que você tem um servidor de arquivo com Linux, ou um servidor Web muito importante para sua empresa que jamais pode ficar fica indisponível, como resolver este problema ?

A resposta disso esta neste tutorial bastante básico de alta disponibilidade entre 2 servidores, vamos usar a distro Ubuntu Server 8.04 e os softwares:

  • heartbeat – responsável pela alta disponibilidade
  • drbd – responsável pela a “sincronização” de dados entre os servidores

Primeiro coisa é a escolha dos hardware para seus servidores, eu aconselho que as 2 maquinas sejam idênticas ate mesmo para não ter perda de desempenho caso a maquina principal pare de funcionar, caso não de para ter as 2 maquinas idênticas uma coisa é importante é obrigatório, que o espaço para os dados sejam de tamanhos idênticos (exemplo: partição, hd, LVM) senão o DRBD não irar funcionar corretamente, falando nisso o que seria o DRBD,como ele funciona ?

Bom o DRBD seria como um raid-1, porem pela a rede do computador, tudo que escreve num computador é automaticamente escrito no outro, porem somente um computador tem acesso aos dados.

Vamos supor que para a maquina 1 você tenha dado o nome de “node1” e para a maquina 2 “node2”. Para instalação é simples, execute nas 2 maquinas:

  • aptitude update
  • aptitude install drbd8-utils

Editar o arquivo /etc/drbd.conf nas 2 maquina:

global { usage-count yes; }  
common { protocol C; }  
resource dados {  
    on node1 { 
        device /dev/drbd1; 
        disk /dev/sda3; 
        address 192.168.0.250:7789; #IP DA MAQUINA 
        meta-disk internal; 
    } 
    on node2 { 
        device /dev/drbd1; 
        disk /dev/sda3; 
        address 192.168.0.251:7789; #IP DA MAQUINA 
        meta-disk internal; 
    } 
}

Podem reparar que o sda3 tem o mesmo tamanho e não pode ter nenhum sistema de arquivo neles

Lembrando de mudar os campos “address” para o IP de cada maquina, depois disso vamos executar os seguintes comandos:

  • drbdadm create-md dados
  • /etc/init.d/drbd restart

Execute no node1:

  • drbdadm — –overwrite-data-of-peer primary dados

agora e esperar os nodes syncronizares, para ver como anda:

  • cat /proc/drbd

version: 8.0.11 (api:86/proto:86) GIT-hash: b3fe2bdfd3b9f7c2f923186883eb9e2a0d3a5b1b build by phil@mescal, 2008-02-12 11:56:43 1: cs:SyncSource st:Primary/Secondary ds:UpToDate/Inconsistent C r--- ns:2670316 nr:0 dw:0 dr:2678496 al:0 bm:162 lo:1 pe:5 ua:256 ap:0 [========>...........] sync'ed: 46.6% (2998/5606)M finish: 0:08:31 speed: 5,960 (6,448) K/sec resync: used:2/31 hits:166982 misses:164 starving:0 dirty:0 changed:164 act_log: used:0/127 hits:0 misses:0 starving:0 dirty:0 changed:0

Apos terminar e hora de formatar a partição, eu escolhi ext3 mas a escolha fica por conta sua

  • mkfs.ext3 /dev/drbd1

Duvidas sobre os paramentos: www.drbd.org/docs/about/

Agora vamos instalar o heartbeat, mas antes o que seria o heartbeat ?  heartbeat é responsável por verificar se os nodes estao funcionando caso o node principal saia do ar ele levanta os serviços no node secundário sem nenhuma interversão do usuário. Para instalar nos 2 nodes é simples:

  • aptitude install heartbeat-2

Apos disso vamos criar o arquivo de configuração /etc/ha.d/ha.cf com o seguinte conteúdo

debugfile /var/log/ha-debug bcast eth0 #INTERFACE QUE AS MAQUINAS ESTÃO LIGADAS keepalive 2 warntime 10 deadtime 10 initdead 15 auto_failback off respawn hacluster /usr/lib/heartbeat/ipfail ping 192.168.1.250 192.168.1.251 #IP DAS MAQUINAS node node1 node node2

Criar também o arquivo /etc/ha.d/authkeys

auth1 1 md5 suafrasesecreta

Criar tambem o arquivo /etc/ha.d/haresources, o mais importante, com o seguinte conteúdo

node1  Ipaddr::192.168.0.10/24/eth0 drbddisk::dados Filesystem::/dev/drbd1::/dados apache2

com este arquivo e bastante interessante e formado da seguinte forma:

serviço são buscado no /etc/ha.d/resource.d/ ou no /etc/init.d/ o arquivo deve ser basicamente neste estilo

#/bin/bash 

case "$1" in  
    start) 
        # Programa a ser iniciado ;; 
    stop) 
        # Comando para ser parado ;; 
    status) 
        # Comando para mostrar Status ;; 
esac  

Estes arquivos tem quer ser IDÊNTICOS nos 2 servidores. Vamos iniciar o heartbeat

  • /etc/init.d/heartbeat start

Duvidas no parâmetros: www.linux-ha.org

Como irar funcionar isso tudo, bastante simples, node1 esta no poder respondendo o serviço no IP 192.168.0.10, mas de repente sua fonte queima é desligava a maquina, em menos de 1 minuto o node2 irar responder pelo o serviço e os usuários nem vão perceber a queda do serviços.

Tenho que comentar umas coisas importante que não falei ao longo do tutorial, a maquina que usei somente tinha uma interface de rede por isso usei eth0 em todas as configurações, mas o mais ideal é você utilizar 2 interfaces de rede para interligar os servidores. Como você pode imagina a carga de sync entre o DRBD é muito grande e assim você evitar gargalos na rede, então você teria que somente mudar o arquivo /etc/ha.d/ha.cf de eth0 para ethX e os IPS para a sua solução.

No arquivo /etc/ha.d/haresources no parâmetro “Ipaddr::192.168.0.10/24/eth0” você vai colocar o IP e interface que o serviço irar responder e mudar de Ipaddr para Ipaddr2 pois o Ipaddr cria uma alias da interface(eth1:0) é o Ipaddr2 levanta o IP realmente na placa. Qualquer duvidas somente deixar um comentário.