You are here: TWiki >  Main/Artigos Web  > VmwareDebian

Vmware em HA ( high availability )

Objectivo / Introdução

O objectivo deste tutorial é disponibilizar as principais instruções passo a passo para a criação de um sistema de alta disponibilidade com 2 nós utilizando as seguintes tecnologias: - debian etch; - vmware; - drbd; - heartbeat;

Este artigo parte do principio que temos um sistema debian etch com vmware instalado nas duas máquinas.

Vamos precisar de uma partição para a replicação do filesystem. Consideremos a seguinte estrutura como exemplo: /dev/sda1 -- 500 MB /boot (primary, ext3, Bootable flag: on) /dev/sda5 -- 10000 MB / (logical, ext3) /dev/sda6 -- 2000 MB swap (logical) /dev/sda7 -- 60 GB unmounted (logical) (will contain the /var/vm directory)

Nota: Dar os comandos em ambos os servidores, salvo especificado em contrário.

Instalação de pacotes necessários

Caso estejamos a utilizar uma máquina com memória RAM superior a 4GB é necessário instalar um novo kernel denominado "bigmem" e os respectivos headers.

apt-get update
apt-get install linux-image-2.6.18-4-686-bigmem linux-headers-2.6.18.-4-686-bigmem

Instalamos o drbde alguns pacotes necessários

apt-get install ssh drbd0.7* module-assistant heartbeat build-essential psmisc

Configuração do drbd

Na instalação do pacote drbd em debian, é copiado o codigo fonte para /usr/src, sendo necessário compilar e instalar .
cd /usr/src
tar xzf drbd0.7.tar.gz
cd /usr/src/modules/drbd/drbd
make && make install

Configuramos o drbd para usar a partição definida anteriormente ( /dev/hda7 ) como um "drbd device" e criar o sistema de ficheiros para ser utilizado. Como boa prática, podemos salvaguardar o ficheiro que vem por defeito com as configurações.

mv /etc/drbd.conf /etc/drbd.conf-sample
nano /etc/drbd.conf

resource vm1 {
  protocol C;
  incon-degr-cmd "echo '!DRBD! pri on incon-degr' | wall ; sleep 60 ; halt -f";
  startup {
    wfc-timeout  10; 		# 10 seconds
    degr-wfc-timeout 30;    # 30 seconds
  }
  disk {
    on-io-error   detach;
  }
  net {
    max-buffers   20000;		# Play with this setting to achieve highest possible performance
    unplug-watermark   12000;        	# Play with this setting to achieve highest possible performance
    max-epoch-size 20000;            	# Should be the same as max-buffers
  }
  syncer {
    rate 10M; 		# Use more if you have a Gigabit network. Speed is in Kylobytes. e.g.: 10M = 10Megabytes
    group 1;
    al-extents 257;
  }
  on server1 {		# Use the EXACT hostname of your server as give by the command "uname -n"
    device     /dev/drbd0;		# drbd device ID
    disk       /dev/sda7; 		# physical disk device , check your partitioning scheme !!
    address    172.20.20.100:7789;	# Fixed IP address of server1
    meta-disk  internal;		# I use internal metadata storage
  }
  on server2 {
    device     /dev/drbd0;
    disk       /dev/sda7; 
    address    172.20.20.200:7789;
    meta-disk  internal;
  }
}

Podemos ligar o serviço e criar o filesystem. ( nos 2 servers executar )

modprobe drbd
drbdadm up all

No server1, definimos como master/primary server:

drbdsetup /dev/drbd0 primary --do-what-I-say
mkfs.ext3 /dev/drbd0
drbdadm connect all

Neste momento demos inicio á sincronização dos file systems e podemos observar o mirroring através do comando

cat /proc/drbd

Devemos obter um output semelhante a este.

version: 0.7.10 (api:77/proto:74)SVN Revision: 1743 build by phil@mescal, 2005-01-31 12:22:07
0: cs:SyncSource st:Primary/Secondary ld:Consistent
     ns:13441632 nr:0 dw:0 dr:13467108 al:0 bm:2369 lo:0 pe:23 ua:226 ap:0
     [==========>.........] sync'ed: 53.1% (11606/24733)M
     finish: 1:14:16 speed: 2,644 (2,204) K/sec
1: cs:Unconfigured

Uma vez finalizada a sincronização podemos montar o filesystem criado em /var/vm, ou no directorio especificado para as maquinas virtuais definido na instalação do vmware.

mount -t ext3 /dev/drbd0 /var/vm

Neste momento deveremos ter a replicação configurada e a funcionar em ambos os servers. Podemos prosseguir com a configuração do heartbeat.

