Admirável Mundo Novo: Tudo Sobre Asterisk, OpenSER, Linux e Tecnologias de Voz sobre IP: junho 2008




Muito Bem Vindo

Prezado Leitor, a proposta desse Blog é compartilhar conhecimento com as pessoas que trabalham com Linux, Asterisk, OpenSER, e com tecnologia de voz sobre a rede IP em geral, através de tutoriais, dicas, howto, notícias entre outros assuntos.

Atente para termo de uso do conteúdo do blog no rodapé da página.

segunda-feira, 30 de junho de 2008

Apresentando o Linux HA



Apresentando o HA


A sigla HA é contração da expressão High Availability do inglês, que significa, em nosso velho português, Alta Disponibilidade. Como todo sistema em produção precisa de alta disponibilidade para seus usuários nas pontas, para os sistemas de voz sobre IP não poderia ser diferente, e menos ainda para o Asterisk e o OpenSER.


O projeto Linux em alta disponibilidade, simplesmente Linux-HA, foi um dos primeiros que surgiu no mundo Linux para resolver o problema de alta disponibilidade no ambiente Linux, e por isso, é também o mais maduro. Por isso, ele foi escolhido por mim como o mecanismo para implementação de alta disponibilidade no Asterisk e OpenSER. Isso justifica meu esforço para traduzir sua documentação para o português e contribuir com a grande comunidade Linux brasileira e, talvez até, com a comunidade de língua portuguesa.


O Linux HA é muito usado na implantação de sites Web, servidores de correios eletrônicos, servidor de arquivo, entre muitos outros. É bem provável que esse howto que você está lendo, esteja hospeda em um cluster que usa o HA. O conjunto de software do projeto Linux HA recebe o nome do seu protocolo fundamental, o Heartbeat.


Heartbeat é a junção das duas palavras inglesas heart + beat, que numa primeira tradução para o português seria algo do tipo batida do coração, ou pulsação do coração ou ainda batimentos do coração. Ora, se essa junção quer expressar a idéia de algo que está com vida, logo para mim a palavra "heartbeat" expressa a idéia de algo com sinal de vida ou ainda alguma coisa do tipo hei, estou vivo.


Então, na minha tradução a palavra "heartbeat" quer dizer: sinal de vida. Assim uma máquina ativa que fornecendo serviço aos usuários, fica de tempos em tempos dizendo à(s) máquina(s) que está(ão) de prontidão: Eu estou aqui. Da mesma forma, a(s) máquina(s) em prontidão faz o mesmo com a máquina que está ativa. Isso resume na essência o protocolo heartbeat.


Esse howto apresentado aqui no meu blog é uma versão feita por mim do original em inglês, disponível no site do projeto http://www.linux-ha.org. Os créditos vão para o pessoal do projeto Linux High Availability, que viabilizaram um projeto de tamanha monta, especialmente a pessoa do Alan Robertson (alanr@unix.sh). Coube a mim, tão somente, o esforço de traduzi-lo para o português, já que, para mim, a Internet é um deserto no que diz respeito a documentação técnica em português se comparado ao que existe em inglês. D a minha pequenina cota de contribuição nesse terreno.


Contribuições são muito bem vindas, notadamente, em algum ponto que não tenha compreendido corretamente.


Então, boa leitura ao howto.


Cordialmente,

Cléviton Mendes de Araújo




PS.:
Em tempo ainda, hoje 18/07/08, descobri, fazendo uma consulta ao Google, que esse howto tem também uma versão traduzida por
Mauro Alexandre Nogueira (Mandcap), que pode ser acessado em http://roberto.dnsalias.com:8880/doc/heartbeat-1.0.3/DandoInicio.txt. Como eu fiz os meus estudos sobre o heartbeat por volta de 1 ano e meio atrás, muito provavelmente, nobre Mauro, o seu esforço não pareceu nas pesquisas que fiz ao Google por aqueles dias sobre documentação do heartbeat especialmente em português, daí a explicação de esforços reduntantes. De qualquer forma, quem ganha com isso é a comunidade Linux de língua portuguesa, que pode tomar por base as duas fontes para sugerir melhoramentos no howTo sobre Linux-HA, em português.





