Live migration

17 views
Skip to first unread message

Gilberto Nunes

unread,
Nov 24, 2009, 1:48:33 PM11/24/09
to xen...@googlegroups.com
Pessoal

Estou tentando montar um cenário com as seguintes ferramentas:

- Xen
- DRBD
- OCFS2
- HeartBeat

Porém não imagino como fazer o heartbeat funcionar
Já configurei ele e está rodando nas duas pontas
O DRBD está Primary/Primary e o OCFS tá configurado corretamente pois
consigo montar a partição nos dois lados.

Porém eu parei na hora de criar o haresources pro heartbeat.
TEnho duvidas de como fazer quando o nodo 1 ( principal) falhar.
Como fazer a VM migrar de um lado pra o outro?:???

Se alguem puder me ajudar agradeço

obrigado

--
Gilberto Nunes

Ayres Neto

unread,
Nov 24, 2009, 2:12:30 PM11/24/09
to xen...@googlegroups.com
Gilberto,

Os Heartbeat's de cada nó enviam mensagens entre si dizendo "estou ativo". 
Quando um percebe que um deixou de mandar mensagem ele encara aquele nó como falho, e sobe os recursos que estão configurados no "haresources".
Aqui é um exemplo deste arquivo:

#haresources
no1 drbddisk::r1 drbddisk::r2 xen::/etc/xen/vm1.cfg::vm1 xen::/etc/xen/vm2.cfg::vm2
no2 drbddisk::r3 drbddisk::r4 xen::/etc/xen/vm3.cfg::vm3 xen::/etc/xen/vm4.cfg::vm4

Mas como ele interpreta este arquivo?
Bom, os nós participantes do cluster são atribuídos primeiro, como ta ai: no1 e no2.
Onde vc vê ai: "drbddisk::r1" é um script que está na pasta /etc/ha.d/resource.d/ com o nome drbddisk. o "r1" é o nome do recurso configurado no drbd.
O Heartbeat quando percebe que um nó falhou ele executa os scripts do nó que falhou (utilizando como referência o haresources) passando o parâmetro que vem em seguida, como o "r1". Supondo que o no2 que falhou, o Heartbeat do nó1 vai executar os scripts da linha do nó2.
O Heartbeat quando executa os scripts ele passa o parâmetro "start" e "stop" daí você pode brincar com os scripts.
Aqui tá um script de migração de maquinas virtuais que tá em um howto do xen-br.

#! /bin/bash

  FILE="$1"
  VM="$2"
  ACT="$3"

  XM=/usr/sbin/xm

  case "${ACT}" in
       start)
       $XM create $FILE
       ;;
       stop)
       $XM shutdown --halt --wait $VM
       ;;
   esac


Saudações,
 
Ayres Neto
(71) 8634-8998

> Date: Tue, 24 Nov 2009 16:48:33 -0200
> Subject: [xen-br] Live migration
> From: gilberto...@gmail.com
> To: xen...@googlegroups.com

Gilberto Nunes

unread,
Nov 24, 2009, 2:20:49 PM11/24/09
to xen...@googlegroups.com
Correto

Até aí eu entendi tudo.
Porém não entra na minha cabeça como que o no2 vi migrar a VM se ela
tava ativa no no1!?!?!?

Isso que não entendo!!

Desculpe

2009/11/24 Ayres Neto <a_n...@hotmail.com>:
--
Gilberto Nunes

Ayres Neto

unread,
Nov 24, 2009, 2:31:32 PM11/24/09
to Comunidade xen-br
Bom, 

Se houve uma falha no no1 por exemplo. O heartbeat do no2 vai (atraves do script que lhe falei) iniciar as maquinas virtuais que estavam no no1.

Mas como?
Os dados das máquinas virtuais do no 2 não estão sendo replicados pelo drbd nas duas máquinas?
Então! O no2 já tem os dados das máquinas virtuais do no1(falho). Beleza?
Ah, mas como vai iniciar as máquinas? Ele vai executar o script lá "xen" como no exemplo anterior. Vai passar os parâmetros e iniciar a maquina virtual. Lembrando que pra isso você deve replicar os arquivos de configuração das maquinas virtuais nos nós.

Saudações,
 
Ayres Neto
(71) 8634-8998

> Date: Tue, 24 Nov 2009 17:20:49 -0200
> Subject: [xen-br] Re: Live migration

Gilberto Nunes

unread,
Nov 24, 2009, 2:34:41 PM11/24/09
to xen...@googlegroups.com
ok


