Bonding para Heartbeat + Bonding para DRBD + OCFS2 + Debian Squeeze

Introdução

E aí, galera.

Aqui vou abordar a configuração de Bonding para termos a redundância de interfaces físicas para o serviço de HA, pois o Heartbeat vai trabalhar no bond0 e o DRBD + OCFS2, vai trabalhar no bond1.

Estou utilizando o algoritmo round-robin, que faz o balanceamento dos dados, porém, temos outros algoritmos que podemos utilizar para o mesmo fim.

Quero ganhar disponibilidade do servidor e aumentar a performance de acesso à rede, onde temos, às vezes, gargalos como no serviço do DRBD, que é um RAID 1 via rede.

Como vai funcionar: aqui vamos agrupar 2 interfaces para montar um bond para o Heartbeat e agrupar as outras 2 interfaces para montar o bond para o DRBD.

Caso caia alguma das interfaces por causa de algum problema de hardware, o servidor vai continuar funcionando, pois temos uma interface de “Backup” trabalhando, caso as duas estejam funcionando, vamos fazer o balanceamento de carga entre elas e, com isso, melhorando a performance.

Prepare o seu sistema com o seguinte script, para que não falte nenhum pacote ou configuração:

Pré-requisitos

  • Nome Nodo1: srv01
  • IP DMZ: 10.101.0.25/24 -> VLAN DMZ
  • IP DMZ HA: 10.101.0.27/24 -> VLAN DMZ
  • IP Dados: 172.20.0.25/24 -> VLAN Dados
  • Interfaces de rede: eth0, eth1, eth2, eth3
  • Partição utilizada Nodo1: /dev/sdb1 dispositivo com 8 GB
  • Nome Nodo2: srv02
  • IP DMZ: 10.101.0.26/24 -> VLAN DMZ
  • IP DMZ HA: 10.101.0.27/24 -> VLAN DMZ
  • IP Dados: 172.20.0.26/24 -> VLAN Dados
  • Interfaces de rede: eth0, eth1, eth2, eth3
  • Partição utilizada Nodo2: /dev/sdb1 dispositivo com 8 GB
Instalação e configuração do Bond

Agora, vamos mandar atualizar os repositórios e instalar os pacotes para o bond no servidor srv01:

# aptitude update && aptitude install ifenslave ethtool -y

Agora vamos acertar a configuração dos módulos do kernel:

# echo “options bonding mode=0 miimon=100” >> /etc/modprobe.d/bonding.conf

Vamos verificar se todas as interfaces estão com link:

# mii-tool

Saída:

eth0: no autonegotiation, 1000baseT-FD flow-control, link ok
eth1: no autonegotiation, 1000baseT-FD flow-control, link ok
eth2: no autonegotiation, 1000baseT-FD flow-control, link ok
eth3: no autonegotiation, 1000baseT-FD flow-control, link ok

Agora, vamos acertar a configuração de rede para o bonding:

# vim /etc/network/interfaces

Edite:

#Interface de loopback
auto lo
iface lo inet loopback
#Interface de bonding para DMZ
auto bond0
        iface bond0 inet static
        address 10.101.0.25
        netmask 255.255.255.0
        network 10.101.0.0
        gateway 10.101.0.254
        bond-slaves eth0 eth1
#Interface de bonding para Dados
auto bond1
        iface bond1 inet static
        address 172.20.0.25
        netmask 255.255.255.0
        network 172.20.0.0
        bond-slaves eth2 eth3

Agora, precisamos reiniciar o servidor:

# reboot

E vamos listar as nossas interfaces, para verificar se subiu o bond e os endereços IPs:

# ifconfig

A saída seria:

bond0  Link encap:Ethernet Endereço de HW 08:00:27:3f:b0:b8
inet end.: 10.101.0.25 Bcast:10.101.0.255 Masc:255.255.255.0
endereço inet6: fe80::a00:27ff:fe3f:b0b8/64 Escopo:Link
UP BROADCASTRUNNING MASTER MULTICAST MTU:1500 Métrica:1
RX packets:12604 errors:0 dropped:0 overruns:0 frame:0
TX packets:265 errors:0 dropped:0 overruns:0 carrier:0
colisões:0 txqueuelen:0
RX bytes:1088563 (1.0 MiB) TX bytes:42992 (41.9 KiB)

bond1  Link encap:Ethernet Endereço de HW 08:00:27:ff:cd:7c
inet end.: 172.20.0.25 Bcast:172.20.0.2655 Masc:255.255.255.0
endereço inet6: fe80::a00:27ff:feff:cd7c/64 Escopo:Link
UP BROADCASTRUNNING MASTER MULTICAST MTU:1500 Métrica:1
RX packets:12260 errors:0 dropped:0 overruns:0 frame:0
TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
colisões:0 txqueuelen:0
RX bytes:1050542 (1.0 MiB) TX bytes:440 (440.0 B)

eth0    Link encap:Ethernet Endereço de HW 08:00:27:3f:b0:b8
UP BROADCASTRUNNING SLAVE MULTICAST MTU:1500 Métrica:1
RX packets:6478 errors:0 dropped:0 overruns:0 frame:0
TX packets:132 errors:0 dropped:0 overruns:0 carrier:0
colisões:0 txqueuelen:1000
RX bytes:563560 (550.3 KiB) TX bytes:22857 (22.3 KiB)

eth1    Link encap:Ethernet Endereço de HW 08:00:27:3f:b0:b8
UP BROADCASTRUNNING SLAVE MULTICAST MTU:1500 Métrica:1
RX packets:6126 errors:0 dropped:0 overruns:0 frame:0
TX packets:133 errors:0 dropped:0 overruns:0 carrier:0
colisões:0 txqueuelen:1000
RX bytes:525003 (512.6 KiB) TX bytes:20135 (19.6 KiB)

eth2    Link encap:Ethernet Endereço de HW 08:00:27:ff:cd:7c
UP BROADCASTRUNNING SLAVE MULTICAST MTU:1500 Métrica:1
RX packets:6134 errors:0 dropped:0 overruns:0 frame:0
TX packets:3 errors:0 dropped:0 overruns:0 carrier:0
colisões:0 txqueuelen:1000
RX bytes:525539 (513.2 KiB) TX bytes:278 (278.0 B)

eth3    Link encap:Ethernet Endereço de HW 08:00:27:ff:cd:7c
UP BROADCASTRUNNING SLAVE MULTICAST MTU:1500 Métrica:1
RX packets:6126 errors:0 dropped:0 overruns:0 frame:0
TX packets:3 errors:0 dropped:0 overruns:0 carrier:0
colisões:0 txqueuelen:1000
RX bytes:525003 (512.6 KiB) TX bytes:162 (162.0 B)

lo        Link encap:Loopback Local
inet end.: 127.0.0.1 Masc:255.0.0.0
endereço inet6: ::1/128 Escopo:Máquina
UP LOOPBACKRUNNING MTU:16436 Métrica:1
RX packets:2 errors:0 dropped:0 overruns:0 frame:0
TX packets:2 errors:0 dropped:0 overruns:0 carrier:0
colisões:0 txqueuelen:0
RX bytes:168 (168.0 B) TX bytes:168 (168.0 B)