Configuração do Heartbeat

Com a instalação do heartbeat vamos ficar com a mudança automatica dos serviços entre os 2 server no caso de uma falha.

( os comandos seguintes devem ser executados nos 2 servers )

Basicamente temos de editar 3 ficheiros de configuração do heartbeat: "ha.cf", "haresources" and "authkeys".

nano /etc/ha.d/ha.cf

logfile	/var/log/ha-log
logfacility	local0
keepalive 1
deadtime 10
warntime 10
udpport	694
bcast	eth1
auto_failback off
node	server1  ## make sure both names are accessible - check /etc/hosts
node	server2
ping 192.168.0.254  ## Enter an IP address that is pingable from the ETH0 network !!
respawn hacluster /usr/lib/heartbeat/ipfail

Editamos agora o ficheiro authkeys:

nano /etc/ha.d/authkeys

auth 3
3 md5 failover  ## this is just a string, enter what you want ! auth 3 md5 uses md5 encryption

Temos que alterar as permissões

chmod 600 /etc/ha.d/authkeys

Editamos também o ficheiro haresources

nano /etc/ha.d/haresources

server1 192.168.0.10 drbddisk::vm1 Filesystem::/dev/drbd0::/var/vm::ext3 vmstart
# Explanation:
# Primary Server name --> virtual IP address to be used --> DRBD resource as configurd in /etc/drbd.conf
# --> where to mount the DRBD resource and the filesystem type --> resource to start/stop in case of failover
# the "vmstart" resource is a custom script needed for VMWare Server since you can't have heartbeat take control of
# the vmware services or you will run into the dreaded "not configured for this machine" errors !

Uma nota especial para o script vmstart, uma vez que é ele o responsavel pelo arranque das maquinas virtuais em caso de falha. O script vai ficar situado em "/etc/ha.d/resource.d/" .

nano /etc/ha.d/resource.d/vmstart

#!/bin/bash 
case "$1" in
start)
/usr/bin/vmware-cmd -s register "/var/vm/'virtual machine name'/'vm config file'.vmx" 2>/dev/null
/usr/bin/vmware-cmd "/var/vm/'virtual machine name'/'vm config file'.vmx" start 2>/dev/null
;;
stop)
/usr/bin/vmware-cmd "/var/vm/'virtual machine name'/'vm config file'.vmx" stop trysoft 2> /dev/null
;;
status)
if `/usr/bin/vmware-cmd "/var/vm/'virtual machine name'/'vm config file'.vmx" getstate 2>/dev/null | grep -q "getstate() = on"` 
then
echo "running"
else
echo "stopped"
fi
;;
*)
echo "Usage: `basename $0` 'virtual machine file' {start|stop|status}"
echo "Where "virtual machine file" is like /var/vm/'virtual machine name'/'vm config file'.vmx"
;;
esac 
exit 0

Os parametros 'virtual machine' e 'vm config file' devem ser adaptados caso a caso. Para mais do que uma maquina virtual, replicamos os comandos ... O script vai registar a maquina virtual e depois arrancar com a mesma.

Terminadas as configurações, podemos testar. Devemos arrancar com o serviço heartbeat primeiro no server1 e depois no server2.

/etc/init.d/heartbeat start

Se não houver problemas deveremos obter informação sobre o nosso "virtual ip" no "master server" através do comando:

ifconfig |more

Output:

eth0 Link encap:Ethernet  HWaddr 00:11:09:00:BB:5D
          inet addr:192.168.0.1  Bcast:192.168.0.255  Mask:255.255.255.0
          inet6 addr: fe80::211:9ff:fe00:bb5d/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1025774 errors:0 dropped:0 overruns:0 frame:0
          TX packets:227653 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:281072399 (268.0 MiB)  TX bytes:56403081 (53.7 MiB)
eth0:0    Link encap:Ethernet  HWaddr 00:11:09:00:BB:5D
          inet addr:192.168.0.10  Bcast:192.168.0.255  Mask:255.255.255.0
          ...

Uma vez terminada a instalação podemos provocar o failover e observar o nosso slave server a retomar o serviço.

-- PedroRodrigues - 22 Sep 2007

key Log In Wiki.PortalPme.pt

home PortalPme Home



 
wiki.portalpme.pt Tags:
Debian1Remove my vote on this tag High Availability1Remove my vote on this tag Linux1Remove my vote on this tag Virtualização1Remove my vote on this tag VMware1Remove my vote on this tag create new tag
, view all tags
Copyright © by Centimfe Powered by TWiki
  LRD  AMLEI  RTLeiria Fátima  Nerlei  Centimfe  IPL  POSC  FEDER