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