O bonding para o srv01 já está OK, agora vamos configurar o srv02.

Vamos mandar atualizar os repositórios e instalar os pacotes para o bond no servidor srv02:

# aptitude update && aptitude install ifenslave ethtool -y

Acertar a configuração dos módulos do kernel:

# echo “options bonding mode=0 miimon=100” >> /etc/modprobe.d/bonding.conf

Verificar se todas as interfaces estão com link:

# mii-tool

Saída:

eth0: no autonegotiation, 1000baseT-FD flow-control, link ok
eth1: no autonegotiation, 1000baseT-FD flow-control, link ok
eth2: no autonegotiation, 1000baseT-FD flow-control, link ok
eth3: no autonegotiation, 1000baseT-FD flow-control, link ok

E acertar a configuração de rede para o bonding:

# vim /etc/network/interfaces

#Interface de loopback
auto lo
iface lo inet loopback
#Interface de bonding para DMZ
auto bond0
        iface bond0 inet static
        address 10.101.0.26
        netmask 255.255.255.0
        network 10.101.0.0
        gateway 10.101.0.254
        bond-slaves eth0 eth1
#Interface de bonding para Dados
auto bond1
        iface bond1 inet static
        address 172.20.0.26
        netmask 255.255.255.0
        network 172.20.0.0
        bond-slaves eth2 eth3

Agora, precisamos reiniciar o servidor:

# reboot

Agora, vamos listar as nossas interfaces para verificar se subiu o bond e os endereços IPs

# ifconfig

bond0  Link encap:Ethernet Endereço de HW 08:00:27:e4:58:4b
inet end.: 10.101.0.26 Bcast:10.101.0.255 Masc:255.255.255.0
endereço inet6: fe80::a00:27ff:fee4:584b/64 Escopo:Link
UP BROADCASTRUNNING MASTER MULTICAST MTU:1500 Métrica:1
RX packets:1204 errors:0 dropped:0 overruns:0 frame:0
TX packets:75 errors:0 dropped:0 overruns:0 carrier:0
colisões:0 txqueuelen:0
RX bytes:105536 (103.0 KiB) TX bytes:9338 (9.1 KiB)

bond1   Link encap:Ethernet Endereço de HW 08:00:27:d2:4e:60
inet end.: 172.20.0.26 Bcast:172.20.0.2655 Masc:255.255.255.0
endereço inet6: fe80::a00:27ff:fed2:4e60/64 Escopo:Link
UP BROADCASTRUNNING MASTER MULTICAST MTU:1500 Métrica:1
RX packets:1109 errors:0 dropped:0 overruns:0 frame:0
TX packets:3 errors:0 dropped:0 overruns:0 carrier:0
colisões:0 txqueuelen:0
RX bytes:92286 (90.1 KiB) TX bytes:258 (258.0 B)

eth0     Link encap:Ethernet Endereço de HW 08:00:27:e4:58:4b
UP BROADCASTRUNNING SLAVE MULTICAST MTU:1500 Métrica:1
RX packets:649 errors:0 dropped:0 overruns:0 frame:0
TX packets:38 errors:0 dropped:0 overruns:0 carrier:0
colisões:0 txqueuelen:1000
RX bytes:59308 (57.9 KiB) TX bytes:3903 (3.8 KiB)

eth1     Link encap:Ethernet Endereço de HW 08:00:27:e4:58:4b
UP BROADCASTRUNNING SLAVE MULTICAST MTU:1500 Métrica:1
RX packets:555 errors:0 dropped:0 overruns:0 frame:0
TX packets:37 errors:0 dropped:0 overruns:0 carrier:0
colisões:0 txqueuelen:1000
RX bytes:46228 (45.1 KiB) TX bytes:5435 (5.3 KiB)

eth2     Link encap:Ethernet Endereço de HW 08:00:27:d2:4e:60
UP BROADCASTRUNNING SLAVE MULTICAST MTU:1500 Métrica:1
RX packets:555 errors:0 dropped:0 overruns:0 frame:0
TX packets:2 errors:0 dropped:0 overruns:0 carrier:0
colisões:0 txqueuelen:1000
RX bytes:46182 (45.0 KiB) TX bytes:180 (180.0 B)

eth3     Link encap:Ethernet Endereço de HW 08:00:27:d2:4e:60
UP BROADCASTRUNNING SLAVE MULTICAST MTU:1500 Métrica:1
RX packets:554 errors:0 dropped:0 overruns:0 frame:0
TX packets:1 errors:0 dropped:0 overruns:0 carrier:0
colisões:0 txqueuelen:1000
RX bytes:46104 (45.0 KiB) TX bytes:78 (78.0 B)

lo         Link encap:Loopback Local
inet end.: 127.0.0.1 Masc:255.0.0.0
endereço inet6: ::1/128 Escopo:Máquina
UP LOOPBACKRUNNING MTU:16436 Métrica:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
colisões:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

Vamos testar agora, a conectividade entre os dois, iremos mandar pingar do srv01 para o srv02:

# ping -c 3 10.101.0.26

Vejamos o resultado:

PING 10.101.0.26 (10.101.0.26) 56(84) bytes of data.
64 bytes from 10.101.0.26: icmp_req=1 ttl=64 time=1.85 ms
64 bytes from 10.101.0.26: icmp_req=2 ttl=64 time=0.528 ms
64 bytes from 10.101.0.26: icmp_req=3 ttl=64 time=0.867 ms

— 10.101.0.26 ping statistics —
3 packets transmitted, 3 received, 0% packet loss, time 2000ms
rtt min/avg/max/mdev = 0.528/1.083/1.855/0.563 ms

Agora, vamos mandar pingar do srv02 para o srv1:

# ping -c 3 172.20.0.25

Resultado:

PING 172.20.0.25 (172.20.0.25) 56(84) bytes of data.
64 bytes from 172.20.0.25: icmp_req=1 ttl=64 time=4.31 ms
64 bytes from 172.20.0.25: icmp_req=2 ttl=64 time=0.590 ms
64 bytes from 172.20.0.25: icmp_req=3 ttl=64 time=0.425 ms

— 172.20.0.25 ping statistics —
3 packets transmitted, 3 received, 0% packet loss, time 2000ms
rtt min/avg/max/mdev = 0.425/1.777/4.318/1.798 ms

Agora que o bond está pronto, vamos configurar o Heartbeat para garantirmos um IP virtual compartilhado entre os servidores, que é o que o cliente vai utilizar para acessar os serviços.

Este IP, sempre vai setar o servidor que for definido como master, e caso ele caia por algum motivo, o servidor slave vai assumir este IP, e o cliente nem vai notar que está trabalhando em outro servidor.

Vamos acertar o arquivo de hosts, deixe o arquivo como o abaixo nos dois servidores.

# vim /etc/hosts