entendi....
Sei que a lista é sobre Xen.
E caso seja usado KVM.
Os procedimento são basicamente os mesmos???

Obrigado

2009/11/24 Ayres Neto <a_n...@hotmail.com>:
--
Gilberto Nunes

Ayres Neto

unread,
Nov 24, 2009, 2:38:48 PM11/24/09
to Comunidade xen-br
Acredito que sim.

Teria que mudar somente la o script que faria a inicialização das maquinas virtuais ao modo do KVM.

Saudações,
 
Ayres Neto
(71) 8634-8998

> Date: Tue, 24 Nov 2009 17:34:41 -0200

Gilberto Nunes

unread,
Nov 24, 2009, 2:41:05 PM11/24/09
to xen...@googlegroups.com
Valeu Neto

Muito obrigado pelos esclarecimentos.

Abraços

2009/11/24 Ayres Neto <a_n...@hotmail.com>:
--
Gilberto Nunes

Ayres Neto

unread,
Nov 24, 2009, 2:45:26 PM11/24/09
to Comunidade xen-br
Tranquilo Gilberto.

Depois posta aí suas experiências.

Saudações,
 
Ayres Neto
(71) 8634-8998

> Date: Tue, 24 Nov 2009 17:41:05 -0200

Gilberto Nunes

unread,
Nov 27, 2009, 1:15:57 PM11/27/09
to xen...@googlegroups.com
Amigos

Acho que estou meio confuso aqui...

To configurando o hearbeat assim:

Node-1:

haresource não coloquei nada só uma string qualquer

Node-2:

haresource: virt-01 xen::/storage/xen/master.cfg::master

Ocorre que quando paro o heartbeat no node-1, simulando uma falha
qualquer, eu vejo o seguinte no ha-log:

harc[6399]: 2009/11/27_16:10:08 info: Running
/etc/ha.d/rc.d/ip-request-resp ip-request-resp
ip-request-resp[6399]: 2009/11/27_16:10:08 received ip-request-resp
kvm::/storage/kvm/master.cfg::master OK yes
ResourceManager[6422]: 2009/11/27_16:10:08 info: Acquiring resource
group: virt-01 kvm::/storage/kvm/master.cfg::master
ResourceManager[6422]: 2009/11/27_16:10:08 info: Running
/etc/ha.d/resource.d/kvm /storage/kvm/master.cfg master start
ResourceManager[6422]: 2009/11/27_16:10:08 ERROR: Return code 1 from
/etc/ha.d/resource.d/kvm
ResourceManager[6422]: 2009/11/27_16:10:08 CRIT: Giving up resources
due to failure of kvm::/storage/kvm/master.cfg::master
ResourceManager[6422]: 2009/11/27_16:10:08 info: Releasing resource
group: virt-01 kvm::/storage/kvm/master.cfg::master
ResourceManager[6422]: 2009/11/27_16:10:08 info: Running
/etc/ha.d/resource.d/kvm /storage/kvm/master.cfg master stop
Nov 27 16:10:14 virt-01 heartbeat: [5929]: WARN: node virt-00: is dead
Nov 27 16:10:14 virt-01 heartbeat: [5929]: info: Dead node virt-00
gave up resources.
Nov 27 16:10:14 virt-01 ipfail: [5958]: info: Status update: Node
virt-00 now has status dead
Nov 27 16:10:14 virt-01 heartbeat: [5929]: info: Link virt-00:eth1 dead.
Nov 27 16:10:15 virt-01 ipfail: [5958]: info: NS: We are still alive!
Nov 27 16:10:15 virt-01 ipfail: [5958]: info: Link Status update: Link
virt-00/eth1 now has status dead
Nov 27 16:10:17 virt-01 ipfail: [5958]: info: Asking other side for
ping node count.
Nov 27 16:10:17 virt-01 ipfail: [5958]: info: Checking remote count of
ping nodes.

Ou seja ele inicia e logo depois para a VM!!!

Não entendo por que isso ocorreu!!!


Obrigado por qualquer ajuda




2009/11/24 Ayres Neto <a_n...@hotmail.com>:
--
Gilberto Nunes

Gilberto Nunes

unread,
Nov 27, 2009, 1:18:17 PM11/27/09
to xen...@googlegroups.com
Completando a informação anterior..

Quando eu reativo o heartbeat no node-1, o node-2 levanta a VM que era
pra ser levantada antes, quando o heartbeat do node-1 deixou de
funcionar!!!

O que to fazendo de errado... :-|