> Familiarizando-se Com o Heartbeat ...




Recurso de Alta Disponibilidade



Recurso de Alta Disponibilidade


Um recurso é uma unidade básica de alta-disponibilidade. É um serviço ou facilidade que é tornado ficar altamente-disponível pelo gerenciador de recurso do cluster de alta-disponibilidade.


Um recurso é uma abstração que pode ser um de muitos tipos diferentes. Ele pode ser alguma coisa muito concreta como um volume de disco, ou um leitor badge, ou ele pode ser mais abstrato ainda como um endereço IP, ou um conjunto de regras de firewall, ou um serviço de software como um servidor web, ou um servidor banco de dados.


As operações básicas que os recursos têm que suportar inclui:


· start: inicia ou ganha o controle do recurso.
· stop: termina ou passa o controle do recurso.
· status: determina se o recurso está startado, ou stopped.
· monitor: determina em mais profundidade se o recurso está operando corretamente.


(Note que recursos estilo R1 precisam suportar status, e recursos estilo R2 precisam suportar a operação monitor).


O gerenciador de recurso de cluster de Alta-Disponibilidade tenta assegurar que todo recurso esteja disponível aos usuários assegurando que ele está rodando em algum lugar no cluster.


O gerenciador de cluster Heartbeat R1, (e muitos outros gerenciadores de recurso de cluster) agrupam os recursos junto em grupos, chamados ResourceGroups. Neste caso, cada grupo é então disparado, interrompido (parado) ou movido como um todo pelo gerenciador de recurso do cluster.




Endereço de Serviço no HA



Endereço de Serviço (Service Address)


Um endereço de serviço é um endereço que é gerenciado pelo sistema HA, e é movido sempre em torno dos serviços correspondentes que estão rodando. Tais endereços de serviços são os endereços pelos quais os clientes e usuários dos serviços do HA acessam estes serviços do HA. Eles são tipicamente estocados no DNS com nomes bem conhecidos como "www.ibm.com" ou similar.


É importante que um endereço de serviço não seja gerenciado pelo seu sistema operacional, e que ele seja gerenciado unicamente pelo seu software HA. Se você tentar e obtiver um endereço administrativo para o sistema HA gerenciar, isso causará problemas, porque você pode confundir o sistema HA, o sistema operacional e o sistema HA vão lutar pelo controle deste endereço.


No atual momento, com o script padrão de recurso IPaddr, isso significa que ele precisa ser um alias em uma interface, não o principal (ou o primeiro) endereço IP nesta interface. Cada interface precisa ter um endereço administrativo nela, mas ela pode ter tantos endereços de serviços quantos você precisar. Assim, para n interfaces HA, você tipicamente vai acabar tendo pelo menos 2n endereços IP´s.


O mais recente agente de recurso IPaddr2 (somente no Linux) é capaz de criar uma interface completamente – mesmo se nenhum endereço base já tenha sido estabelecido. Isso muda a equação acima de sorte que para n interfaces HA, você tipicamente vai acabar tendo pelo menos n+1 endereços IP – porque quase todo servidor vai requerer pelo menos um endereço administrativo, de sorte que os administradores do sistema podem logar mesmo quando o servidor não é o ativo.


Note que existe um limite de aproximadamente 100 endereços IP´s em cada interface gerenciada pelo IPaddr, mão não há tal limite naqueles gerenciados pelo IPaddr2.





Grupo de Recurso no HA



Grupo de Recurso no HA


O Heartbeat agrupa os recursos em grupos no arquivo haresources. Cada recurso no grupo então é sempre dado partida na mesma máquina.


O Heartbeat sempre dá partida dos recursos da esquerda para direita no grupo, e pára-os na ordem inversa – da direita para a esquerda.