127.0.0.1     localhost
10.101.0.25   srv01.douglas.wiki.br   srv01
10.101.0.26   srv02.douglas.wiki.br   srv02
# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
Instalação e configuração do Heartbeat

Agora, vamos instalar o Heartbeat no srv02:

# aptitude update && aptitude dist-upgrade -y && apt-get install heartbeat heartbeat-dev -y

Vamos acertar a configuração do Heartbeat:

# vim /etc/ha.d/ha.cf

#informe os nomes dos computadores que formam a replicação(deve ser igual a saída do comando "uname -n
node srv01
node srv02
#qual a interface vai ser usada para comunicação
mcast bond0 225.0.0.1 694 1 0
#Fazer com que a máquina principal receba seus serviços quando retornar a ativa
auto_failback on
#arquivos de log
debugfile /var/log/ha-debug
logfile /var/log/ha-log
#frequência, em segundos, da verificação das máquinas
keepalive 1
#tempo mínimo para declarar a outra máquina como morta
deadtime 5

Agora, vamos acertar a configuração do nosso IP compartilhado pelo Heartbeat:

# vim /etc/ha.d/haresources

srv01 IPaddr::10.101.0.27/24/bond0/10.101.0.255

Explicando o arquivo acima:

  • srv01: nome do servidor master
  • IPaddr::10.101.0.27/24: IP que vai ser compartilhado pelo Heartbeat
  • bond0: Interface que vai receber o IP compartilhado pelo Heartbeat
  • 10.101.0.25: Endereço de broadcast

Agora vamos acertar o arquivo com a senha de autenticação entre os Heartbeats:

# vim /etc/ha.d/authkeys

auth 3
3 md5 h34rt64t

Agora vamos acertar as permissões do arquivo de senha:

# chmod 600 /etc/ha.d/authkeys

Agora vamos instalar o Heartbeat no srv02:

# aptitude update && aptitude dist-upgrade -y && apt-get install heartbeat heartbeat-dev -y

Acertar a configuração do heartbeat:

# vim /etc/ha.d/ha.cf

#informe os nomes dos computadores que formam a replicação(deve ser igual a saída do comando "uname -n
node srv01
node srv02
#qual a interface vai ser usada para comunicação
mcast bond0 225.0.0.1 694 1 0
#Fazer com que a máquina principal receba seus serviços quando retornar a ativa
auto_failback on
#arquivos de log
debugfile /var/log/ha-debug
logfile /var/log/ha-log
#frequência, em segundos, da verificação das máquinas
keepalive 1
#tempo mínimo para declarar a outra máquina como morta
deadtime 5

Agora vamos acertar a configuração do nosso IP compartilhado pelo Heartbeat:

# vim /etc/ha.d/haresources

srv01 IPaddr::10.101.0.27/24/bond0/10.101.0.255

Agora vamos acertar o arquivo com a senha de autenticação entre os Heartbeats:

# vim /etc/ha.d/authkeys

auth 3
3 md5 h34rt64t

Agora vamos acertar as permissões do arquivo de senha:

# chmod 600 /etc/ha.d/authkeys

Agora vamos reiniciar o Heartbeat nos dois servidores:

# /etc/init.d/heartbeat restart

Agora no servidor master (o srv01), vamos consultar os endereços IPs:

# ifconfig

bond0  Link encap:Ethernet Endereço de HW 08:00:27:3f:b0:b8
inet end.: 10.101.0.25 Bcast:10.101.0.255 Masc:255.255.255.0
endereço inet6: fe80::a00:27ff:fe3f:b0b8/64 Escopo:Link
UP BROADCASTRUNNING MASTER MULTICAST MTU:1500 Métrica:1
RX packets:258509 errors:0 dropped:0 overruns:0 frame:0
TX packets:3510 errors:0 dropped:0 overruns:0 carrier:0
colisões:0 txqueuelen:0

RX bytes:30982551 (29.5 MiB) TX bytes:419737 (409.8 KiB)

bond0:0  Link encap:Ethernet Endereço de HW 08:00:27:3f:b0:b8
inet end.: 10.101.0.27 Bcast:10.101.0.255 Masc:255.255.255.0
UP BROADCASTRUNNING MASTER MULTICAST MTU:1500 Métrica:1

bond1   Link encap:Ethernet Endereço de HW 08:00:27:ff:cd:7c
inet end.: 172.20.0.25 Bcast:172.20.0.2655 Masc:255.255.255.0
endereço inet6: fe80::a00:27ff:feff:cd7c/64 Escopo:Link
UP BROADCASTRUNNING MASTER MULTICAST MTU:1500 Métrica:1
RX packets:249676 errors:0 dropped:0 overruns:0 frame:0
TX packets:12 errors:0 dropped:0 overruns:0 carrier:0
colisões:0 txqueuelen:0
RX bytes:19802934 (18.8 MiB) TX bytes:860 (860.0 B)

eth0    Link encap:Ethernet Endereço de HW 08:00:27:3f:b0:b8
UP BROADCASTRUNNING SLAVE MULTICAST MTU:1500 Métrica:1
RX packets:133706 errors:0 dropped:0 overruns:0 frame:0
TX packets:1755 errors:0 dropped:0 overruns:0 carrier:0
colisões:0 txqueuelen:1000
RX bytes:21086174 (20.1 MiB) TX bytes:213206 (208.2 KiB)

eth1    Link encap:Ethernet Endereço de HW 08:00:27:3f:b0:b8
UP BROADCASTRUNNING SLAVE MULTICAST MTU:1500 Métrica:1
RX packets:124803 errors:0 dropped:0 overruns:0 frame:0
TX packets:1755 errors:0 dropped:0 overruns:0 carrier:0
colisões:0 txqueuelen:1000
RX bytes:9896377 (9.4 MiB) TX bytes:206531 (201.6 KiB)

eth2    Link encap:Ethernet Endereço de HW 08:00:27:ff:cd:7c
UP BROADCASTRUNNING SLAVE MULTICAST MTU:1500 Métrica:1
RX packets:124844 errors:0 dropped:0 overruns:0 frame:0
TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
colisões:0 txqueuelen:1000
RX bytes:9901912 (9.4 MiB) TX bytes:516 (516.0 B)

eth3    Link encap:Ethernet Endereço de HW 08:00:27:ff:cd:7c
UP BROADCASTRUNNING SLAVE MULTICAST MTU:1500 Métrica:1
RX packets:124832 errors:0 dropped:0 overruns:0 frame:0
TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
colisões:0 txqueuelen:1000
RX bytes:9901022 (9.4 MiB) TX bytes:344 (344.0 B)

lo        Link encap:Loopback Local
inet end.: 127.0.0.1 Masc:255.0.0.0
endereço inet6: ::1/128 Escopo:Máquina
UP LOOPBACKRUNNING MTU:16436 Métrica:1
RX packets:2 errors:0 dropped:0 overruns:0 frame:0
TX packets:2 errors:0 dropped:0 overruns:0 carrier:0
colisões:0 txqueuelen:0
RX bytes:168 (168.0 B) TX bytes:168 (168.0 B)