Obrigado



2009/11/27 Gilberto Nunes <gilberto...@gmail.com>:
--
Gilberto Nunes

Ayres Neto

unread,
Nov 27, 2009, 1:30:19 PM11/27/09
to Comunidade xen-br
Gilberto,

Acho que tive esse mesmo problema, ou parecido.
Você quer que os sistemas sejam redundantes? E faça a migração no caso de falha?
Se for, coloque nos dois nós, no arquivo haresources os recursos dos dois.
Eu usei o xen, não sei como é o start do kvm. Mas você conseque iniciar uma máquina com o comando que colocou no script certinho?
Eu usei esse script, porém pra resolver esse problema, coloquei p/ caso a maquina já esteja criada ele dê um exit 0, e não 1 como tá retornando no seu log. sacou?
Faça algo parecido pro kvm, se usou este mesmo script deve ter acontecido o mesmo erro.
E lembre de consertar o haresources la.


#######################################
# Editado por Ayres Neto em 15/10/2009
#! /bin/bash
FILE="$1"
VM="$2"
ACT="$3"
XM=/usr/sbin/xm
case "${ACT}" in
start)
if [ `xm list |grep -c $2` = 1 ]
then
exit 0;
else
$XM create $FILE
fi
;;
stop)
$XM shutdown --halt --wait $VM
;;
esac
#######################################


Saudações,
 
Ayres Neto
(71) 8634-8998

> Date: Fri, 27 Nov 2009 16:15:57 -0200

Gilberto Nunes

unread,
Nov 27, 2009, 1:44:09 PM11/27/09
to xen...@googlegroups.com
hum...

saquei...

vou testar aqui depois dou feedback

valeu

2009/11/27 Ayres Neto <a_n...@hotmail.com>:
--
Gilberto Nunes

Gilberto Nunes

unread,
Nov 27, 2009, 2:09:25 PM11/27/09
to xen...@googlegroups.com
Beleza...

Fiz as alterações e desliguei os dois servidores.
Agora, quando eu ligo os dois, o node-2 mostra que as duas VM estão
rodando nele:

virsh list --all
Connecting to uri: qemu:///system
Id Nome Estado
----------------------------------
1 slave executando
2 master executando

E o log do heartbeat está assim:

Nov 27 17:05:41 virt-01 ipfail: [1793]: info: Asking other side for
ping node count.
Nov 27 17:05:43 virt-01 heartbeat: [1619]: info: local resource
transition completed.
Nov 27 17:05:43 virt-01 heartbeat: [1619]: info: Initial resource
acquisition complete (T_RESOURCES(us))
Nov 27 17:05:43 virt-01 heartbeat: [1903]: info: Local Resource
acquisition completed.
harc[1948]: 2009/11/27_17:05:43 info: Running
/etc/ha.d/rc.d/ip-request-resp ip-request-resp
ip-request-resp[1948]: 2009/11/27_17:05:43 received ip-request-resp
kvm::/storage/kvm/master.cfg::master OK yes
ResourceManager[1971]: 2009/11/27_17:05:43 info: Acquiring resource
group: virt-01 kvm::/storage/kvm/master.cfg::master
ResourceManager[1971]: 2009/11/27_17:05:43 info: Running
/etc/ha.d/resource.d/kvm /storage/kvm/master.cfg master start
Nov 27 17:05:43 virt-01 heartbeat: [1619]: info: remote resource
transition completed.
Nov 27 17:05:43 virt-01 ipfail: [1793]: info: No giveup timer to abort.

não é estranho???

Por que está subindo as duas VMs no node2???




2009/11/27 Ayres Neto <a_n...@hotmail.com>:
--
Gilberto Nunes

Gilberto Nunes

unread,
Nov 27, 2009, 2:12:52 PM11/27/09
to xen...@googlegroups.com
completando....

E quando volto a iniciar o heartbeat no node-1, ele migra a VM slave
que tava rondando no node-2!

rsrsrs.... to perdido :))

2009/11/27 Gilberto Nunes <gilberto...@gmail.com>:
--
Gilberto Nunes

Gilberto Nunes

unread,
Nov 27, 2009, 2:37:19 PM11/27/09
to xen...@googlegroups.com
agora o caos está instaurado aqui!!!!

vou fazer uma fogueira!!! huahauhauah....

Desliguei os dois servidores e quando ligo eles ao mesmo tempo,
levanta a VM master no node-1 e a VM slave no node-2.
Até aí beleza.
Mas depois que alguns segundos, a VM master sobe no node-2 e a slave
sobe no node-1
Então tenho quatro VM

