Universidade Federal da Bahia
Departamento de Ciência da Computação Curso de extensão em Administração de
Serviços GNU/Linux
Alta disponibilidade em servidores
Alta disponibilidade em servidores
GNU/Linux GNU/Linux Italo Valcy Italo Valcy italo@dcc.ufba.br italo@dcc.ufba.br
Aspectos abordados
✔ O que é um clusterO que é um cluster✔ Tipos de clusterTipos de cluster
✔ Alta disponibilidadeAlta disponibilidade ✔ GNU/Linux HAGNU/Linux HA
✔ Estudo de CasoEstudo de Caso ✔ ReferênciasReferências
O que é um cluster
✔ Conjunto de servidores agrupados com intenção de ganho Conjunto de servidores agrupados com intenção de ganho
de desempenho, disponibilidade, ou facilidade no
de desempenho, disponibilidade, ou facilidade no
gerenciamento.
gerenciamento.
✔ Normalmente um cluster é composto por máquinas Normalmente um cluster é composto por máquinas
convencionais ligadas em uma rede de alto desempenho e
convencionais ligadas em uma rede de alto desempenho e
fornecendo a abstração ao usuário de uma única máquina
fornecendo a abstração ao usuário de uma única máquina
(BUYYA, 1999).
(BUYYA, 1999). ✔Cluster Cluster vsvs Grids Grids
Tipos de cluster
✔ Alta disponibilidadeAlta disponibilidade
✔ Balanceamento de cargaBalanceamento de carga
Alta disponibilidade
✔ Intenção de manter a maior disponibilidade possível dos Intenção de manter a maior disponibilidade possível dos
serviços, através da duplicação de servidores, ambientes de
serviços, através da duplicação de servidores, ambientes de
rede, discos, etc.
rede, discos, etc.
✔ Disponibilidade xDisponibilidade x Downtime Downtime
✔ Sistema de monitoração interno no cluster garante que, no Sistema de monitoração interno no cluster garante que, no
caso de falha do servidor ativo, o sistema em standby
caso de falha do servidor ativo, o sistema em standby
assumirá os serviços automaticamente e
assumirá os serviços automaticamente e
“instantaneamente”.
Alta dispinibilidade
Requisitos:
Requisitos:
✔ Redundância de estruturaRedundância de estrutura
✔ Camada de software de monitoraçãoCamada de software de monitoração ✔ Mecanismos de sincroniaMecanismos de sincronia
Alta disponibilidade
Pontos a refletir:
Pontos a refletir:
✔ Cluster Cluster versusversus hardware tolerante à hardware tolerante à
falhas
falhas
Alta disponibilidade
Dificuldades:
Dificuldades:
✔ Implementação de sistema de failover completo, que possa Implementação de sistema de failover completo, que possa
identificar todos tipos de falha (single failure points) e
identificar todos tipos de falha (single failure points) e
eliminá-los.
eliminá-los.
✔ Failover de ação rápida;Failover de ação rápida;
✔ Manter a consistência de dados entre todos os nodes.Manter a consistência de dados entre todos os nodes. ✔ Integridade de dados em caso de failover, e no failback Integridade de dados em caso de failover, e no failback
para o node principal.
GNU/Linux HA
✔ HeartbeatHeartbeat ✔ MonMon
GNU/Linux HA
Heartbeat:
Heartbeat:
✔ Núcleo do ambiente de alta Núcleo do ambiente de alta
disponibilidade
disponibilidade
✔ Troca de mensagens entre os Troca de mensagens entre os
servidores
servidores
✔ Gerenciamento de um IP Gerenciamento de um IP
compartilhado entre os nodos.
GNU/Linux HA
Heartbeat:
GNU/Linux HA
MON:
MON:
✔ O Mon tem como principal finalidade a de O Mon tem como principal finalidade a de
ser um monitor do sistema. Quando ele ser um monitor do sistema. Quando ele
detecta uma falha é possível enviar um detecta uma falha é possível enviar um
e-mail e até mesmo fazer com que ele acione mail e até mesmo fazer com que ele acione
o Heartbeat para que ele tome alguma o Heartbeat para que ele tome alguma
decisão para a solução do problema. decisão para a solução do problema.
GNU/Linux HA
DRBD:
DRBD:
✔ CConsiste em um módulo para o kernel onsiste em um módulo para o kernel
Linux que faz o espelhamento dos dados Linux que faz o espelhamento dos dados
de um dispositivo de bloco. de um dispositivo de bloco.
✔ Cada dispositivo de bloco envolvido na Cada dispositivo de bloco envolvido na
configuração do DRBD tem um estado, que configuração do DRBD tem um estado, que
pode ser primário ou secundário. pode ser primário ou secundário.
Estudo de caso
✔ Implemtação de um serviço de Implemtação de um serviço de
diretórios para autenticação de
diretórios para autenticação de
usuários.
usuários.
✔ Implementar estratégias para alta Implementar estratégias para alta
disponibilidade para este serviço
disponibilidade para este serviço
utilizando GNU/Linux.
Estudo de caso
Softwares utilizados: Softwares utilizados: ✔ OpenLDAPOpenLDAP ✔ HeartbeatHeartbeat ✔ MonMon ✔ DRBDDRBDEstudo de caso
Topologia do serviço:
Estudo de Caso – Instalação do
OpenLDAP
✔ No debian: No debian:
aptitude install slapd aptitude install slapd
✔ Arquivo de configuração:Arquivo de configuração:
/etc/ldap/slapd.conf /etc/ldap/slapd.conf
✔ Ferramentas de gerenciamento:Ferramentas de gerenciamento:
aptitude install ldap-utils aptitude install ldap-utils
aptitude show phpldapadmin aptitude show phpldapadmin
Estudo de Caso – Configuração do
OpenLDAP
✔ Nome do domínio: grupoX.orgNome do domínio: grupoX.org ✔ Backend de DB: HDBBackend de DB: HDB
✔ Allow LDAPv2: SimAllow LDAPv2: Sim ✔ Iniciar o serviço:Iniciar o serviço:
/etc/init.d/slapd start/etc/init.d/slapd start
✔ Consulta à base:Consulta à base:
ldapsearch -x -b ldapsearch -x -b
dc=grupo1,dc=org -h localhost dc=grupo1,dc=org -h localhost
Estudo de Caso – Heartbeat
✔ Instalação:Instalação:
aptitude install heartbeataptitude install heartbeat
✔ Principais arquivos de configuração:Principais arquivos de configuração:
- ha.cf: configuração do heartbeat
- ha.cf: configuração do heartbeat
- authkeys: chaves para autenticação
- authkeys: chaves para autenticação
dos membros do cluster
dos membros do cluster
- haresources: define os recursos que
- haresources: define os recursos que
estarão sob controle do heartbeat
Estudo de Caso - Heartbeat
/etc/ha.d/ha.cf /etc/ha.d/ha.cf
✔ logfacilitylogfacility - Utiliza o syslog para gravar os logs - Utiliza o syslog para gravar os logs utilizando a opção daemon.
utilizando a opção daemon.
Ex: Ex: logfacility nonelogfacility none
✔ ucastucast – Configura o heartbeat para usar uma – Configura o heartbeat para usar uma comunicação unicast via UDP.
comunicação unicast via UDP.
Sintaxe: Sintaxe: ucast dev peer-ip-addressucast dev peer-ip-address
Ex: Ex: ucast eth0 10.1.151.102ucast eth0 10.1.151.102
✔ nodenode - Indica os nodos do cluster (sendo o primeiro - Indica os nodos do cluster (sendo o primeiro ele mesmo). Exemplo:
ele mesmo). Exemplo:
node s151pc01node s151pc01
Estudo de Caso - Heartbeat
/etc/ha.d/ha.cf /etc/ha.d/ha.cf
✔ keepalivekeepalive – Tempo entre as 'batidas de coração' – Tempo entre as 'batidas de coração'
Ex: Ex: keepalive 2 # 2 segundoskeepalive 2 # 2 segundos
✔ deadtimedeadtime - Tempo que indica se um nodo está - Tempo que indica se um nodo está morto.
morto.
Ex: Ex: deadtime 10 # 10 segundosdeadtime 10 # 10 segundos
✔ warntimewarntime - Tempo de espera antes de emitir o - Tempo de espera antes de emitir o aviso de heartbeat atrasado. Exemplo:
aviso de heartbeat atrasado. Exemplo:
warntime 10 # 10 segundoswarntime 10 # 10 segundos
✔ initdeadinitdead - Tempo de espera após reinicialização - Tempo de espera após reinicialização
do sistema
do sistema
Estudo de Caso - Heartbeat
/etc/ha.d/ha.cf /etc/ha.d/ha.cf
✔ auto_failbackauto_failback - Faz com que a máquina retorne - Faz com que a máquina retorne ou não os serviços.
ou não os serviços.
Estudo de Caso - Heartbeat
/etc/ha.d/ha.cf (master) /etc/ha.d/ha.cf (master) logfacility daemon logfacility daemon ucast eth0 10.1.151.102 ucast eth0 10.1.151.102 node s151pc01 node s151pc01 node s151pc02 node s151pc02 keepalive 2 keepalive 2 deadtime 10 deadtime 10 warntime 10 warntime 10 initdead 60 initdead 60 auto_failback on auto_failback onEstudo de Caso - Heartbeat
/etc/ha.d/ha.cf (slave) /etc/ha.d/ha.cf (slave) logfacility daemon logfacility daemon ucast eth0 10.1.151.101 ucast eth0 10.1.151.101 node s151pc02 node s151pc02 node s151pc01 node s151pc01 keepalive 2 keepalive 2 deadtime 10 deadtime 10 warntime 10 warntime 10 initdead 60 initdead 60 auto_failback on auto_failback onEstudo de Caso - Heartbeat
cat /etc/ha.d/authkeys cat /etc/ha.d/authkeys auth 1 auth 1 1 md5 SenhaEntreNodes-HAOpenLdap 1 md5 SenhaEntreNodes-HAOpenLdap chmod 600 /etc/ha.d/authkeys chmod 600 /etc/ha.d/authkeysEstudo de Caso - Heartbeat
/etc/ha.d/haresources /etc/ha.d/haresources s151pc01 Ipaddr::10.1.151.201/16/eth0:0 \ s151pc01 Ipaddr::10.1.151.201/16/eth0:0 \ MailTo::root@localhost::Problema-ClusterMailTo::root@localhost::Problema-Cluster slapd slapd Onde:
Onde:
s151pc01
s151pc01 - É o nome da máquina master - É o nome da máquina master
10.1.151.201
10.1.151.201 - É o endereço IP virtual do Cluster - É o endereço IP virtual do Cluster
MailTo
MailTo - Envia um email para o usuário que você - Envia um email para o usuário que você configurar informando quando o cluster tem algum
configurar informando quando o cluster tem algum
problema de reinicialização
problema de reinicialização
slapd
Estudo de Caso - Heartbeat
Modificações necessárias:
Modificações necessárias:
✔ Inicialização do slapd:Inicialização do slapd:
update-rc.d -f slapd removeupdate-rc.d -f slapd remove
✔ Recursos administrados pelo Recursos administrados pelo
heartbeat
heartbeat
Estudo de Caso - Mon
✔ Instalação (apenas no master):Instalação (apenas no master):
aptitude install monaptitude install mon
✔ Arquivo de configuração:Arquivo de configuração:
Estudo de Caso - Mon
/etc/mon/mon.cf – opções globais:
/etc/mon/mon.cf – opções globais:
alertdir = /usr/lib/mon/alert.d alertdir = /usr/lib/mon/alert.d mondir = /usr/lib/mon/mon.d mondir = /usr/lib/mon/mon.d randstart = 60s randstart = 60s alertdir
alertdir - determina o caminho completo para o - determina o caminho completo para o diretório que contém os scripts de alerta.
diretório que contém os scripts de alerta.
mondir
mondir - especifica o caminho completo para o - especifica o caminho completo para o diretório que contém os scripts de monitoramento
diretório que contém os scripts de monitoramento
randstart –
randstart – faz com que cada monitor seja iniciado faz com que cada monitor seja iniciado em um momento aleatório que varia de 0 à
em um momento aleatório que varia de 0 à
randstart.
Estudo de Caso - Mon
/etc/mon/mon.cf – grupos monitorados:
/etc/mon/mon.cf – grupos monitorados:
hostgroup ldapserver
hostgroup ldapserver
10.1.151.201
10.1.151.201
É possível definir mais de um grupo. Para isso
É possível definir mais de um grupo. Para isso
deve-se deve-separar os grupos por linhas em branco.
Estudo de Caso - Mon
/etc/mon/mon.cf – monitores: /etc/mon/mon.cf – monitores: watch ldapserver watch ldapserverservice ldapservice ldap
interval 20sinterval 20s
monitor ldap.monitor -basedn dc=grupo1,dc=org -filter \monitor ldap.monitor -basedn dc=grupo1,dc=org -filter \
cn=admin -attribute objectClass -value organizationalRolecn=admin -attribute objectClass -value organizationalRole
periodperiod
numalerts 3numalerts 3
alert heartbeat.alertalert heartbeat.alert
alert mail.alert -S "Problema com servidor OpenLdap" \ alert mail.alert -S "Problema com servidor OpenLdap" \ administrador1@dominio.com
administrador1@dominio.com administrador2@dominio.comadministrador2@dominio.com
upalert heartbeat.alertupalert heartbeat.alert
upalert mail.alert -S "Servidor OpenLdap esta ok" \upalert mail.alert -S "Servidor OpenLdap esta ok" \
Estudo de Caso - Mon
/etc/mon/mon.cf – alerts (/usr/lib/mon/alert.d):
/etc/mon/mon.cf – alerts (/usr/lib/mon/alert.d):
#!/usr/bin/perl #!/usr/bin/perl use Getopt::Std; use Getopt::Std; getopts ("s:g:h:t:l:u"); getopts ("s:g:h:t:l:u"); if($opt_u) if($opt_u) { {
# This alert was sent because slapd was restoredy# This alert was sent because slapd was restoredy
system "sudo /etc/init.d/heartbeat start"system "sudo /etc/init.d/heartbeat start" } } else else { {
# slapd is down# slapd is down
system "sudo /etc/init.d/heartbeat stop"system "sudo /etc/init.d/heartbeat stop" }
Estudo de Caso - Mon
✔ Dar permissão ao mon de parar o heartbeat Dar permissão ao mon de parar o heartbeat
(sudoers): (sudoers):
mon ALL= NOPASSWD: /etc/init.d/heartbeatmon ALL= NOPASSWD: /etc/init.d/heartbeat
✔ Iniciar o serviço:Iniciar o serviço:
Estudo de Caso - Drbd
✔ Instalação no debian:Instalação no debian:
aptitude install drbd8-modules-`uname -r` aptitude install drbd8-modules-`uname -r` drbd8-utils
drbd8-utils
✔ Configuração:Configuração:
Estudo de Caso - Drbd
✔ /etc/drbd.conf:/etc/drbd.conf:global { global {
usage-count no; usage-count no; } } common { common { protocol C;protocol C; } } resource r0 { resource r0 {
# some options# some options }
}
resource r1 { resource r1 {
# some options# some options }
Estudo de Caso - Drbd
✔ /etc/drbd.conf:/etc/drbd.conf: resource r0 { resource r0 { on s151pc01 {on s151pc01 {device /dev/drbd0;device /dev/drbd0;
disk /dev/sda7;disk /dev/sda7;
address 10.1.151.101:7789;address 10.1.151.101:7789;
meta-disk internal;meta-disk internal;
}}
on s151pc02 {on s151pc02 {
device /dev/drbd0;device /dev/drbd0;
disk /dev/sda5;disk /dev/sda5;
address 10.1.151.102:7789;address 10.1.151.102:7789;
meta-disk internal;meta-disk internal;
}} } }
Estudo de Caso - Drbd
Exemplo de haresources: Exemplo de haresources: s151pc01 IPaddr::10.1.151.201/16/eth0:0 \ s151pc01 IPaddr::10.1.151.201/16/eth0:0 \ drbddisk::drbd-resource-0 \ drbddisk::drbd-resource-0 \ Filesystem::/dev/drbd0::/mnt/algo::reiserfs \ Filesystem::/dev/drbd0::/mnt/algo::reiserfs \ MailTo::root@localhost::Problema-Cluster \ MailTo::root@localhost::Problema-Cluster \ slapd slapdDúvidas
???
Referências
✔ PITANGA, M. Computação em Cluster. 1. ed. Rio de Janeiro: Brasport, 2003.PITANGA, M. Computação em Cluster. 1. ed. Rio de Janeiro: Brasport, 2003. ✔ BUYYA, R. High Performance Cluster Computing: Programming and BUYYA, R. High Performance Cluster Computing: Programming and
Applications. New Jersey - USA: Prentice Hall, 1999. ISBN 0-13-013785-5. Applications. New Jersey - USA: Prentice Hall, 1999. ISBN 0-13-013785-5.
✔ http://www.linuxjournal.com/article/3247http://www.linuxjournal.com/article/3247 ✔ http://ha-mc.org/?q=node/15http://ha-mc.org/?q=node/15 ✔ http://www.linux-ha.org/Heartbeathttp://www.linux-ha.org/Heartbeat ✔ http://mon.wiki.kernel.org/index.php/Main_Pagehttp://mon.wiki.kernel.org/index.php/Main_Page ✔ http://mon.wiki.kernel.org/index.php/Documentationhttp://mon.wiki.kernel.org/index.php/Documentation ✔ http://www.drbd.org/users-guide-emb/s-replication-protocols.htmlhttp://www.drbd.org/users-guide-emb/s-replication-protocols.html ✔