Agora no servidor slave (o srv02) vamos consultar os endereços IPs:

# ifconfig

bond0  Link encap:Ethernet Endereço de HW 08:00:27:e4:58:4b
inet end.: 10.101.0.26 Bcast:10.101.0.255 Masc:255.255.255.0
endereço inet6: fe80::a00:27ff:fee4:584b/64 Escopo:Link
UP BROADCASTRUNNING MASTER MULTICAST MTU:1500 Métrica:1
RX packets:248388 errors:0 dropped:0 overruns:0 frame:0
TX packets:3842 errors:0 dropped:0 overruns:0 carrier:0
colisões:0 txqueuelen:0
RX bytes:30223554 (28.8 MiB) TX bytes:472655 (461.5 KiB)

bond1  Link encap:Ethernet Endereço de HW 08:00:27:d2:4e:60
inet end.: 172.20.0.26 Bcast:172.20.0.2655 Masc:255.255.255.0
endereço inet6: fe80::a00:27ff:fed2:4e60/64 Escopo:Link
UP BROADCASTRUNNING MASTER MULTICAST MTU:1500 Métrica:1
RX packets:239819 errors:0 dropped:0 overruns:0 frame:0
TX packets:10 errors:0 dropped:0 overruns:0 carrier:0
colisões:0 txqueuelen:0
RX bytes:19101060 (18.2 MiB) TX bytes:720 (720.0 B)

eth0    Link encap:Ethernet Endereço de HW 08:00:27:e4:58:4b
UP BROADCASTRUNNING SLAVE MULTICAST MTU:1500 Métrica:1
RX packets:128628 errors:0 dropped:0 overruns:0 frame:0
TX packets:1924 errors:0 dropped:0 overruns:0 carrier:0
colisões:0 txqueuelen:1000
RX bytes:20708154 (19.7 MiB) TX bytes:241140 (235.4 KiB)

eth1    Link encap:Ethernet Endereço de HW 08:00:27:e4:58:4b
UP BROADCASTRUNNING SLAVE MULTICAST MTU:1500 Métrica:1
RX packets:119760 errors:0 dropped:0 overruns:0 frame:0
TX packets:1918 errors:0 dropped:0 overruns:0 carrier:0
colisões:0 txqueuelen:1000

RX bytes:9515400 (9.0 MiB) TX bytes:231515 (226.0 KiB)

eth2    Link encap:Ethernet Endereço de HW 08:00:27:d2:4e:60
UP BROADCASTRUNNING SLAVE MULTICAST MTU:1500 Métrica:1
RX packets:119916 errors:0 dropped:0 overruns:0 frame:0
TX packets:5 errors:0 dropped:0 overruns:0 carrier:0
colisões:0 txqueuelen:1000
RX bytes:9551043 (9.1 MiB) TX bytes:418 (418.0 B)

eth3    Link encap:Ethernet Endereço de HW 08:00:27:d2:4e:60
UP BROADCASTRUNNING SLAVE MULTICAST MTU:1500 Métrica:1
RX packets:119903 errors:0 dropped:0 overruns:0 frame:0
TX packets:5 errors:0 dropped:0 overruns:0 carrier:0
colisões:0 txqueuelen:1000
RX bytes:9550017 (9.1 MiB) TX bytes:302 (302.0 B)

lo        Link encap:Loopback Local
inet end.: 127.0.0.1 Masc:255.0.0.0
endereço inet6: ::1/128 Escopo:Máquina
UP LOOPBACKRUNNING MTU:16436 Métrica:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
colisões:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

Como pode ser notado, temos o IP 10.101.0.27/24 no servidor srv01, que é o master. Agora vamos fazer um teste: vamos deslitar o servidor srv01:

# telinit 0

Agora no servidor srv02 vamos consultar os endereços IPs:

# ifconfig

bond0  Link encap:Ethernet Endereço de HW 08:00:27:e4:58:4b
inet end.: 10.101.0.26 Bcast:10.101.0.255 Masc:255.255.255.0
endereço inet6: fe80::a00:27ff:fee4:584b/64 Escopo:Link
UP BROADCASTRUNNING MASTER MULTICAST MTU:1500 Métrica:1
RX packets:251625 errors:0 dropped:0 overruns:0 frame:0
TX packets:3959 errors:0 dropped:0 overruns:0 carrier:0
colisões:0 txqueuelen:0
RX bytes:30524354 (29.1 MiB) TX bytes:499147 (487.4 KiB)

bond0:0  Link encap:Ethernet Endereço de HW 08:00:27:e4:58:4b
inet end.: 10.101.0.27 Bcast:10.101.0.255 Masc:255.255.255.0
UP BROADCASTRUNNING MASTER MULTICAST MTU:1500 Métrica:1

bond1  Link encap:Ethernet Endereço de HW 08:00:27:d2:4e:60
inet end.: 172.20.0.26 Bcast:172.20.0.2655 Masc:255.255.255.0
endereço inet6: fe80::a00:27ff:fed2:4e60/64 Escopo:Link
UP BROADCASTRUNNING MASTER MULTICAST MTU:1500 Métrica:1
RX packets:243159 errors:0 dropped:0 overruns:0 frame:0
TX packets:10 errors:0 dropped:0 overruns:0 carrier:0
colisões:0 txqueuelen:0
RX bytes:19424314 (18.5 MiB) TX bytes:720 (720.0 B)

eth0    Link encap:Ethernet Endereço de HW 08:00:27:e4:58:4b
UP BROADCASTRUNNING SLAVE MULTICAST MTU:1500 Métrica:1
RX packets:130251 errors:0 dropped:0 overruns:0 frame:0
TX packets:1982 errors:0 dropped:0 overruns:0 carrier:0
colisões:0 txqueuelen:1000
RX bytes:20859033 (19.8 MiB) TX bytes:252852 (246.9 KiB)

eth1    Link encap:Ethernet Endereço de HW 08:00:27:e4:58:4b
UP BROADCASTRUNNING SLAVE MULTICAST MTU:1500 Métrica:1
RX packets:121374 errors:0 dropped:0 overruns:0 frame:0
TX packets:1977 errors:0 dropped:0 overruns:0 carrier:0
colisões:0 txqueuelen:1000
RX bytes:9665321 (9.2 MiB) TX bytes:246295 (240.5 KiB)

eth2    Link encap:Ethernet Endereço de HW 08:00:27:d2:4e:60
UP BROADCASTRUNNING SLAVE MULTICAST MTU:1500 Métrica:1
RX packets:121586 errors:0 dropped:0 overruns:0 frame:0
TX packets:5 errors:0 dropped:0 overruns:0 carrier:0
colisões:0 txqueuelen:1000
RX bytes:9712670 (9.2 MiB) TX bytes:418 (418.0 B)

eth3    Link encap:Ethernet Endereço de HW 08:00:27:d2:4e:60
UP BROADCASTRUNNING SLAVE MULTICAST MTU:1500 Métrica:1
RX packets:121573 errors:0 dropped:0 overruns:0 frame:0
TX packets:5 errors:0 dropped:0 overruns:0 carrier:0
colisões:0 txqueuelen:1000
RX bytes:9711644 (9.2 MiB) TX bytes:302 (302.0 B)

