Sistemas Distribuídos
Alta Disponibilidade utilizando Pacemaker
Frederico Madeira
LPIC­1, LPIC­2, CCNA
fred@madeira.eng.br
www.madeira.eng.br
“Um sistema de alta disponibilidade é aquele que utiliza
mecanismos de detecção, recuperação e mascaramento de
falhas, visando manter o funcionamento dos serviços durante o
máximo de tempo possível, inclusive no decurso de
manutenções programadas”
Definição – Alta Disponibilidade
“Disponibilidade refere-se a capacidade de um usuário de
determinado sistema acessar, incluir ou modificar os dados
existentes em qualquer intervalo de tempo. Caso, por qualquer
que seja o motivo, um usuário não tenha acesso, é dito então
que ele está indisponível, sendo o tempo total de
indisponibilidade conhecido pelo termo downtime.”
Definição – Disponibilidade
•Níveis de Disponibilidade
Geralmente, quanto maior a disponibilidade,
maior a redundância e custo das soluções: tudo
depende do tipo de serviço que se pretende
disponibilizar
• Infraestrutura do Cluster (CMAN, DLM, Fencing)
– Provê as principais funções para que os nós trabalhem
juntos como um cluster
– Gerenciamento dos arquivos de configuração,
gerenciamento das associações (membership), lock
management e fencing
• Gerenciamento de Serviços HA (rgmanager)
– Provê failover dos serviços de um cluster para o outro
quando o nó fica inoperante
Principais Componentes
• Ferramentas de Administralçao do Cluster
(pacemaker, CCS, Conga)
– Ferramentas de configuração e gerenciamento para
configurar e criar clusters
– Gerencia a alta disponibilidade para uso dos componentes
do cluster, serviços e storage
Principais Componentes
Estrutura do Cluster HA
Funcionamento
IP VIRTUAL
IP’s FIXOS
Instalação Cluster Ativo/Passivo
➔
Instalação do Pacemaker stack e ferramenta pcs
nos dois nós
yum install pacemaker pcs cman
➔
Inicialização do serviço e definição para iniciar no
boot do servidor
Centos 7
systemctl enable pcsd.service
systemctl start pcsd.service
systemctl enable pacemaker.service
Centos 6
/etc/init.d/pcsd start
chkconfig pcsd on
chkconfig pacemaker on
Instalação
➔
Depois da instalação dos pacotes, um novo
usuário chamado hacluster foi criado. Este usuário
é usado para sincronização da configuração e
gerenciamento dos serviços nos nós. É necessário
definir a mesma senha em todos os servidores
[root@node1 ~]# passwd hacluster
➔
Desativando o Firewall (esta ação só deve ser feita
no lab em sala, em implementações deve ser
realizado os ajustes nas regras do firewall)
[root@node1 ~]# iptables -F
[root@node1 ~]# chkconfig iptables off
Instalação
➔
Definir os servidores com IP fixo
[root@node2 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
HWADDR=52:54:00:2D:9C:7E
TYPE=Ethernet
UUID=25d96521-de19-4957-b010-a39c0d1280e7
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=static
IPADDR=192.168.122.204
NETMASK=255.255.255.0
GATEWAY=192.168.122.1
➔
Inserir hostname no /etc/hosts
[root@node1 ~]# vim /etc/hosts
192.168.122.203 node1
192.168.122.204 node2
Instalação
➔
Configuração da autenticação entre os dois hosts
para que possa ser executado comandos em
apenas um dos nós.
[root@node1 ~]# pcs cluster auth node1 node2
Username: hacluster
Password:
node1: Authorized
node2: Authorized
Instalação
➔
Criando um novo cluster chamado cluster_apache
e sincronizado as configurações do corosync entre
os nós.
[root@node1 ~]# pcs cluster setup --start --name cluster_apache
node1 node2
node1: Updated cluster.conf...
node2: Updated cluster.conf...
Starting cluster on nodes: node1, node2...
node1: Starting Cluster...
node2: Starting Cluster...
Obs: Se receber o erro abaixo, crie nos dois nós a pasta
/etc/cluster
Error connecting to node1 - (HTTP error: 500)
Error: Unable to set cluster.conf
Verificando o status do Cluster
[root@node1 ~]# pcs status
Cluster name: cluster_apache
WARNING: no stonith devices and stonith-enabled is not
false
Last updated: Sun Oct 18 22:33:51 2015
Last change: Sun Oct 18 22:33:10 2015
Stack: cman
Current DC: node1 - partition with quorum
Version: 1.1.11-97629de
2 Nodes configured
0 Resources configured
Online: [ node1 node2 ]
Full list of resources:
Adicionando recursos: IP VIP
Se o cluster estiver online, podemos inserir os recursos no
mesmo.
Antes prescisaremos desativar o STONITH, pois em nossa
configuração não temos nenhum dispositivo para fencing.
[root@node1 ~]# pcs property set stonith-enabled=false
Adicionando um IP Virtual para nosso cluster, esse recurso
será chamado de VirtualIP
[root@node1 ~]# pcs resource create VirtualIP IPaddr2
ip=192.168.122.100 cidr_netmask=24
Verificando o status do Cluster
[root@node1 ~]# pcs status
Cluster name: cluster_apache
Last updated: Sun Oct 18 22:57:21 2015
Last change: Sun Oct 18 22:55:41 2015
Stack: cman
Current DC: node1 - partition with quorum
Version: 1.1.11-97629de
2 Nodes configured
1 Resources configured
Online: [ node1 node2 ]
Full list of resources:
VirtualIP (ocf::heartbeat:IPaddr2): Started node1
Verificando o status do Cluster
[root@node1 ~]# ip addr
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc
pfifo_fast state UP qlen 1000
link/ether 52:54:00:e0:dc:2a brd ff:ff:ff:ff:ff:ff
inet 192.168.122.203/24 brd 192.168.122.255 scope global
eth0
inet 192.168.122.100/24 brd 192.168.122.255 scope global
secondary eth0
inet6 fe80::5054:ff:fee0:dc2a/64 scope link
valid_lft forever preferred_lft forever
A partir de um host client ping o IP VIP do cluster
[root@node1 ~]# pcs cluster standby node1
[root@node1 ~]# pcs cluster unstandby node1
Adicionando recursos: Apache
Vamos inserir o apache para rodar em nosso cluster, faça
os processos abaixo nos dois nós
[root@node1 ~]# yum install httpd
O Apache Resource Agent do pacemaker utiliza a página de
status do apache para verificar a saúde do serviço. Para
ativar a página de status, siga os paços abaixo:
[root@node1 ~]# vi /etc/httpd/conf.d/status.conf
<Location /server-status>
SetHandler server-status
Order Deny,Allow
Deny from all
Allow from 127.0.0.1
</Location>
Adicionando recursos: Apache
Inserindo o recurso no cluster
[root@node1 ~]# pcs resource create httpd
ocf:heartbeat:apache configfile=/etc/httpd/conf/httpd.conf
statusurl="http://127.0.0.1/server-status" op monitor
interval=20s
Onde:
create httpd - é o nome do recurso
configfile=/etc/httpd/conf/httpd.conf – é o local do
arquivo de configuração do apache
Statusurl="http://127.0.0.1/server-status" -
Caminho usado para monitorar o status do servidor web
op monitor interval=20s – Monitora o serviço a cada 20s
Verificando o status do Cluster
[root@node1 ~]# pcs status
Cluster name: cluster_apache
Last updated: Sun Oct 18 23:36:16 2015
Last change: Sun Oct 18 23:33:30 2015
Stack: cman
Current DC: node1 - partition with quorum
Version: 1.1.11-97629de
2 Nodes configured
2 Resources configured
Online: [ node1 node2 ]
Full list of resources:
VirtualIP (ocf::heartbeat:IPaddr2): Started node1
httpd (ocf::heartbeat:apache): Started node2
Adicionando recursos: Apache
Os recursos foram distribuidos entro os nós, mas tanto o IP
VIP como o Apache precisam rodar no mesmo nó.
[root@node1 ~]# pcs resource move httpd
Constraint
Através das constraint é possível ordenar o startup dos
serviços e definir quais recursos devem rodar juntos no
mesmo nó.
[root@node1 ~]# pcs constraint colocation add VirtualIP
httpd INFINITY
Mova apenas um recurso para o outro nó e você verá que
ambos recursos serão movidos.
[root@node1 ~]# pcs resource move httpd nome_do_nó
O DRBD (Distributed Replicated Block Device) consiste em um
módulo para o kernel Linux que faz o espelhamento dos dados
de um dispositivo de bloco (partições de disco) entre diferentes
servidores, interligados geralmente através de uma rede
Ethernet.
DRBD = RAID 1 via Rede
Definição -DRBD
➔
Cada dispositivo de bloco envolvido na configuração do DRBD
tem um estado, que pode ser primário ou secundário.
➔
Operações de escrita feitas no primário são replicadas para o
secundário
➔
O protocolo padrão de replicação garante a sincronia e a
integridade dos dados replicados.
➔
Operações de leitura, são sempre realizadas localmente.
Funcionamento
➔
O DRBD suporta três distintos modos de replicação,
permitindo três graus de sincronnização da replicação. O
➔
Protocolo A é assíncrono.
➔
As operações de escrita no nodo primário são
consideradas completas quando a escrita no disco local
termina e o pacote de replicação está no buffer TCP.
➔
Em casos de fail-over deve ocorrer perda de dados
com este protocolo.
Funcionamento
➔
O Protocol B é um semi-síncrono protocolo de
replicação.
➔
Operações locais são escritas no nodo primário e são
consideradas completas quando estão escritas no diso
local e a relpicação do pacote alcançou o outro nodo
na rede.
➔
O Protocol C é sincrono por completo.
➔
Com este protocolo as operações no nodo primário são
consideradas completas quando ocorre a escrita no
nodo primário e no secundário.
Funcionamento
Funcionamento
Escrita
DRBD - Instalação
Nos dois nós
[root@node1 ~]# rpm --import
https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
[root@node1 ~]# rpm -Uvh http://www.elrepo.org/elrepo-
release-6-6.el6.elrepo.noarch.rpm
[root@node1 ~]# yum install drbd84-utils kmod-drbd84
Adicione um disco de 1Gb na máquina virtual, no meu caso
o novo dispositivo foi /dev/vdb em ambas as máquinas
DRBD - Configuração
Criar e configurar o arquivo de configuração abaixo nos
dois nós:
[root@node1 ~]# vim /etc/drbd.d/drbd0.res
resource drbd0 {
disk /dev/vdb1;
device /dev/drbd0;
meta-disk internal;
Protocol C;
on node1 {
address 192.168.122.203:7789;
}
on node2 {
address 192.168.122.204:7789;
}
}
DRBD - Configuração
Inicializando o volume /dev/drbd0 nos dois nós:
[root@node1 ~]# drbdadm create-md drbd0
initializing activity log
NOT initializing bitmap
Writing meta data...
New drbd meta data block successfully created.
success
[root@node2 ~]# drbdadm create-md drbd0
initializing activity log
NOT initializing bitmap
Writing meta data...
New drbd meta data block successfully created.
success
DRBD - Configuração
Ativando o /dev/drbd0 nos dois nós:
[root@node1 ~]# drbdadm up drbd0
[root@node2 ~]# drbdadm up drbd0
[root@node1 ~]# cat /proc/drbd
version: 8.4.6 (api:1/proto:86-101)
GIT-hash: 833d830e0152d1e457fa7856e71e11248ccf3f70
build by phil@Build64R6, 2015-04-09 14:35:00
0: 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:f oos:1048220
O DRBD marcou os dois recursos como inconsistentes pois
ainda não foi marcado quem é o nó primário.
DRBD - Configuração
Marcando o volume do node1 como primário
[root@node1 ~]# drbdadm primary --force drbd0
[root@node2 ~]# cat /proc/drbd
version: 8.4.6 (api:1/proto:86-101)
GIT-hash: 833d830e0152d1e457fa7856e71e11248ccf3f70 build by
phil@Build64R6, 2015-04-09 14:35:00
0: cs:SyncTarget ro:Secondary/Primary ds:Inconsistent/UpToDate C
r-----
ns:0 nr:560232 dw:560232 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1
wo:f oos:487988
[=========>..........] sync'ed: 53.6% (487988/1048220)K
finish: 0:00:25 speed: 18,960 (13,664) want: 21,640 K/sec
DRBD - Configuração
Após o sincronismo dos dois volumes
[root@node1 ~]# cat /proc/drbd
version: 8.4.6 (api:1/proto:86-101)
GIT-hash: 833d830e0152d1e457fa7856e71e11248ccf3f70 build by
phil@Build64R6, 2015-04-09 14:35:00
0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
ns:1048220 nr:0 dw:0 dr:1048884 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1
wo:f oos:0
Onde:
cs (connection state). Status da conexão de rede.
ro (roles). Se o nó é primeira ou secundário
ds (disk states). Status dos discos.O primeiro parâmetro representa o
disco local e depois da barra representa o nó remoto.
DRBD – Criando um FS no
recurso DRBD
No nó em que o DRBD estiver como primário, vamos criar
o FS. Toda ação que for feita no volume /dev/drbd0 será
replicada para o outro nó.
[root@node1 ~]# mkfs.ext3 /dev/drbd0
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
65536 inodes, 262055 blocks
13102 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=268435456
8 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 32768, 98304, 163840, 229376
Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done
DRBD – Testando
Siga os passos abaixo a fim de testar a integridade do
volume drbd nos dois nós.
#Montando o volume /dev/drbd0 e criando conteudo dentro dele
[root@node1 ~]# mkdir /media/teste_drbd
[root@node1 ~]# mount /dev/drbd0 /media/teste_drbd/
[root@node1 ~]# touch /media/teste_drbd/node1_teste.txt
[root@node1 ~]# umount /dev/drbd0
[root@node1 ~]# drbdadm secondary drbd0
[root@node1 ~]# drbd-overview
0:drbd0/0 Connected Secondary/Secondary UpToDate/UpToDate
DRBD – Testando
Montando o volume DRBD no nó 2 e verificando se o
arquivo criado no nó 1 foi replicado.
[root@node2 ~]# mkdir /media/teste_drbd
[root@node2 ~]# mount /dev/drbd0 /media/teste_drbd/
mount: você precisa especificar o tipo do sistema de arquivos
O erro acima ocorreu pois o volume drbd não está como primário neste nó.
[root@node2 ~]# drbdadm primary drbd0
[root@node2 ~]# drbd-overview
0:drbd0/0 Connected Primary/Secondary UpToDate/UpToDate
[root@node2 ~]# mount /dev/drbd0 /media/teste_drbd/
[root@node2 ~]# ls /media/teste_drbd/
lost+found node1_teste.txt
Como o arquivo node1_teste.txt (criado no node1) apareceu, significa que
ele foi replicado do node1 para o node2.
DRBD – Integrando o FS /dev/drbd0 ao Cluster
Nosso cluster está configurado com os seguintes recursos:
– IP VIP
– Servidor Web Apache
Necessário adicionar DRBD como recurso do cluster
Desativar o DRBD da inicialização do linux
[root@node1 ~]# chkconfig drbd off
Desmontar o volume DRBD onde ele estiver montado
[root@node1 ~]# umount /dev/drbd0
[root@node2 ~]# umount /dev/drbd0
DRBD – Integrando o FS /dev/drbd0 ao Cluster
O PCS tem a possibilidade de enfileirar diversos comandos
para em seguida aplicá-los todos de uma vez só. Esse
recurso é possível através da CIB (Cluster Information
Base)
[root@node1 ~]# pcs cluster cib drbd_config
Através do pcs -f vamos inserir regras dentro do
drbd_cofnig. Essas regras só serão inseridas após o push
destas configurações.
[root@node1 ~]# pcs -f drbd_config resource create DrbdVol
ocf:linbit:drbd drbd_resource=drbd0 op monitor interval=60s
[root@node1 ~]# pcs -f drbd_config resource master
DrbdVolClone DrbdVol master-max=1 master-node-max=1 clone-
max=2 clone-node-max=1 notify=true
DRBD – Integrando o FS /dev/drbd0 ao Cluster
[root@node1 ~]# pcs -f drbd_config resource show
VirtualIP (ocf::heartbeat:IPaddr2): Started node1
httpd (ocf::heartbeat:apache): Started node1
Master/Slave Set: DrbdVolClone [DrbdVol]
Stopped: [ node1 node2 ]
Se as configurações estiverem corretas, podemos agora
inserir as configurações no Cluster
[root@node1 ~]# pcs cluster cib-push drbd_config
CIB updated
DRBD – Integrando o FS /dev/drbd0 ao Cluster
[root@node1 ~]# pcs status
Cluster name: cluster_apache
Last updated: Sun Oct 25 16:21:57 2015
Last change: Sun Oct 25 16:20:40 2015
Stack: cman
Current DC: node1 - partition with quorum
Version: 1.1.11-97629de
2 Nodes configured
4 Resources configured
Online: [ node1 node2 ]
Full list of resources:
VirtualIP (ocf::heartbeat:IPaddr2): Started node1
httpd (ocf::heartbeat:apache): Started node1
Master/Slave Set: DrbdVolClone [DrbdVol]
Masters: [ node2 ]
Slaves: [ node1 ]
DRBD – Integrando o FS /dev/drbd0 ao Cluster
Uma vez que o DRBD já está inserido no Cluster, devemos agora
inserir um filesystem para ser montado pelo nosso cluster e definir
que ele só deve ser montado no nó primário
# Add FS
[root@node1 ~]# pcs cluster cib fs_config
[root@node1 ~]# pcs -f fs_config resource create DrbdFS
Filesystem device="/dev/drbd0" directory="/var/www/html"
fstype="ext3"
# Definindo a constraint
[root@node1 ~]# pcs -f fs_config constraint colocation add
DrbdFS DrbdVolClone INFINITY with-rsc-role=Master
[root@node1 ~]# pcs -f fs_config constraint order promote
DrbdVolClone then start DrbdFS
Adding DrbdVolClone DrbdFS (kind: Mandatory) (Options: first-
action=promote then-action=start)
DRBD – Integrando o FS /dev/drbd0 ao Cluster
Precisamos definir que o Apache deve rodar no mesmo nó onde o
FS estiver ativo e que o FS deve ser montado antes do inicio do
apache
[root@node1 ~]# pcs -f fs_config constraint colocation add httpd
DrbdFS INFINITY
[root@node1 ~]# pcs -f fs_config constraint order DrbdFS then
httpd
Adding DrbdFS httpd (kind: Mandatory) (Options: first-
action=start then-action=start)
DRBD – Integrando o FS /dev/drbd0 ao Cluster
Verificando os recursos e constraint da CIB fs_config
[root@node1 ~]# pcs -f fs_config constraint
Location Constraints:
Resource: httpd
Enabled on: node1 (score:INFINITY) (role: Started)
Ordering Constraints:
promote DrbdVolClone then start DrbdFS (kind:Mandatory)
start DrbdFS then start httpd (kind:Mandatory)
Colocation Constraints:
VirtualIP with httpd (score:INFINITY)
DrbdFS with DrbdVolClone (score:INFINITY) (with-rsc-
role:Master)
httpd with DrbdFS (score:INFINITY)
DRBD – Integrando o FS /dev/drbd0 ao Cluster
Verificando os recursos e constraint da CIB fs_config
[root@node1 ~]# pcs -f fs_config resource show
VirtualIP (ocf::heartbeat:IPaddr2): Started node1
httpd (ocf::heartbeat:apache): Started node1
Master/Slave Set: DrbdVolClone [DrbdVol]
Masters: [ node2 ]
Slaves: [ node1 ]
DrbdFS (ocf::heartbeat:Filesystem): Stopped
Se tudo estiver certo, podemos fazer o push das configurações
[root@node1 ~]# pcs cluster cib-push fs_config
CIB updated
DRBD – Integrando o FS /dev/drbd0 ao Cluster
Verificando o status
[root@node1 ~]# pcs status
2 Nodes configured
5 Resources configured
Online: [ node1 node2 ]
Full list of resources:
VirtualIP (ocf::heartbeat:IPaddr2): Started node1
httpd (ocf::heartbeat:apache): Started node1
Master/Slave Set: DrbdVolClone [DrbdVol]
Masters: [ node1 ]
Slaves: [ node2 ]
DrbdFS (ocf::heartbeat:Filesystem): Started node1
Testando
➔
Coloque o nó 1 em standby e observe que o a
pasa /var/www/html está vazia. No nó 2 ela
será montada com todo o conteúdo
apresentado no nó 1 antes do standby.
[root@node1 ~]# pcs cluster standby node1
➔
Faça com que o nó 1 reassuma. Verifique o
status do device /dev/drbd0 e dos dados na
pasta /var/www/html
[root@node1 ~]# pcs cluster unstandby node1
Sistemas Distribuídos
Alta Disponibilidade utilizando Heartbeat + drbd
Frederico Madeira
LPIC­1, LPIC­2, CCNA
fred@madeira.eng.br
www.madeira.eng.br

Alta Disponibilidade utilizando Pacemaker e DRBD

  • 1.
    Sistemas Distribuídos Alta Disponibilidadeutilizando Pacemaker Frederico Madeira LPIC­1, LPIC­2, CCNA fred@madeira.eng.br www.madeira.eng.br
  • 2.
    “Um sistema dealta disponibilidade é aquele que utiliza mecanismos de detecção, recuperação e mascaramento de falhas, visando manter o funcionamento dos serviços durante o máximo de tempo possível, inclusive no decurso de manutenções programadas” Definição – Alta Disponibilidade
  • 3.
    “Disponibilidade refere-se acapacidade de um usuário de determinado sistema acessar, incluir ou modificar os dados existentes em qualquer intervalo de tempo. Caso, por qualquer que seja o motivo, um usuário não tenha acesso, é dito então que ele está indisponível, sendo o tempo total de indisponibilidade conhecido pelo termo downtime.” Definição – Disponibilidade
  • 4.
    •Níveis de Disponibilidade Geralmente,quanto maior a disponibilidade, maior a redundância e custo das soluções: tudo depende do tipo de serviço que se pretende disponibilizar
  • 5.
    • Infraestrutura doCluster (CMAN, DLM, Fencing) – Provê as principais funções para que os nós trabalhem juntos como um cluster – Gerenciamento dos arquivos de configuração, gerenciamento das associações (membership), lock management e fencing • Gerenciamento de Serviços HA (rgmanager) – Provê failover dos serviços de um cluster para o outro quando o nó fica inoperante Principais Componentes
  • 6.
    • Ferramentas deAdministralçao do Cluster (pacemaker, CCS, Conga) – Ferramentas de configuração e gerenciamento para configurar e criar clusters – Gerencia a alta disponibilidade para uso dos componentes do cluster, serviços e storage Principais Componentes
  • 7.
  • 8.
  • 9.
    Instalação Cluster Ativo/Passivo ➔ Instalaçãodo Pacemaker stack e ferramenta pcs nos dois nós yum install pacemaker pcs cman ➔ Inicialização do serviço e definição para iniciar no boot do servidor Centos 7 systemctl enable pcsd.service systemctl start pcsd.service systemctl enable pacemaker.service Centos 6 /etc/init.d/pcsd start chkconfig pcsd on chkconfig pacemaker on
  • 10.
    Instalação ➔ Depois da instalaçãodos pacotes, um novo usuário chamado hacluster foi criado. Este usuário é usado para sincronização da configuração e gerenciamento dos serviços nos nós. É necessário definir a mesma senha em todos os servidores [root@node1 ~]# passwd hacluster ➔ Desativando o Firewall (esta ação só deve ser feita no lab em sala, em implementações deve ser realizado os ajustes nas regras do firewall) [root@node1 ~]# iptables -F [root@node1 ~]# chkconfig iptables off
  • 11.
    Instalação ➔ Definir os servidorescom IP fixo [root@node2 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 HWADDR=52:54:00:2D:9C:7E TYPE=Ethernet UUID=25d96521-de19-4957-b010-a39c0d1280e7 ONBOOT=yes NM_CONTROLLED=no BOOTPROTO=static IPADDR=192.168.122.204 NETMASK=255.255.255.0 GATEWAY=192.168.122.1 ➔ Inserir hostname no /etc/hosts [root@node1 ~]# vim /etc/hosts 192.168.122.203 node1 192.168.122.204 node2
  • 12.
    Instalação ➔ Configuração da autenticaçãoentre os dois hosts para que possa ser executado comandos em apenas um dos nós. [root@node1 ~]# pcs cluster auth node1 node2 Username: hacluster Password: node1: Authorized node2: Authorized
  • 13.
    Instalação ➔ Criando um novocluster chamado cluster_apache e sincronizado as configurações do corosync entre os nós. [root@node1 ~]# pcs cluster setup --start --name cluster_apache node1 node2 node1: Updated cluster.conf... node2: Updated cluster.conf... Starting cluster on nodes: node1, node2... node1: Starting Cluster... node2: Starting Cluster... Obs: Se receber o erro abaixo, crie nos dois nós a pasta /etc/cluster Error connecting to node1 - (HTTP error: 500) Error: Unable to set cluster.conf
  • 14.
    Verificando o statusdo Cluster [root@node1 ~]# pcs status Cluster name: cluster_apache WARNING: no stonith devices and stonith-enabled is not false Last updated: Sun Oct 18 22:33:51 2015 Last change: Sun Oct 18 22:33:10 2015 Stack: cman Current DC: node1 - partition with quorum Version: 1.1.11-97629de 2 Nodes configured 0 Resources configured Online: [ node1 node2 ] Full list of resources:
  • 15.
    Adicionando recursos: IPVIP Se o cluster estiver online, podemos inserir os recursos no mesmo. Antes prescisaremos desativar o STONITH, pois em nossa configuração não temos nenhum dispositivo para fencing. [root@node1 ~]# pcs property set stonith-enabled=false Adicionando um IP Virtual para nosso cluster, esse recurso será chamado de VirtualIP [root@node1 ~]# pcs resource create VirtualIP IPaddr2 ip=192.168.122.100 cidr_netmask=24
  • 16.
    Verificando o statusdo Cluster [root@node1 ~]# pcs status Cluster name: cluster_apache Last updated: Sun Oct 18 22:57:21 2015 Last change: Sun Oct 18 22:55:41 2015 Stack: cman Current DC: node1 - partition with quorum Version: 1.1.11-97629de 2 Nodes configured 1 Resources configured Online: [ node1 node2 ] Full list of resources: VirtualIP (ocf::heartbeat:IPaddr2): Started node1
  • 17.
    Verificando o statusdo Cluster [root@node1 ~]# ip addr 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 52:54:00:e0:dc:2a brd ff:ff:ff:ff:ff:ff inet 192.168.122.203/24 brd 192.168.122.255 scope global eth0 inet 192.168.122.100/24 brd 192.168.122.255 scope global secondary eth0 inet6 fe80::5054:ff:fee0:dc2a/64 scope link valid_lft forever preferred_lft forever A partir de um host client ping o IP VIP do cluster [root@node1 ~]# pcs cluster standby node1 [root@node1 ~]# pcs cluster unstandby node1
  • 18.
    Adicionando recursos: Apache Vamosinserir o apache para rodar em nosso cluster, faça os processos abaixo nos dois nós [root@node1 ~]# yum install httpd O Apache Resource Agent do pacemaker utiliza a página de status do apache para verificar a saúde do serviço. Para ativar a página de status, siga os paços abaixo: [root@node1 ~]# vi /etc/httpd/conf.d/status.conf <Location /server-status> SetHandler server-status Order Deny,Allow Deny from all Allow from 127.0.0.1 </Location>
  • 19.
    Adicionando recursos: Apache Inserindoo recurso no cluster [root@node1 ~]# pcs resource create httpd ocf:heartbeat:apache configfile=/etc/httpd/conf/httpd.conf statusurl="http://127.0.0.1/server-status" op monitor interval=20s Onde: create httpd - é o nome do recurso configfile=/etc/httpd/conf/httpd.conf – é o local do arquivo de configuração do apache Statusurl="http://127.0.0.1/server-status" - Caminho usado para monitorar o status do servidor web op monitor interval=20s – Monitora o serviço a cada 20s
  • 20.
    Verificando o statusdo Cluster [root@node1 ~]# pcs status Cluster name: cluster_apache Last updated: Sun Oct 18 23:36:16 2015 Last change: Sun Oct 18 23:33:30 2015 Stack: cman Current DC: node1 - partition with quorum Version: 1.1.11-97629de 2 Nodes configured 2 Resources configured Online: [ node1 node2 ] Full list of resources: VirtualIP (ocf::heartbeat:IPaddr2): Started node1 httpd (ocf::heartbeat:apache): Started node2
  • 21.
    Adicionando recursos: Apache Osrecursos foram distribuidos entro os nós, mas tanto o IP VIP como o Apache precisam rodar no mesmo nó. [root@node1 ~]# pcs resource move httpd
  • 22.
    Constraint Através das constrainté possível ordenar o startup dos serviços e definir quais recursos devem rodar juntos no mesmo nó. [root@node1 ~]# pcs constraint colocation add VirtualIP httpd INFINITY Mova apenas um recurso para o outro nó e você verá que ambos recursos serão movidos. [root@node1 ~]# pcs resource move httpd nome_do_nó
  • 23.
    O DRBD (DistributedReplicated Block Device) consiste em um módulo para o kernel Linux que faz o espelhamento dos dados de um dispositivo de bloco (partições de disco) entre diferentes servidores, interligados geralmente através de uma rede Ethernet. DRBD = RAID 1 via Rede Definição -DRBD
  • 24.
    ➔ Cada dispositivo debloco envolvido na configuração do DRBD tem um estado, que pode ser primário ou secundário. ➔ Operações de escrita feitas no primário são replicadas para o secundário ➔ O protocolo padrão de replicação garante a sincronia e a integridade dos dados replicados. ➔ Operações de leitura, são sempre realizadas localmente. Funcionamento
  • 25.
    ➔ O DRBD suportatrês distintos modos de replicação, permitindo três graus de sincronnização da replicação. O ➔ Protocolo A é assíncrono. ➔ As operações de escrita no nodo primário são consideradas completas quando a escrita no disco local termina e o pacote de replicação está no buffer TCP. ➔ Em casos de fail-over deve ocorrer perda de dados com este protocolo. Funcionamento
  • 26.
    ➔ O Protocol Bé um semi-síncrono protocolo de replicação. ➔ Operações locais são escritas no nodo primário e são consideradas completas quando estão escritas no diso local e a relpicação do pacote alcançou o outro nodo na rede. ➔ O Protocol C é sincrono por completo. ➔ Com este protocolo as operações no nodo primário são consideradas completas quando ocorre a escrita no nodo primário e no secundário. Funcionamento
  • 27.
  • 28.
    DRBD - Instalação Nosdois nós [root@node1 ~]# rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org [root@node1 ~]# rpm -Uvh http://www.elrepo.org/elrepo- release-6-6.el6.elrepo.noarch.rpm [root@node1 ~]# yum install drbd84-utils kmod-drbd84 Adicione um disco de 1Gb na máquina virtual, no meu caso o novo dispositivo foi /dev/vdb em ambas as máquinas
  • 29.
    DRBD - Configuração Criare configurar o arquivo de configuração abaixo nos dois nós: [root@node1 ~]# vim /etc/drbd.d/drbd0.res resource drbd0 { disk /dev/vdb1; device /dev/drbd0; meta-disk internal; Protocol C; on node1 { address 192.168.122.203:7789; } on node2 { address 192.168.122.204:7789; } }
  • 30.
    DRBD - Configuração Inicializandoo volume /dev/drbd0 nos dois nós: [root@node1 ~]# drbdadm create-md drbd0 initializing activity log NOT initializing bitmap Writing meta data... New drbd meta data block successfully created. success [root@node2 ~]# drbdadm create-md drbd0 initializing activity log NOT initializing bitmap Writing meta data... New drbd meta data block successfully created. success
  • 31.
    DRBD - Configuração Ativandoo /dev/drbd0 nos dois nós: [root@node1 ~]# drbdadm up drbd0 [root@node2 ~]# drbdadm up drbd0 [root@node1 ~]# cat /proc/drbd version: 8.4.6 (api:1/proto:86-101) GIT-hash: 833d830e0152d1e457fa7856e71e11248ccf3f70 build by phil@Build64R6, 2015-04-09 14:35:00 0: 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:f oos:1048220 O DRBD marcou os dois recursos como inconsistentes pois ainda não foi marcado quem é o nó primário.
  • 32.
    DRBD - Configuração Marcandoo volume do node1 como primário [root@node1 ~]# drbdadm primary --force drbd0 [root@node2 ~]# cat /proc/drbd version: 8.4.6 (api:1/proto:86-101) GIT-hash: 833d830e0152d1e457fa7856e71e11248ccf3f70 build by phil@Build64R6, 2015-04-09 14:35:00 0: cs:SyncTarget ro:Secondary/Primary ds:Inconsistent/UpToDate C r----- ns:0 nr:560232 dw:560232 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:487988 [=========>..........] sync'ed: 53.6% (487988/1048220)K finish: 0:00:25 speed: 18,960 (13,664) want: 21,640 K/sec
  • 33.
    DRBD - Configuração Apóso sincronismo dos dois volumes [root@node1 ~]# cat /proc/drbd version: 8.4.6 (api:1/proto:86-101) GIT-hash: 833d830e0152d1e457fa7856e71e11248ccf3f70 build by phil@Build64R6, 2015-04-09 14:35:00 0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r----- ns:1048220 nr:0 dw:0 dr:1048884 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0 Onde: cs (connection state). Status da conexão de rede. ro (roles). Se o nó é primeira ou secundário ds (disk states). Status dos discos.O primeiro parâmetro representa o disco local e depois da barra representa o nó remoto.
  • 34.
    DRBD – Criandoum FS no recurso DRBD No nó em que o DRBD estiver como primário, vamos criar o FS. Toda ação que for feita no volume /dev/drbd0 será replicada para o outro nó. [root@node1 ~]# mkfs.ext3 /dev/drbd0 mke2fs 1.41.12 (17-May-2010) Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 65536 inodes, 262055 blocks 13102 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=268435456 8 block groups 32768 blocks per group, 32768 fragments per group 8192 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376 Writing inode tables: done Creating journal (4096 blocks): done Writing superblocks and filesystem accounting information: done
  • 35.
    DRBD – Testando Sigaos passos abaixo a fim de testar a integridade do volume drbd nos dois nós. #Montando o volume /dev/drbd0 e criando conteudo dentro dele [root@node1 ~]# mkdir /media/teste_drbd [root@node1 ~]# mount /dev/drbd0 /media/teste_drbd/ [root@node1 ~]# touch /media/teste_drbd/node1_teste.txt [root@node1 ~]# umount /dev/drbd0 [root@node1 ~]# drbdadm secondary drbd0 [root@node1 ~]# drbd-overview 0:drbd0/0 Connected Secondary/Secondary UpToDate/UpToDate
  • 36.
    DRBD – Testando Montandoo volume DRBD no nó 2 e verificando se o arquivo criado no nó 1 foi replicado. [root@node2 ~]# mkdir /media/teste_drbd [root@node2 ~]# mount /dev/drbd0 /media/teste_drbd/ mount: você precisa especificar o tipo do sistema de arquivos O erro acima ocorreu pois o volume drbd não está como primário neste nó. [root@node2 ~]# drbdadm primary drbd0 [root@node2 ~]# drbd-overview 0:drbd0/0 Connected Primary/Secondary UpToDate/UpToDate [root@node2 ~]# mount /dev/drbd0 /media/teste_drbd/ [root@node2 ~]# ls /media/teste_drbd/ lost+found node1_teste.txt Como o arquivo node1_teste.txt (criado no node1) apareceu, significa que ele foi replicado do node1 para o node2.
  • 37.
    DRBD – Integrandoo FS /dev/drbd0 ao Cluster Nosso cluster está configurado com os seguintes recursos: – IP VIP – Servidor Web Apache Necessário adicionar DRBD como recurso do cluster Desativar o DRBD da inicialização do linux [root@node1 ~]# chkconfig drbd off Desmontar o volume DRBD onde ele estiver montado [root@node1 ~]# umount /dev/drbd0 [root@node2 ~]# umount /dev/drbd0
  • 38.
    DRBD – Integrandoo FS /dev/drbd0 ao Cluster O PCS tem a possibilidade de enfileirar diversos comandos para em seguida aplicá-los todos de uma vez só. Esse recurso é possível através da CIB (Cluster Information Base) [root@node1 ~]# pcs cluster cib drbd_config Através do pcs -f vamos inserir regras dentro do drbd_cofnig. Essas regras só serão inseridas após o push destas configurações. [root@node1 ~]# pcs -f drbd_config resource create DrbdVol ocf:linbit:drbd drbd_resource=drbd0 op monitor interval=60s [root@node1 ~]# pcs -f drbd_config resource master DrbdVolClone DrbdVol master-max=1 master-node-max=1 clone- max=2 clone-node-max=1 notify=true
  • 39.
    DRBD – Integrandoo FS /dev/drbd0 ao Cluster [root@node1 ~]# pcs -f drbd_config resource show VirtualIP (ocf::heartbeat:IPaddr2): Started node1 httpd (ocf::heartbeat:apache): Started node1 Master/Slave Set: DrbdVolClone [DrbdVol] Stopped: [ node1 node2 ] Se as configurações estiverem corretas, podemos agora inserir as configurações no Cluster [root@node1 ~]# pcs cluster cib-push drbd_config CIB updated
  • 40.
    DRBD – Integrandoo FS /dev/drbd0 ao Cluster [root@node1 ~]# pcs status Cluster name: cluster_apache Last updated: Sun Oct 25 16:21:57 2015 Last change: Sun Oct 25 16:20:40 2015 Stack: cman Current DC: node1 - partition with quorum Version: 1.1.11-97629de 2 Nodes configured 4 Resources configured Online: [ node1 node2 ] Full list of resources: VirtualIP (ocf::heartbeat:IPaddr2): Started node1 httpd (ocf::heartbeat:apache): Started node1 Master/Slave Set: DrbdVolClone [DrbdVol] Masters: [ node2 ] Slaves: [ node1 ]
  • 41.
    DRBD – Integrandoo FS /dev/drbd0 ao Cluster Uma vez que o DRBD já está inserido no Cluster, devemos agora inserir um filesystem para ser montado pelo nosso cluster e definir que ele só deve ser montado no nó primário # Add FS [root@node1 ~]# pcs cluster cib fs_config [root@node1 ~]# pcs -f fs_config resource create DrbdFS Filesystem device="/dev/drbd0" directory="/var/www/html" fstype="ext3" # Definindo a constraint [root@node1 ~]# pcs -f fs_config constraint colocation add DrbdFS DrbdVolClone INFINITY with-rsc-role=Master [root@node1 ~]# pcs -f fs_config constraint order promote DrbdVolClone then start DrbdFS Adding DrbdVolClone DrbdFS (kind: Mandatory) (Options: first- action=promote then-action=start)
  • 42.
    DRBD – Integrandoo FS /dev/drbd0 ao Cluster Precisamos definir que o Apache deve rodar no mesmo nó onde o FS estiver ativo e que o FS deve ser montado antes do inicio do apache [root@node1 ~]# pcs -f fs_config constraint colocation add httpd DrbdFS INFINITY [root@node1 ~]# pcs -f fs_config constraint order DrbdFS then httpd Adding DrbdFS httpd (kind: Mandatory) (Options: first- action=start then-action=start)
  • 43.
    DRBD – Integrandoo FS /dev/drbd0 ao Cluster Verificando os recursos e constraint da CIB fs_config [root@node1 ~]# pcs -f fs_config constraint Location Constraints: Resource: httpd Enabled on: node1 (score:INFINITY) (role: Started) Ordering Constraints: promote DrbdVolClone then start DrbdFS (kind:Mandatory) start DrbdFS then start httpd (kind:Mandatory) Colocation Constraints: VirtualIP with httpd (score:INFINITY) DrbdFS with DrbdVolClone (score:INFINITY) (with-rsc- role:Master) httpd with DrbdFS (score:INFINITY)
  • 44.
    DRBD – Integrandoo FS /dev/drbd0 ao Cluster Verificando os recursos e constraint da CIB fs_config [root@node1 ~]# pcs -f fs_config resource show VirtualIP (ocf::heartbeat:IPaddr2): Started node1 httpd (ocf::heartbeat:apache): Started node1 Master/Slave Set: DrbdVolClone [DrbdVol] Masters: [ node2 ] Slaves: [ node1 ] DrbdFS (ocf::heartbeat:Filesystem): Stopped Se tudo estiver certo, podemos fazer o push das configurações [root@node1 ~]# pcs cluster cib-push fs_config CIB updated
  • 45.
    DRBD – Integrandoo FS /dev/drbd0 ao Cluster Verificando o status [root@node1 ~]# pcs status 2 Nodes configured 5 Resources configured Online: [ node1 node2 ] Full list of resources: VirtualIP (ocf::heartbeat:IPaddr2): Started node1 httpd (ocf::heartbeat:apache): Started node1 Master/Slave Set: DrbdVolClone [DrbdVol] Masters: [ node1 ] Slaves: [ node2 ] DrbdFS (ocf::heartbeat:Filesystem): Started node1
  • 46.
    Testando ➔ Coloque o nó1 em standby e observe que o a pasa /var/www/html está vazia. No nó 2 ela será montada com todo o conteúdo apresentado no nó 1 antes do standby. [root@node1 ~]# pcs cluster standby node1 ➔ Faça com que o nó 1 reassuma. Verifique o status do device /dev/drbd0 e dos dados na pasta /var/www/html [root@node1 ~]# pcs cluster unstandby node1
  • 47.
    Sistemas Distribuídos Alta Disponibilidadeutilizando Heartbeat + drbd Frederico Madeira LPIC­1, LPIC­2, CCNA fred@madeira.eng.br www.madeira.eng.br