no node-1

master e slave

no node-2

master e slave


It's caos!!!



2009/11/27 Gilberto Nunes <gilberto...@gmail.com>:
--
Gilberto Nunes

Ayres Neto

unread,
Nov 27, 2009, 2:57:24 PM11/27/09
to Comunidade xen-br
Posta ai o arquivo haresources que tá utilizando nos dois nós.


Saudações,
 
Ayres Neto
(71) 8634-8998

> Date: Fri, 27 Nov 2009 17:37:19 -0200

Gilberto Nunes

unread,
Nov 27, 2009, 3:07:31 PM11/27/09
to xen...@googlegroups.com
Vou te mandar as configurações atuais:

NODE-1
ha.cfg:

debugfile /var/log/ha-debug
logfile /var/log/ha-log
logfacility local0
keepalive 2
deadtime 5
warntime 4
#initdead 8
baud 19200
udpport 694
bcast eth1
#ucast eth1 10.0.0.1
auto_failback on
node virt-00
node virt-01
ping 192.168.200.2
respawn hacluster /usr/lib/heartbeat/ipfail
compression bz2
compression_threshold 2

haresource:

virt-00 kvm::/storage/kvm/master.cfg::master
virt-01 kvm::/storage/kvm/slave.cfg::slave

script

#!/bin/bash

FILE="$1"
VM="$2"
ACT="$3"

virsh=/usr/bin/virsh

case "${ACT}" in
start)
$virsh list $VM
if [ `virsh list |grep -c $2` = 1 ]
then
exit 0;
else
$virsh create $FILE
fi
;;
stop)
$virsh migrate --live ${VM} qemu+ssh://virt-01/system
;;
esac


NODE-2

ha.cfg:

debugfile /var/log/ha-debug
logfile /var/log/ha-log
logfacility local0
keepalive 2
deadtime 5
warntime 4
#initdead 8
baud 19200
udpport 694
bcast eth1
#ucast eth1 10.0.0.1
auto_failback on
node virt-00
node virt-01
ping 192.168.200.2
respawn hacluster /usr/lib/heartbeat/ipfail
compression bz2
compression_threshold 2

haresource:

virt-00 kvm::/storage/kvm/master.cfg::master
virt-01 kvm::/storage/kvm/slave.cfg::slave

script

#!/bin/bash

FILE="$1"
VM="$2"
ACT="$3"

virsh=/usr/bin/virsh

case "${ACT}" in
start)
$virsh list $VM
if [ `virsh list |grep -c $2` = 1 ]
then
exit 0;
else
$virsh create $FILE
fi
;;
stop)
$virsh migrate --live ${VM} qemu+ssh://virt-01/system
;;
esac


Agora está assim.

Levantei os dois hosts, e funcionou o failover.
Mas no failback, o node-1 inicia o master mas ele ainda continua
rodando no node-2

Depois vou fazer outros testes....

Obrigado

Bom final de semana

2009/11/27 Ayres Neto <a_n...@hotmail.com>:
--
Gilberto Nunes

Gilberto Nunes

unread,
Nov 30, 2009, 10:46:13 AM11/30/09
to xen...@googlegroups.com
Olá pessoal

Então... Com a ajuda do amigo Ayres Neto, eu consegui colocar pra
funcionar o DRBD, Heartbeat com VM...

Mas uma coisa que me deixou chateado, foi que quando o nodo primario
falha e o secundário assume, a maquina que estava rodando no primario
é INICIADA no secundário.
Ou seja, há uma parada completa do sistema e ele é reiniciado no secundário!!
Isso não seria uma alta-disponibilidade desejada. Pelo menos não para
o nosso ambiente de missão crítica aqui.
Não existe maneira de migrar a maquina que estava rodando no primario
para o secundário via linha de comando com o comando xm ou o que
seja???

Obrigado...

2009/11/27 Gilberto Nunes <gilberto...@gmail.com>:
--
Gilberto Nunes

Ayres Neto

unread,
Nov 30, 2009, 10:59:13 AM11/30/09
to Comunidade xen-br
Gilberto,

Para o processo de failover na falha de uma máquina, a única forma de dar alta disponibilidade com as ferramentas que usou é esta que lhe passei. Eu vi que você implementou lá no case "stop)" pra máquina virtual migrar ativamente para outro nó, isso só seria possível se fosse uma parada planejada, numa falha elétrica onde há uma parada brusca do nó, ele não teria como migrar.