lo        Link encap:Loopback Local
inet end.: 127.0.0.1 Masc:255.0.0.0
endereço inet6: ::1/128 Escopo:Máquina
UP LOOPBACKRUNNING MTU:16436 Métrica:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
colisões:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

Note que o endereço IP 10.101.0.27/24, já foi atribuido ao servidor srv02, pois ele é o slave; então, caso o cliente esteja conectado em algum serviço, ele não vai notar quando trocar de servidor.

Agora vamos ligar novamente o servidor srv01 e consultar novamente:

# ifconfig

bond0  Link encap:Ethernet Endereço de HW 08:00:27:3f:b0:b8
inet end.: 10.101.0.25 Bcast:10.101.0.255 Masc:255.255.255.0
endereço inet6: fe80::a00:27ff:fe3f:b0b8/64 Escopo:Link
UP BROADCASTRUNNING MASTER MULTICAST MTU:1500 Métrica:1
RX packets:3314 errors:0 dropped:0 overruns:0 frame:0
TX packets:244 errors:0 dropped:0 overruns:0 carrier:0
colisões:0 txqueuelen:0
RX bytes:292621 (285.7 KiB) TX bytes:33465 (32.6 KiB)

bond0:0  Link encap:Ethernet Endereço de HW 08:00:27:3f:b0:b8
inet end.: 10.101.0.27 Bcast:10.101.0.255 Masc:255.255.255.0
UP BROADCASTRUNNING MASTER MULTICAST MTU:1500 Métrica:1

bond1  Link encap:Ethernet Endereço de HW 08:00:27:ff:cd:7c
inet end.: 172.20.0.25 Bcast:172.20.0.2655 Masc:255.255.255.0
endereço inet6: fe80::a00:27ff:feff:cd7c/64 Escopo:Link
UP BROADCASTRUNNING MASTER MULTICAST MTU:1500 Métrica:1
RX packets:3255 errors:0 dropped:0 overruns:0 frame:0
TX packets:3 errors:0 dropped:0 overruns:0 carrier:0
colisões:0 txqueuelen:0
RX bytes:289268 (282.4 KiB) TX bytes:258 (258.0 B)

eth0    Link encap:Ethernet Endereço de HW 08:00:27:3f:b0:b8
UP BROADCASTRUNNING SLAVE MULTICAST MTU:1500 Métrica:1
RX packets:1732 errors:0 dropped:0 overruns:0 frame:0
TX packets:122 errors:0 dropped:0 overruns:0 carrier:0
colisões:0 txqueuelen:1000
RX bytes:157391 (153.7 KiB) TX bytes:15755 (15.3 KiB)

eth1    Link encap:Ethernet Endereço de HW 08:00:27:3f:b0:b8
UP BROADCASTRUNNING SLAVE MULTICAST MTU:1500 Métrica:1
RX packets:1582 errors:0 dropped:0 overruns:0 frame:0
TX packets:122 errors:0 dropped:0 overruns:0 carrier:0
colisões:0 txqueuelen:1000
RX bytes:135230 (132.0 KiB) TX bytes:17710 (17.2 KiB)

eth2    Link encap:Ethernet Endereço de HW 08:00:27:ff:cd:7c
UP BROADCASTRUNNING SLAVE MULTICAST MTU:1500 Métrica:1
RX packets:1628 errors:0 dropped:0 overruns:0 frame:0
TX packets:2 errors:0 dropped:0 overruns:0 carrier:0
colisões:0 txqueuelen:1000
RX bytes:144673 (141.2 KiB) TX bytes:180 (180.0 B)

eth3    Link encap:Ethernet Endereço de HW 08:00:27:ff:cd:7c
UP BROADCASTRUNNING SLAVE MULTICAST MTU:1500 Métrica:1
RX packets:1627 errors:0 dropped:0 overruns:0 frame:0
TX packets:1 errors:0 dropped:0 overruns:0 carrier:0
colisões:0 txqueuelen:1000
RX bytes:144595 (141.2 KiB) TX bytes:78 (78.0 B)

lo        Link encap:Loopback Local
inet end.: 127.0.0.1 Masc:255.0.0.0
endereço inet6: ::1/128 Escopo:Máquina
UP LOOPBACKRUNNING MTU:16436 Métrica:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
colisões:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

Note que o IP compartilhado voltou para o servidor srv01, pois definimos ele como master.

A primeira parte já está OK, que era garantir um IP compartilhado que vai ser utilizado pelo cliente.

Pense que no servidor srv01, temos um site rodando, e este site está também no servidor srv02, com isso, o cliente vai acessar o: http://10.101.0.27

…E vai para o servidor master disponível, que em nosso caso, vai ser o srv01.

Caso o master caia, o cliente vai acessar as páginas que estão no servidor srv02, e nem vai sentir que ele está acessando outro servidor. 😉

Mas, note que ainda temos um problema: os dados têm que ser sincronizados manualmente entre os servidores, por isso que vamos utilizar agora o DRBD + OCFS2, que vai trabalhar como um RAID 1 via rede, espelhando os dados em tempo real.

Então, caso seja alterado um arquivo qualquer na partição do DRBD, o outro servidor já vai ter acesso a essas novas informações. Aqui vou utilizar o OCFS2, que é um sistema de arquivos distribuido, onde podemos trabalhar com os nodos sendo !master/master, ou seja, qualquer um dos servidores podem alterar qualquer arquivo, e esse arquivo vai aparecer alterado para a outra ponta.

Instalação e configuração do DRBD + OCFS2

Agora, vamos instalar o DRBD e o OCFS2, faça isso nas duas máquinas:

# aptitude install drbd8-utils ocfs2-tools ocfs2-tools-dev -y

Agora vamos carregar os módulos (faça isso nas duas máquinas):

# modprobe cn
# modprobe drbd

Vamos configurar o DRBD. Deixe o arquivo como abaixo nas duas máquinas:

# vim /etc/drbd.conf

include “drbd.d/global_common.conf”;
#include “drbd.d/*.res”;

Execute nas duas máquinas a parte abaixo.

Vamos fazer backup do arquivo de configuração original:

# cp /etc/drbd.d/global_common.conf{,.bkp}

Deixe o arquivo como abaixo:

# vim /etc/drbd.d/global_common.conf