Configuração Ativa/Ativa do HA


Configuração Ativa/Ativa do HA


Em um configuração ativa/ativa, um nó fica ativo rodando um ou mais ResourceGroups, e o outro nó fica também rodando um ou mais ResourceGroups.


A desvantagem desta configuração é que a qualidade do serviço pode ser degradada quando uma máquina roda ambos os serviços. Adicionalmente, os recursos são movidos não somente quando as máquinas falham, mas quando elas retornam ao serviço, resultando em duas vezes mais transições de serviços do que as configurações ativo/passivo.


A vantagem desta configuração é que ambos os Nós ficam fornecendo serviço útil, e é geralmente visto como um uso mais eficiente dos recursos do que uma configuração ativa/passiva.


Para instruir o Heartbeat a operar no modo ativo/ativo para clusters da Release 1 (sem-CRM), simplesmente certifique-se de configurar a diretiva auto_failback no seu arquivo ha.cf igual a essa:


auto_failback on


Isso vai assegurar que ambas as máquinas vai rodar os serviços em conformidade com a informação do host preferido no arquivo haresources.


Tipicamente, cada ResourceGroup (grupo de recurso) no arquivo haresources vai necessitar incluir pelo menos um ServiceAddress (endereço de serviço) nele.


Na release 2, simplesmente crie dois grupos, e o Heartbeat vai naturalmente segui-los no arranjo ativo/ativo. A diretiva auto_failback somente se aplica as configurações de haresources estilo R1, e não deve ser aplicado nas configurações R2 (baseado no CRM).


O atributo correspondente para inserir no CIB é o atributo resource_stickiness.




Veja Também

Configuração Ativa/Passiva do HA



Configuração Ativa/ Passiva do HA



Configuração Ativa/ Passiva do HA


Uma configuração ativa/ passiva é a configuração mais básica do HA. Neste tipo de configuração, um fica ativo rodando um ResourceGroup (grupo de recurso), e o outro é passivo, simplesmente espera o lado ativo falhar.


As vantagens desta configuração são que a recuperação de falhas não causa degradação do serviço, já que a máquina passiva é similar à máquina ativa. Além disso, os serviços somente são restartados quando as máquinas falham, o que tipicamente resulta em metade das muitas interrupções de serviços se comparado com uma configuração ativa/ ativa.


A desvantagem desta configuração é que a máquina passiva não fica provendo qualquer tipo de serviço útil, e é, às vezes, visto como um uso ineficiente dos recursos.


Para instruir o Heartbeat a operar no modo ativo/passivo, simplesmente certifique-se de configurar a diretiva auto_failback no seu arquivo ha.cf igual isso:


auto_failback off



Se você desejar recuperar manualmente os recursos em falha das máquinas que falharam, então configure seu sistema como um arranjo ativo/passivo, e usar o comando hb_standby para recuperar os recursos para suas máquinas preferidas sob o controle do administrador.




Veja Também

Configuração Ativo/Ativo do HA




Apêndice A - Construção de Cabo Crossover Ethernet



Apêndice A - Construção de Cabo Crossover Ethernet


O diagrama do seu cabo deve obedecer ao seguinte esquema de pinagem:


Conector A

Conector B

Pino #

Pino #

1

3

2

6

3

1

4

2

5

7

6

8

7

4

8

5



(c) 2003 Rudy Pawul rpawul (at) iso-ne (dot) com



Veja Também


Configuração Ativa/Ativa, Configuração Ativa/Passiva, Recurso de Alta Disponibilidade, Endereço de Serviço e Grupo de Recurso.





Dando partida ao Heartbeat e Testando-o


Dando partida ao Heartbeat e Testando-o


Usando Red Hat, ou outras distribuições que usa os arquivos de startup /etc/init.d, simplesmente digite /etc/init.d/heartbeat start em ambos os s. Eu recomendaria começar no sistema master (no nosso exemplo linuxha1) primeiro.


