Virtualização em alta disponibilidade

De Wiki Hackstore

Introdução

Em algumas situações é preferível colocar uma máquina virtual em alta disponibilidade do que colocar o serviço X em alta disponibilidade. No Yaxkin nos escolhemos este caminho para os servidores Web (www0-x, www1-x, etc...). Existem também máquinas virtual não essenciais rodando sem alta disponibilidade.

Passo inicial, logo após instalação

Heartbeat

O primeiro passo é preparar o heartbeat para receber as máquinas virtuais. Vamos criar um heartbeat sem seviço algum.

Crie o arquivo /etc/ha.d/ha.cf como:

logfacility local7
udpport 694
keepalive 1
deadtime 20
warntime 10
initdead 80
bcast eth1
node load0-1 load0-2
crm yes
auto_failback on

Agora configure o /etc/ha.d/authkeys como:

# Automatically generated authkeys file
auth 1
1 sha1 <CHAVE SECRETA>

Onde <CHAVE SECRETA> deve ser gerada com o comando

dd if=/dev/urandom count=4 2>/dev/null | openssl dgst -sha1

Logo após é necessário mudar o modo de permissão do arquivo:

chmod 600 /etc/ha.d/authkeys

Agora grave o conteúdo abaixo em /var/lib/heartbeat/crm/cib.xml no primeiro servidor apenas:

<?xml version="1.0" ?>
<cib>
       <configuration>
               <crm_config>
                       <cluster_property_set id="cib-bootstrap-options">
                               <attributes>
                                       <nvpair id="default_resource_stickiness" name="default_resource_stickiness" value="50"/>
                                       <nvpair id="default-action-timeout" name="default-action-timeout" value="150s"/>
                                       <nvpair id="short_resource_names" name="short_resource_names" value="TRUE"/>
                                       <nvpair id="symmetric_cluster" name="symmetric_cluster" value="TRUE"/>
                                       <nvpair id="is_managed_default" name="is_managed_default" value="TRUE"/>
                                       <nvpair id="pe-input-series-max" name="pe-input-series-max" value="-1"/>
                               </attributes>
                       </cluster_property_set>
               </crm_config>
               <nodes/>
               <resources/>
               <constraints/>
       </configuration>
       <status/>
</cib>

Agora é necessário colocar o owner correto neste arquivo:

chown cluster:cluster /var/lib/heartbeat/crm/cib.xml

A configuração do Heartbeat no primeiro servidor está pronta. Para iniciar o heartbeat e fazer com que ele sempre e inicie, execute os comandos abaixo primeiro servidor:

rc-update add heartbeat default
/etc/init.d/heartbeat start

No segundo servidor, basta copiar os arquivos /etc/ha.d/ha.cf e /etc/ha.d/authkeys, mantendo as permissões, e executar os comandos acima para iniciar o heartbeat. A versão mais atual do arquivo cib.xml será copiada ao segundo servidor pelo próprio heartbeat.

DRBD

Inicialize um DRBD sem discos. Para isso crie um arquivo /etc/drbd.conf nos dois servidores com o seguinte conteudo:

global {
       usage-count yes;
}

common {
       protocol C;

       disk {
               on-io-error detach;
       }

       startup {
               wfc-timeout 30;
               degr-wfc-timeout 60;
       }
}

Agora faca o DRBD inicializar automaticamente nos dois servidores e inicie o DRBD

/etc/init.d/drbd start
rc-update add drbd default

Criando uma máquina virtual

Escolha um nome para a máquina virtual, em todo o procedimento abaixo coloque o nome no lugar de LABEL

Discos

Crie, nos dois servidores, um volume lógico no LVM no VG "local":

lvcreate -L 150G -n LABEL local

Troque o 150G acima pelo tamanho do disco da máquina virtual.

Edite o arquivo /etc/drbd.conf incluindo o seguinte recurso:

resource LABEL {
       syncer {
               rate 40M;
       }

       on virt0-1 {
               device /dev/drbd0;
               disk /dev/local/LABEL;
               meta-disk internal;
               address 172.16.0.5:7780;
       }

       on virt0-2 {
               device /dev/drbd0;
               disk /dev/local/LABEL;
               meta-disk internal;
               address 172.16.0.6:7780;
       }
}

Troque os IPs, as portas, o device e o nome dos servidores de acordo.

Crie a área de metadados do recurso no DRBD nos dois servidores:

drbdadm create-md LABEL

Agora faća o DRBD reler o arquivo de configuraćão nos dois servidores:

/etc/init.d/drbd reload

Defina a partićão como primária em um dos servidores:

drbdadm -- -o primary LABEL

Atenćão: este comando exclui todos os dados do disco /dev/local/LABEL no outro servidor.

Heartbeat

Crie um arquivo XML /tmp/novo-rsc.xml para configurar a máquina virtual no Heartbeat como o abaxo:

<group id="grp_LABEL">
    <primitive id="LABEL-DRBD"  class="heartbeat" type="drbddisk" provider="heartbeat" is_managed="true">
        <instance_attributes id="LABEL-drbd-attrs">
            <attributes>
                <nvpair id="LABEL-DRBD-resource" name="1" value="LABEL"/>
            </attributes>
        </instance_attributes>
    </primitive>
    <primitive id="LABEL-KVM"  class="ocf" type="KVM" provider="mav" is_managed="true">
        <instance_attributes id="LABEL-KVM-attrs">
            <attributes>
                <nvpair id="LABEL-KVM-mem" name="mem" value="2048"/>
                <nvpair id="LABEL-KVM-localtime" name="localtime" value="1"/>
                <nvpair id="LABEL-KVM-boot" name="boot" value="c"/>
                <nvpair id="LABEL-KVM-vnc" name="vnc" value=":1"/>
                <nvpair id="LABEL-KVM-nic1" name="nic1" value="macaddr=MACADDRESS,model=e1000"/>
                <nvpair id="LABEL-KVM-drive1" name="drive1" value="file=/dev/drbd0,media=disk,cache=none,format=raw"/>
            </attributes>
        </instance_attributes>
    </primitive>
</group>

Onde MACADDRESS deve ser trocado por 02:XX:YY:XY:YX:XX, onde os XX/YY devem ser trocados por número aleatorios. O MACADDRESS de duas máquinas virtuais não pode bater. Mude o numero do VNC para algo único no cluster também.

Troque o /dev/drbd0 pelo correto, de acordo com o recurso no DRBD criado logo antes.

Agora passe o arquivo para o Heartbeat:

cibadmin -C -o resources -x /tmp/novo-rsc.xml

A máquina virtual já deverá estar rodando.

Operaćões comuns

Mudar a općão de boot

echo '<nvpair id="LABEL-KVM-boot" name="boot" value="n"/>'|cibadmin -U -o resources -p