#/etc/drbd.conf
# Opções Globais
# Geralmente no início do arquivo. Poucas opções são definidas nesta seção.
#
global {
 usage-count yes; # Gerar status da atualização do sistema de DRBD.
}
#
# Opções comuns a mais de um recurso, quando houver. No caso de existir opções
# definidas internamente ao recurso, elas irão sobrepor as opções comuns.
common {
 protocol C; # Método de replicação. Neste caso, replicação síncrona.
}
###  ocfs2 usando 02 primários
resource r1 {
 net {
 # Permitir/habilitar dois servidores primários.
 allow-two-primaries; #Permite habilitar dois servidores primários
 after-sb-0pri discard-younger-primary;
 after-sb-1pri consensus;
 after-sb-2pri disconnect;
}
 startup {
 # Iniciar os dois servidores como primários, por padrão.
 become-primary-on both;
 }
 syncer {
 rate 600M; #Para placas de rede de 10/100 utilizar 10M
 }
 
 on srv01 {
 device     /dev/drbd1; # Nome do dispositivo de DRBD
 disk       /dev/sdb1; # Dispositivo de baixo nível utilizado a partição
 address    172.20.0.25:7789;  # IP:porta de conexão
 meta-disk internal; # Armazenamento das informações de dados é feito
 # dentro do dispositivo de baixo nível.
 }
 on srv02 {
 device   /dev/drbd1;
 disk      /dev/sdb1;
 address   172.20.0.26:7789;
 meta-disk internal;
 }
}

Agora, vamos preparar o disco, faça isso nos dois servidores:

# fdisk /dev/sdb

Vai aparecer as peguntas:

##Saída de comando##
O dispositivo não contém nem uma tabela de partições DOS válida nem um rótulo de disco Sun, OSF ou SGI
Building a new DOS disklabel with disk identifier 0x6aadf3ff.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.
 
Aviso: a opção inválida 0x0000 da tabela de partições 4 será corrigida por gravação (w)
 
WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
 switch off the mode (command 'c') and change display units to
 sectors (command 'u').
 
Comando (m para ajuda):
####
Tecle "p".
##Saída de comando##
Disk /dev/sdb: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 cylinders
Units = cilindros of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x6aadf3ff
 
Dispositivo Boot      Start         End      Blocks   Id  System
Comando (m para ajuda):
####
Aqui, tecle "n" para criar uma nova partição.
##Saída##
Comando - ação
 e   estendida
 p   partição primária (1-4)
####
Tecle "p" (primária).
##Saída##
Número da partição (1-4): 1
Primeiro cilindro (1-1044, default 1): ENTER
Using default value 1
Last cilindro, +cilindros or +size{K,M,G} (1-1044, default 1044): ENTER
Using default value 1044
Comando (m para ajuda):
####

Aqui, tecle w para escrever as mudanças no disco. E por fim, q para sair.

Agora vamos zerar as partições (tem que ser executado nos dois servidores):

# dd if=/dev/zero of=/dev/sdb1 bs=1M count=128

Execute este comando nos dois servidores, antes de passar para o próximo comando:

# drbdadm — –discard-my-data connect r1

Onde “r1”, é o nome do nosso dispositivo, que no arquivo de configuração do DRBD, está como resource r1.

Execute este comando nos dois servidores, antes de passar para o próximo comando:

# drbdadm create-md r1

Execute este comando nos dois servidores, antes de passar para o próximo comando:

# drbdadm attach r1

Execute este comando nos dois servidores, antes de passar para o próximo comando:

# drbdadm connect r1

Pronto, agora podemos iniciar o DRBD. Inicie-o nos dois servidores com o seguinte comando:

# /etc/init.d/drbd start

Podemos observar como está a situação do nosso dispositivo DRBD, com o seguinte comando:

# cat /proc/drbd

Exemplo:

version: 8.3.7 (api:88/proto:86-91)
srcversion: EE47D8BF18AC166BE219757

1: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r—-
ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:8385604

Se em “Connected st” estiver como Primary/Primary, está tudo OK, porém, se estiver como “Secondary/Secondary”, temos que forçar os dispositivos a passarem para primary, e temos mais uma situação quanto ao dispositivo Unknown, normalmente é quando um dos servidores não está operante por problemas de rede, ou de configuração do arquivo do DRBD. Então, muita atenção a esses detalhes.

Vamos levar em consideração que só estamos com o problema que os dois servidores estão como secondary, resolvemos com o seguinte comando. Este comando tem que ser rodado nos dois servidores:

# drbdadm — –overwrite-data-of-peer primary r1

Agora vamos monitorar novamente:

# cat /proc/drbd

Resultado:

version: 8.3.7 (api:88/proto:86-91)
srcversion: EE47D8BF18AC166BE219757

1: cs:SyncTarget ro:Primary/Primary ds:Inconsistent/UpToDate C r—-
ns:0 nr:1368684 dw:1368672 dr:12 al:0 bm:83 lo:1 pe:10097 ua:0 ap:1 ep:1 wo:b oos:7016932
[==>……………..] sync’ed: 16.4% (6852/8188)M
finish: 0:01:04 speed: 109,344 (97,760) K/sec

Agora, é só esperar eles sincronizarem os dados, isso depende da placa de rede, da velocidade do disco e do tamanho do disco, fora os processos do DRBD, se você notar muita lentidão em algum desses fatores, veja se não é bom fazer algum upgrade.

Para acompanhar a sincronização, pode utilizar o seguinte comando:

# cat /proc/drbd

Agora depois de sincronizados:

version: 8.3.7 (api:88/proto:86-91)
srcversion: EE47D8BF18AC166BE219757

1: cs:Connected ro:Primary/Primary ds:UpToDate/UpToDate C r—-
ns:8385660 nr:0 dw:0 dr:8385860 al:0 bm:512 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0

Agora, vamos configurar o OCFS2

Vamos configurar o cluster para o OCFS2. Tem que ser configurado nos dois servidores:

# vim /etc/ocfs2/cluster.conf

Edite:

node:
 ip_port = 7777
 ip_address = 172.20.0.25
 number = 0
 name = srv01
 cluster = ocfs2
 
node:
 ip_port = 7777
 ip_address = 172.20.0.26
 number = 1
 name = srv02
 cluster = ocfs2
 
cluster:
 node_count = 2
 name = ocfs2

Agora vamos configurar o O2CB, para ser habilitado (tem que ser configurado nos dois servidores):

# sed -i ‘s/O2CB_ENABLED=false/O2CB_ENABLED=true/g’ /etc/default/o2cb

Agora é so restartar o serviço nos dois servidores:

# /etc/init.d/o2cb restart

E criar o sistema de arquivos OCFS2 no DRBD, precimos fazer isso somente em um dos dois servidores.

Opções:

  • -C : indicado acima de 128K para grandes arquivos;
  • -b : indicado 4K;
  • -N : quantidade de nodos;
  • -L : label para a partição.

# mkfs.ocfs2 -b 4K -C 128K -N 2 -L ocfs2 /dev/drbd1

Montando a partição

Vamos criar um diretório para o OCFS2 nos dois servidores, e vamos montar:

# mkdir /ocfs2
# mount.ocfs2 /dev/drbd1 /ocfs2/

Vamos agora verificar nossas partições:

# df -Th

Resultado:

Sist. Arq.    Tipo    Size  Used Avail Use% Montado em
/dev/sda1     ext3    323M  147M  160M  48% /
tmpfs        tmpfs    249M     0  249M   0% /lib/init/rw
udev         tmpfs    244M  168K  244M   1% /dev
tmpfs        tmpfs    249M     0  249M   0% /dev/shm
/dev/sda9     ext3    2,8G   69M  2,6G   3% /home
/dev/sda8     ext3    234M  6,1M  216M   3% /tmp
/dev/sda5     ext3    2,8G  639M  2,0G  24% /usr
/dev/sda6     ext3    1,4G  273M  1,1G  21% /var
/dev/drbd1   ocfs2    8,0G  279M  7,8G   4% /ocfs2

Como podemos ver, temos nossa partição montada com OCFS2.

Agora podemos deixar isso na inicialização do sistema:

# vim /etc/fstab

Acrescentando:

/dev/drbd1 /ocfs2 ocfs2 _netdev,defaults 0 0

Agora vamos ajustar a ordem de inicialização dos serviços, no dois servidores.

Vamos primeiro acertar o DRBD nos dois servidores:

# vim /etc/init.d/drbd

Deixe como:

# Deixe a opção Default-Start como abaixo
# Default-Start:   S

Agora temos que acertar o o2CB nos dois servidores:

# vim /etc/init.d/o2cb

Adicione/edite:

# Temos que inserir a opção drbd para que ele inicialize depois que subir o dispositivo
# Required-Start: $network drbd

Agora temos que recarregar as configurações de inicialização dos serviços.

Vamos tirar os serviços da inicialização primeiro:

# insserv -r -v ocfs2
# insserv -r -v o2cb
# insserv -r -v drbd

Agora vamos colocar eles na inicialização novamente:

# insserv -f -v drbd
# insserv -f -v o2cb
# insserv -f -v ocfs2

Agora vamos reiniciar os servidores para testarmos se vai ser montado o DRBD na inicialização:

# init 6

Depois, da inicialização nodo1:

# uptime

Saída:

15:22:11 up 0 min,  1 user,  load average: 0.26, 0.07, 0.02

# df -Th

Saída:

Sist. Arq.    Tipo    Size  Used Avail Use% Montado em
/dev/sda1     ext3    323M  147M  160M  48% /
tmpfs        tmpfs    249M     0  249M   0% /lib/init/rw
udev         tmpfs    244M  168K  244M   1% /dev
tmpfs        tmpfs    249M     0  249M   0% /dev/shm
/dev/sda9     ext3    2,8G   69M  2,6G   3% /home
/dev/sda8     ext3    234M  6,1M  216M   3% /tmp
/dev/sda5     ext3    2,8G  639M  2,0G  24% /usr
/dev/sda6     ext3    1,4G  273M  1,1G  21% /var
/dev/drbd1   ocfs2    8,0G  151M  7,9G   2% /ocfs2

Depois, da inicialização nodo2:

# uptime

Saída:

15:22:13 up 0 min,  1 user,  load average: 0.21, 0.12, 0.04

# df -Th

Saída:

Sist. Arq.    Tipo    Size  Used Avail Use% Montado em
/dev/sda1     ext3    323M  147M  160M  48% /
tmpfs        tmpfs    249M     0  249M   0% /lib/init/rw
udev         tmpfs    244M  168K  244M   1% /dev
tmpfs        tmpfs    249M     0  249M   0% /dev/shm
/dev/sda9     ext3    2,8G   69M  2,6G   3% /home
/dev/sda8     ext3    234M  6,1M  216M   3% /tmp
/dev/sda5     ext3    2,8G  639M  2,0G  24% /usr
/dev/sda6     ext3    1,4G  273M  1,1G  21% /var
/dev/drbd1   ocfs2    8,0G  151M  7,9G   2% /ocfs2

Caso dê algum problema na inicialização, como um dos dois servidores não ficar como primary, podemos resolver da seguinte maneira:

– Primeiro vamos mandar desmontar as partições montadas com o OCFS2 nos dois servidores:

# umount /ocfs2

– Agora vamos mandar reiniciar o DRBD nos dois servidores:

# /etc/init.d/drbd restart

– Agora vamos forçar a utilização dos dois nodos primary:

# drbdadm — –overwrite-data-of-peer primary r1

– Depois, é só remontar as partições novamente nos dois servidores:

# mount.ocfs2 /dev/drbd1 /ocfs2/

Erros de sincronismo

Exemplo de erro de sincronismo dos discos, aonde perdemos a consistência dos dados, com isso, vamos precisar acertar este erro:

# cat /proc/drbd

Resultado:

version: 8.3.7 (api:88/proto:86-91)
srcversion: EE47D8BF18AC166BE219757

1: cs:StandAlone ro:Secondary/Unknown ds:Outdated/DUnknown  r—-
ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:258100

No nodo2, vamos mandar ele desconsiderar os dados que ele já tem e ressincronizar com o nodo1:

# drbdadm — –discard-my-data connect r1

Agora vamos verificar a sincronismo:

# cat /proc/drbd

Resultado:

version: 8.3.7 (api:88/proto:86-91)
srcversion: EE47D8BF18AC166BE219757

1: cs:SyncTarget ro:Secondary/Primary ds:Inconsistent/UpToDate C r—-
ns:0 nr:293128 dw:287336 dr:0 al:0 bm:19 lo:1448 pe:35179 ua:1448 ap:0 ep:1 wo:b oos:207647312
[>………………..] sync’ed: 0.2% (202780/203060)M
finish: 1:00:10 speed: 57,464 (57,464) K/sec

Assim que terminar este processo, precisamos somente forçar os dois como primary da seguinte forma:

# drbdadm — –overwrite-data-of-peer primary r1

O discos ainda sincronizando e forçados como primary:

# cat /proc/drbd

version: 8.3.7 (api:88/proto:86-91)
srcversion: EE47D8BF18AC166BE219757

1: cs:SyncSource ro:Primary/Primary ds:UpToDate/Inconsistent C r—-
ns:22204456 nr:0 dw:0 dr:22211888 al:0 bm:1356 lo:40 pe:1833 ua:1797 ap:0 ep:1 wo:b oos:185737536
[=>………………] sync’ed: 10.7% (181384/203060)M
finish: 0:55:40 speed: 55,560 (47,940) K/sec

Plus de Heartbeat

Pense que você precisa fazer o HA de um servidor de FW, por exemplo.

O que tem de diferente? Você poderia perguntar.

Pense nas interfaces de rede: Temos no mínimo 2 interfaces, uma WAN e uma LAN. Neste caso, precisaríamos configurar o Heartbeat para atribuir endereços virtuais para as duas interfaces.

Vamos a um exemplo, vou utilizar as interfaces de bond mesmo.

Agora vamos instalar o Heartbeat no srv02:

# aptitude update && aptitude dist-upgrade -y && apt-get install heartbeat heartbeat-dev -y

Agora vamos acertar a configuração do Heartbeat:

# vim /etc/ha.d/ha.cf

Edite:

# Informe os nomes dos computadores que formam a replicação(deve ser igual a saída do comando "uname -n
node srv01
node srv02
# Qual a interface vai ser usada para comunicação
mcast bond0 225.0.0.1 694 1 0
mcast bond1 225.0.0.1 694 1 0
# Fazer com que a máquina principal receba seus serviços quando retornar a ativa
auto_failback on
# Arquivos de log
debugfile /var/log/ha-debug
logfile /var/log/ha-log
# Freqüência, em segundos, da verificação das máquinas
keepalive 1
# Tempo mínimo para declarar a outra máquina como morta
deadtime 5

Agora vamos acertar a configuração do nosso IP compartilhado pelo Heartbeat:

# vim /etc/ha.d/haresources

srv01 IPaddr::10.101.0.27/24/bond0/10.101.0.255
srv01 IPaddr::172.20.0.27/24/bond1/172.20.0.255

Explicando o arquivo acima:

  • srv01: nome do servidor master
  • IPaddr::10.101.0.27/24: IP que vai ser compartilhado pelo Heartbeat
  • bond0: Interface que vai receber o IP compartilhado pelo Heartbeat
  • 10.101.0.25: Endereço de broadcast

Agora vamos acertar o arquivo com a senha de autenticação entre os Heartbeats:

# vim /etc/ha.d/authkeys

auth 3
3 md5 h34rt64t

Agora vamos acertar as permissões do arquivo de senha:

# chmod 600 /etc/ha.d/authkeys

Agora vamos instalar o Heartbeat no srv02:

# aptitude update && aptitude dist-upgrade -y && apt-get install heartbeat heartbeat-dev -y Agora vamos acertar a configuração do Heartbeat:

# vim /etc/ha.d/ha.cf

# Informe os nomes dos computadores que formam a replicação(deve ser igual a saída do comando "uname -n
node srv01
node srv02
# Qual a interface vai ser usada para comunicação
mcast bond0 225.0.0.1 694 1 0
mcast bond1 225.0.0.1 694 1 0
# Fazer com que a máquina principal receba seus serviços quando retornar a ativa
auto_failback on
# Arquivos de log
debugfile /var/log/ha-debug
logfile /var/log/ha-log
# Freqüência, em segundos, da verificação das máquinas
keepalive 1
# Tempo mínimo para declarar a outra máquina como morta
deadtime 5

Agora, vamos acertar a configuração do nosso IP compartilhado pelo Heartbeat:

# vim /etc/ha.d/haresources

srv01 IPaddr::10.101.0.27/24/bond0/10.101.0.255
srv01 IPaddr::172.20.0.27/24/bond0/172.20.0.255

Agora, vamos acertar o arquivo com a senha de autenticação entre os Heartbeats:

# vim /etc/ha.d/authkeys

auth 3
3 md5 h34rt64t

Agora vamos acertar as permissões do arquivo de senha:

# chmod 600 /etc/ha.d/authkeys

Agora vamos reiniciar o Heartbeat nos dois servidores:

# /etc/init.d/heartbeat restart

Agora vamos consultar as interfaces no servidor srv01:

# ifconfig

Resultado:

bond0  Link encap:Ethernet Endereço de HW 08:00:27:3f:b0:b8
inet end.: 10.101.0.25 Bcast:10.101.0.255 Masc:255.255.255.0
endereço inet6: fe80::a00:27ff:fe3f:b0b8/64 Escopo:Link
UP BROADCASTRUNNING MASTER MULTICAST MTU:1500 Métrica:1
RX packets:28239 errors:0 dropped:0 overruns:0 frame:0
TX packets:1356 errors:0 dropped:0 overruns:0 carrier:0
colisões:0 txqueuelen:0
RX bytes:2576871 (2.4 MiB) TX bytes:464634 (453.7 KiB)

bond0:0  Link encap:Ethernet Endereço de HW 08:00:27:3f:b0:b8
inet end.: 10.101.0.27 Bcast:10.101.0.255 Masc:255.255.255.0
UP BROADCASTRUNNING MASTER MULTICAST MTU:1500 Métrica:1

bond1  Link encap:Ethernet Endereço de HW 08:00:27:ff:cd:7c
inet end.: 172.20.0.25 Bcast:172.20.0.255 Masc:255.255.255.0
endereço inet6: fe80::a00:27ff:feff:cd7c/64 Escopo:Link
UP BROADCASTRUNNING MASTER MULTICAST MTU:1500 Métrica:1
RX packets:204376 errors:0 dropped:0 overruns:0 frame:0
TX packets:36125 errors:0 dropped:0 overruns:0 carrier:0
colisões:0 txqueuelen:0
RX bytes:230398360 (219.7 MiB) TX bytes:9571891 (9.1 MiB)

bond1:0  Link encap:Ethernet Endereço de HW 08:00:27:ff:cd:7c
inet end.: 172.20.0.27 Bcast:172.20.0.255 Masc:255.255.255.0
UP BROADCASTRUNNING MASTER MULTICAST MTU:1500 Métrica:1

eth0    Link encap:Ethernet Endereço de HW 08:00:27:3f:b0:b8
UP BROADCASTRUNNING SLAVE MULTICAST MTU:1500 Métrica:1
RX packets:14227 errors:0 dropped:0 overruns:0 frame:0
TX packets:684 errors:0 dropped:0 overruns:0 carrier:0
colisões:0 txqueuelen:1000
RX bytes:1300809 (1.2 MiB) TX bytes:246914 (241.1 KiB)

eth1    Link encap:Ethernet Endereço de HW 08:00:27:3f:b0:b8
UP BROADCASTRUNNING SLAVE MULTICAST MTU:1500 Métrica:1
RX packets:14012 errors:0 dropped:0 overruns:0 frame:0
TX packets:672 errors:0 dropped:0 overruns:0 carrier:0
colisões:0 txqueuelen:1000
RX bytes:1276062 (1.2 MiB) TX bytes:217720 (212.6 KiB)

eth2    Link encap:Ethernet Endereço de HW 08:00:27:ff:cd:7c
UP BROADCASTRUNNING SLAVE MULTICAST MTU:1500 Métrica:1
RX packets:190049 errors:0 dropped:0 overruns:0 frame:0
TX packets:18077 errors:0 dropped:0 overruns:0 carrier:0
colisões:0 txqueuelen:1000
RX bytes:229048128 (218.4 MiB) TX bytes:4820003 (4.5 MiB)

eth3    Link encap:Ethernet Endereço de HW 08:00:27:ff:cd:7c
UP BROADCASTRUNNING SLAVE MULTICAST MTU:1500 Métrica:1
RX packets:14327 errors:0 dropped:0 overruns:0 frame:0
TX packets:18048 errors:0 dropped:0 overruns:0 carrier:0
colisões:0 txqueuelen:1000
RX bytes:1350232 (1.2 MiB) TX bytes:4751888 (4.5 MiB)

lo        Link encap:Loopback Local
inet end.: 127.0.0.1 Masc:255.0.0.0
endereço inet6: ::1/128 Escopo:Máquina
UP LOOPBACKRUNNING MTU:16436 Métrica:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
colisões:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

Aqui, o que é preciso mudar são as interfaces, caso não trabalhe com o bond e os endereços IPs. 😉

Rolar para cima