Se o que está pesquisando é sincronização de máquinas virtuais ativas, ou seja, no caso de uma falha de qualquer um dos "nós" a máquina virtual continuar funcionando transparentemente, deve procurar informações sobre o Projeto Kemari. Este projeto trabalha com tolerância a falhas com máquinas virtuais, porém só funciona com o xen.

Aqui a página do projeto: http://www.osrg.net/kemari/
 
Ayres Neto
(71) 8634-8998

> Date: Mon, 30 Nov 2009 13:46:13 -0200

Edson Marquezani Filho

unread,
Nov 30, 2009, 11:21:30 AM11/30/09
to xen...@googlegroups.com
2009/11/30 Gilberto Nunes <gilberto...@gmail.com>:

>
> Olá pessoal
>
> Então... Com a ajuda do amigo  Ayres Neto, eu consegui colocar pra
> funcionar o DRBD, Heartbeat com VM...
>
> Mas uma coisa que me deixou chateado, foi que quando o nodo primario
> falha e o secundário assume, a maquina que estava rodando no primario
> é INICIADA no secundário.
> Ou seja, há uma parada completa do sistema e ele é reiniciado no secundário!!
> Isso não seria uma alta-disponibilidade desejada. Pelo menos não para
> o nosso ambiente de missão crítica aqui.
> Não existe maneira de migrar a maquina que estava rodando no primario
> para o secundário via linha de comando com o comando xm ou o que
> seja???
>
> Obrigado...
>

Eu tenho acompanhado por cima essa discussão aqui, mas acabei não
interferindo por falta de tempo e um pouco de disposição também.

Mas, um erro conceitual que você, se me permite dizer, está cometendo
desde o início é confundir live migration com alta disponibilidade.
O recurso de live migration torna possível transferir o contexto de
execução de uma máquina virtual (contexto do processador, conteúdo de
memória RAM etc) entre máquinas físicas sem que a máquina virtual
precise ser desligada. Isso requer que os recursos que essa máquinas
usa, dentre os quais os discos virtuais são os mais importantes,
estejam disponíveis em ambas as máquinas físicas. É por isso que você
usa DRBD pra replicar os discos, na falta de um shared storage, certo?
Porém, isso não está diretamente relacionado a alta disponibilidade.

O que você implementou (e eu também, mas com outro conjunto de
programas) é um esquema de failover. Ou seja, se um nó físico é
derrubado, a máquina virtual é reiniciada em outro nó, uma vez que
todos os recursos da máquina estão disponíveis lá também.

O que você gostaria de ter seria a situação de alta disponibilidade
mais ideal possível, onde a máquina virtual permanece rodando no
ambiente, como se nada tivesse acontecido, certo? Agora pense que para
isso seria necessário ter não somente os discos replicados, mas também
todo o contexto de execução das máquinas virtuais. Isso porque não há
tempo de fazer uma migração na ocasião de falhas, já que a queda de um
servidor não acontece de forma prevista, concorda? Quando um servidor
físico cai, o contexto de execução da VM vai embora junto dele, e o
outro servidor físico não tem uma cópia disso pra manter a máquina em
execução.

Eu não sei se há algum sistema acessário para o Xen que implemente
esse tipo de função (replicação do contexto de execução de uma VM
entre hosts físicos). (Havia um projeto uns japoneses para isso, que
se incorporava de forma nativa ao Xen, mas não sei se está em
desenvolvimento constante ou se é robusto o suficiente pra se usar em
produção.)

Migrar você pode, a qualquer momento, como o comando xm migrate. Dê
uma olhada no man do comando xm. Mas isso, por si só, não muda nada o
que você tem aí.

Gilberto Nunes

unread,
Nov 30, 2009, 11:30:46 AM11/30/09
to xen...@googlegroups.com
Obrigado Ayres

Em contato com outro amigo da lista, o liberie, ele me sugeriu a mesma coisa...

Obrigado pelos seus conselhos...

Peço desculpas à lista pelo off-topic falando sobre o KVM...

Abraços

2009/11/30 Ayres Neto <a_n...@hotmail.com>:
--
Gilberto Nunes

Gilberto Nunes

unread,
Nov 30, 2009, 11:40:56 AM11/30/09
to xen...@googlegroups.com
Obrigado

Estamos avaliando Xen+Kemari...

Obrigado

2009/11/30 Edson Marquezani Filho <edsonma...@gmail.com>:
--
Gilberto Nunes
Reply all
Reply to author
Forward
0 new messages