Se você desejar que o Heartbeat rode no startup, o que fazer vai diferir na sua distribuição. Você pode necessitar colocar links no script de startup nos diretórios apropriados de nível de init, mas as versões do RPM vai fazer isso para você. Eu faço o start do Heartbeat em sua seqüência de prioridade padrão (75, que significa que ele starta depois dos serviços 74 e inferiores e antes dos serviços com prioridade 76-99), termina em sua seqüência de prioridade padrão (05), e somente cuida sobre o 0(halt), 6(reboot), 3(text-only), 5(X) níveis de execução.


Assim, se eu tivesse de fazer isso na mão, eu precisaria digitar na seqüência (como root, é claro):


cd /etc/rc.d/rc0.d ; ln -s ../init.d/heartbeat K05heartbeat

cd /etc/rc.d/rc3.d ; ln -s ../init.d/heartbeat S75heartbeat

cd /etc/rc.d/rc5.d ; ln -s ../init.d/heartbeat S75heartbeat

cd /etc/rc.d/rc6.d ; ln -s ../init.d/heartbeat K05heartbeat


A última vez que Eu rodei o Slackware, não havia o diretório /etc/rc.d/init.d (pode ter mudado por agora) e fazer a mesma coisa, Eu colocaria no diretório /etc/rc.d/rc.local:


/etc/init.d/heartbeat start


***Isso assume que você copiou o arquivo ha.rc para /etc/ha.d/heartbeat. Se você não conseguir encontrar /etc/rc.d/init.d na sua distribuição e você está inseguro de como processar o start, você pode usar o método rc.local. Mas você está no seu domínio para fazer o shutdown, eu apenas não me lembrava...


Nota: Se você usa a função watchdog, você vai precisar carregar seu módulo no bootup também. Você pode colocar o comando seguinte na final do arquivo /etc/rc.d/rc.sysinit:


/sbin/insmod softdog


Para o método rc.local, apenas coloque a mesma linha igual acima onde você starta o Heartbeat.


Uma vez você tenha startado o Heartbeat, dê uma olhada no seu arquivo de log (o padrão é /var/log/ha-log) antes de fazer testes com ele. Se tudo estiver simpático, o log do serviço do dono (linuxha1 em nosso exemplo) deve parece alguma coisa igual a isso:


heartbeat: 2003/02/10_13:52:22 info: Neither logfile nor logfacility found.

heartbeat: 2003/02/10_13:52:22 info: Logging defaulting to /var/log/ha-log

heartbeat: 2003/02/10_13:52:22 info: **************************

heartbeat: 2003/02/10_13:52:22 info: Configuration validated. Starting heartbeat 0.4.9f

heartbeat: 2003/02/10_13:52:22 info: nice_failback is in effect.

heartbeat: 2003/02/10_13:52:22 info: heartbeat: version 0.4.9f

heartbeat: 2003/02/10_13:52:22 info: Heartbeat generation: 17

heartbeat: 2003/02/10_13:52:22 info: Starting serial heartbeat on tty /dev/ttyS0 (19200 baud)

heartbeat: 2003/02/10_13:52:22 info: UDP Broadcast heartbeat started on port 694 (694) interface eth1

heartbeat: 2003/02/10_13:52:23 info: pid 28140 locked in memory.

heartbeat: 2003/02/10_13:52:23 info: pid 28137 locked in memory.

heartbeat: 2003/02/10_13:52:23 info: pid 28139 locked in memory.

heartbeat: 2003/02/10_13:52:23 notice: Using watchdog device: /dev/watchdog

heartbeat: 2003/02/10_13:52:23 info: pid 28141 locked in memory.

heartbeat: 2003/02/10_13:52:23 info: Local status now set to: 'up'

heartbeat: 2003/02/10_13:52:23 info: pid 28138 locked in memory.

heartbeat: 2003/02/10_13:52:23 info: pid 28134 locked in memory.

heartbeat: 2003/02/10_13:52:25 info: Link linuxha1.linux-ha.org:eth1 up.

heartbeat: 2003/02/10_13:53:23 WARN: node linuxha2.linux-ha.org: is dead

heartbeat: 2003/02/10_13:53:23 info: Dead node linuxha2.linux-ha.org held no resources.

heartbeat: 2003/02/10_13:53:23 info: Resources being acquired from linuxha2.linux-ha.org.

heartbeat: 2003/02/10_13:53:23 info: Local status now set to: 'active'

heartbeat: 2003/02/10_13:53:23 info: Running /etc/ha.d/rc.d/status status

heartbeat: 2003/02/10_13:53:23 info: /usr/lib/heartbeat/mach_down: nice_failback: acquiring foreign resources

heartbeat: 2003/02/10_13:53:23 info: mach_down takeover complete.

heartbeat: 2003/02/10_13:53:23 info: mach_down takeover complete for node linuxha2.linux-ha.org.

heartbeat: 2003/02/10_13:53:23 info: Acquiring resource group: linuxha1.linux-ha.org 192.168.85.3 datadisk::drbd0 datadisk::drbd1 mirror

heartbeat: 2003/02/10_13:53:23 info: Running /etc/ha.d/resource.d/IPaddr 192.168.85.3 start

heartbeat: 2003/02/10_13:53:23 info: /sbin/ifconfig eth0:0 192.168.85.3 netmask 255.255.255.0 broadcast 192.168.85.255

heartbeat: 2003/02/10_13:53:23 info: Sending Gratuitous Arp for 192.168.85.3 on eth0:0 [eth0]

heartbeat: 2003/02/10_13:53:23 /usr/lib/heartbeat/send_arp eth0 192.168.85.3 00304823BD48 192.168.85.3 ffffffffffff

heartbeat: 2003/02/10_13:53:24 info: Running /etc/ha.d/resource.d/datadisk drbd0 start

heartbeat: 2003/02/10_13:53:24 info: Running /etc/ha.d/resource.d/datadisk drbd1 start

heartbeat: 2003/02/10_13:53:25 info: Running /etc/ha.d/resource.d/mirror start

heartbeat: 2003/02/10_13:53:25 /usr/lib/heartbeat/send_arp eth0 192.168.85.3 00304823BD48 192.168.85.3 ffffffffffff

heartbeat: 2003/02/10_13:53:26 info: Resource acquisition completed.

heartbeat: 2003/02/10_13:53:28 /usr/lib/heartbeat/send_arp eth0 192.168.85.3 00304823BD48 192.168.85.3 ffffffffffff

heartbeat: 2003/02/10_13:53:30 /usr/lib/heartbeat/send_arp eth0 192.168.85.3 00304823BD48 192.168.85.3 ffffffffffff

heartbeat: 2003/02/10_13:53:32 /usr/lib/heartbeat/send_arp eth0 192.168.85.3 00304823BD48 192.168.85.3 ffffffffffff

heartbeat: 2003/02/10_13:53:33 info: Local Resource acquisition completed. (none)

heartbeat: 2003/02/10_13:53:33 info: local resource transition completed.

heartbeat: 2003/02/10_13:56:30 info: Link linuxha2.linux-ha.org:eth1 up.

heartbeat: 2003/02/10_13:56:30 info: Status update for node linuxha2.linux-ha.org: status up

heartbeat: 2003/02/10_13:56:30 info: Running /etc/ha.d/rc.d/status status

heartbeat: 2003/02/10_13:56:30 info: Status update for node linuxha2.linux-ha.org: status active

heartbeat: 2003/02/10_13:56:30 info: remote resource transition completed.

heartbeat: 2003/02/10_13:56:30 info: Running /etc/ha.d/rc.d/status status

heartbeat: 2003/02/10_13:56:31 info: Link linuxha2.linux-ha.org:/dev/ttyS0 up.


NOTA: Seu log pode diferir dependendo de quando você startou o Heartbeat no linuxha2!!! Eu startei o Heartbeat na máquina linuxha2 @13:56:30...


OK, agora tente pingar seu IP do cluster (192.168.85.3 no exemplo). Se isso funcionar, conecte com o ssh nele e verifique se você está na máquina linuxha1. A seguir, assegure que seus serviços estão vinculados ao endereço .3. Abra o Netscape e digite 192.168.85.3 para a URL. Para o Samba, tente mapear o "\\192.168.85.3\test" assumindo que você definiu um compartilhamento chamado "test". Veja os documentos do Samba para avançar. Como um aparte, contudo, você vai desejar usar o parâmetro "netbios name" para ter seu compartilhamento Samba listado sob o nome do cluster e não sob o hostname do membro do seu cluster!


NOTA: Se você não consegue abrir o serviço do endereço IP correspondente e você tem entradas no ha-log similar a isso:


SIOCSIFADDR: No such device

SIOCSIFFLAGS: No such device

SIOCSIFNETMASK: No such device

SIOCSIFBRDADDR: No such device

SIOCSIFFLAGS: No such device

SIOCADDRT: No such device


· Isso pode significar que você precisa ativar o aliasing IP no seu kernel build. Verifique no arquivo /usr/src/linux/.config por "CONFIG_IP_ALIAS=y" se você não tem isso, você terá a linha "CONFIG_IP_ALIAS is not set". Recompile seu kernel com IP aliasing ativado.


Se isso tudo funcionar, você conseguiu disponibilidade. Agora nos deixe ver se nós temos Alta Disponibilidade.


Desligue o linuxha1. Corte a alimentação, mate o Heartbeat, não importa qual seja o apetite que você tem, mas não arranque apenas os cabos serial e eth1 do heartbeat. Se você fizer assim, você terá os serviços rodando em ambos os nós e quando você re-conecta o heartbeat, um grande caos.... Agora pingue no endereço IP do cluster. Aproximadamente entre 5-10 segundos depois ele deve começar a responder novamente. Dê um Telnet novamente e verifique se você está no linuxha2. Se isso acontecer, porém se levar mais de 30 segundos, alguma coisa está errado.


Se você chegar até esse ponto, está funcionando provavelmente, mas você deve verificar provavelmente tudo no seu heartbeats, também. Primeiro, verifique sua serial heartbeat. Retire o cabo crossover da sua NIC eth1 que você está usando para o seu bcast heartbeat. Aguarde em torno de 10 segundos. Agora, olhe no arquivo /var/log/ha-log na maquina linuxha2 e se certifique que não existe uma linha igual a essa:


1999/08/16_12:40:58 node linuxha1.linux-ha.org: is dead


Se você vê isso, sua serial heartbeat não está funcionando e o seu segundo nó deve está assumindo. Para evitar quaisquer problemas, dê um shutdown no Heartbeat no primeiro nó, então teste seu cabo modem nulo. Execute testes na serial acima novamente.


Se seu log está limpo, beleza. Reconecte o cabo crossover. Uma vez isso esteja funcionado, desconecte o cabo serial, aguarde 10 segundos e verifique o log da máquina linuxha2 novamente. Se estiver limpo, congratulações! Se não estiver, você pode verificar o arquivo /var/log/ha-log e /var/log/ha-debug para mais pistas.





Leia aqui documentos complementares:
http://clevitonmendes.blogspot.com/2008/07/um-exemplo-de-alta-disponibilidade-do_7870.html
http://clevitonmendes.blogspot.com/2008/07/alta-disponibilidade-ao-modo-fonebridge.html




> Apêndice A - Construção de Cabo Crossover Ethernet ...














Creative Commons License
Admirável Mundo Novo: Tudo Sobre Asterisk, OpenSER, Linux e Tecnologias de Voz sobre IP
by Cléviton Mendes de Araújo is licensed under a Creative Commons Atribuição 2.5 Brasil License.