Alta disponibilidade com Debian Lenny + Heartbeat + DRBD8 + OCFS2 + MONIT + LVS

Neste artigo trataremos de como implementar alta disponibilidade tendo como exemplo um servidor web. Dá um pouco de trabalho, mas quando pronto e você testa a sua alta disponibilidade e vê tudo funcionando como você queria, dá um ar de satisfação tremendo.

[ Hits: 131.951 ]

Por: Douglas Q. dos Santos em 21/03/2010 | Blog: http://wiki.douglasqsantos.com.br


Instalação e configuração do DRBD8 e OCFS2



Vamos instalar o drbd8.

# aptitude install drbd8-modules-2.6-686 drbd8-utils ocfs2-tools ocfs2-tools-dev ocfs2console -y

Após instalarmos o nosso drbd vamos carregar os módulos necessários.

# modprobe cn
# modprobe drbd


Vamos ao arquivo de configuração do drbd, este arquivo fica localizado em /etc/drbd.conf.

# vim /etc/drbd.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 debian {
     device     /dev/drbd1; # Nome do dispositivo de DRBD
     disk       /dev/hda11; # Dispositivo de baixo nível utilizado a partição
     address    192.168.0.1:7789;  # IP:porta de conexão
     meta-disk internal; # Armazenamento das informações de dados é feito
                         # dentro do dispositivo de baixo nível.
  }
  on debian2 {
     device   /dev/drbd1;
     disk      /dev/hda11;
     address   192.168.0.2:7789;
     meta-disk internal;
  }
}

Como pode ser visto, o arquivo está todo comentado e de fácil entendimento.

O arquivo pode ser mantido como padrão para configuração de outros servidores com DRBD + OCFS, somente mudando a seguinte parte do arquivo:

  on debian {
     device     /dev/drbd1; # Nome do dispositivo de DRBD
     disk       /dev/hda11; # Dispositivo de baixo nível utilizado
     address    192.168.0.1:7789; # IP:porta de conexão
     meta-disk internal; # Armazenamento das informações de dados é feito
                         # dentro do dispositivo de baixo nível.
  }
  on debian2 {
     device   /dev/drbd1;
    disk      /dev/hda11;
    address   192.168.0.2:7789;
    meta-disk internal;
  }
}

Vamos agora criar os dispositivos do drbd.

Obs.: Se você não criou a partição para os nosso teste, pode fazer isso utilizando o cfdisk para criar a partição hda11. Ex.:

# cfdisk /dev/hda

Escolha o espaço livre e crie uma partição de 2 GB para efetuarmos testes e mande gravar.

Para um ambiente de produção a partição vai depender do volume de dados. Este nosso artigo é somente um exemplo para a um ambiente de produção e análise do que vai ser necessário, por isso utilize Itil e cobit se possível para obter um bom planejamento e execução.

Esses comandos que eu vou passar tem que ser executados nos dois servidores (comando a comando). Vamos zerar o dispositivo para ter certeza que não vai dar nem um problema.

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

Pronto, a nossa partição está zerada.

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

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 é 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:

# watch cat /proc/drbd

Para sair é só pressionar CTRL+C.

Quando terminar a sincronização vai aparecer depois de Primary/Primary em ds:Inconsistent/Inconsistent como:

cs:Connected st:Primary/Primary ds:UpToDate/UpToDate

Pronto, já temos um raid1 via rede.

Então para que o OCFS2?

Como comentei no começo do artigo, esse é um dos sistemas de arquivos que podemos ter dois master escrevendo no sistema de arquivos no DRBD, somente o Primary poderia escrever, então se o primary parasse teríamos que montar a partição do que estava como secondary e usar o comando para mudar ele para primary para daí sim ele poder escrever.

Com o OCFS2 os 2 podem escrever simultaneamente, por isso que eu peguei o servidor de email para tratarmos por que o que me adianta eu ter 2 servidores de email sem as caixas de mensagens iguais? Poderíamos utilizar o rsync para ir atualizando mais, dependendo do volume isso poderia se tornar inviável e teria que ser agendando de tempos em tempos.

Ex.: O seu servidor de email caiu e o secundário fazia o rsync das caixas de entrada a cada 30 minutos e o seu chefe está com uma mensagem para fechar um contrato muito importante nesse servidor que caiu e a mensagem chegou a cerca de 2 minutos, o rsync não sincronizou e o seu chefe vai jogar a culpa em quem? E pior, deu pau o HD desse servidor, e agora?

Em uma empresa que recebe 100 emails por dia isso é um pequeno erro.

Mas em uma empresa que recebe cerca de 100 mil emails por dia ou mais, isso seria uma catástrofe e a sua cabeça iria rolar. Para não acontecer isso teríamos o DRBD+OCFS2 trabalhando em conjunto, essa solução poderia ser trocada por um STORAGE, mas um STORAGE não está muito barato e a maioria das empresas nem pensa em comprar um equipamento desses, então o ADM que tem que se virar, por isso que estou escrevendo este artigo. Igualmente eu muitos outros ADMs estão precisando de uma solução de alta disponibilidade dessas e sem gastar muito.

Vamos lá para o OCFS2.

Lembra que instalamos o ocfs2console? Então vamos precisar dele e você tem as mesmas opções do haclient de exportar o ocfs2console via ssh ou o que você preferir, oo utilizar o putty que é o que eu uso.

De acordo com a documentação oficial da Oracle, é altamente recomendado que o arquivo que vem por padrão em /etc/ocfs2/cluster.conf seja renomeado e que a configuração seja feita via console gráfico.

Então chame o ocfs2console:

# ocfs2console &

Após aparecer a tela do ocfs2console clique em Cluster/Configure Nodes. A configuração dos nomes das máquinas deve ser exatamente igual ao hostname das mesmas.

Clique em Adicionar na tela que aparece e digite o nome da máquina como explicado acima. Digite o endereço IP no campo logo abaixo. E a porta pode deixar como o padrão 7777. Clique em ok.

Agora faça o mesmo processo para incluir o segundo nodo. Clique em Adicionar na tela que aparece, digite o nome da máquina como explicado acima. Digite o endereço IP no campo logo abaixo. E a porta pode deixar como o padrão 7777. Clique em ok.

Agora clique em aplicar.

E pode clicar agora em fechar.

Agora no servidor aonde você exportou a tela de configuração do ocfs2console, vá ao diretório /etc/ocfs2 e vamos fazer uma cópia deste arquivo para o segundo servidor.

# rsync -Hxpagouvt cluster.conf 192.168.0.2:/etc/ocfs2/

Pronto, já temos a configuração nos dois servidores.

Precisamos de mais um ajuste.

No debian temos que editar o arquivo /etc/default/o2cb e ativá-lo.

Aonde que se encontra essa linha mude para true:

O2CB_ENABLED=false

# vim /etc/default/o2cb

[...]
O2CB_ENABLED=true
[...]

Pronto, agora podemos iniciar o serviço.

# /etc/init.d/o2cb stop
# /etc/init.d/o2cb start


Se der algum erro verifique os logs para ver se não é erro de sintaxe no /etc/default/o2cb.

Se não deu erro ótimo, vamos continuar.

Agora vamos formatar as nossas partições com o sistema de arquivos OCFS2.

Vamos criar um diretório chamado /ocfs2 nos dois servidores que precisaremos deles logo.

# mkdir /ocfs2

Acesse novamente o console do ocfs2.

# ocfs2console &

Vá em Tasks/Format... vai abrir uma nova tela, nela vão informar os devices, no nosso caso o /dev/drbd1. Em Label coloque o nome que achar mais conveniente, como Cluster ou Oracle.

Em cluster size deixe com 128k, que é o volume de armazenamento de dados, em geral em Number of node slots coloque 2, que é o nosso número de nodos. Em block size 4k.

E é só clicar em Ok.

É só esperar formatar.

Agora vamos montar a nossa partição.

No console temos um botão de mount, clique nele. Vai aparecer uma tela pedindo o ponto de montagem e as opções.

Em ponto de montagem selecione a partição que criamos /ocfs2 e em options coloque como defaults e clique em ok.

Acesse o outro servidor e monte na mão a outra partição com:

# mount.ocfs2 /dev/drbd1 /ocfs2

Utilize o "df -Th" para ver as partições e os tamanhos ou o comando mount. Eu prefiro o "df -Th", pois dá para ver a partição, o ponto de montagem, o sistema de arquivos em forma mais legível que o mount.

# df -Th
/dev/drbd1   ocfs2     2G  45M   2G   2% /ocfs2

Para efetuar testes entre na partição /ocfs2 e crie um arquivo ou um diretório e vá no outro servidor e adicione mais um e confira se os dois servidores conseguem acessar estes arquivos ou diretórios.

Ex.: Em um dos servidores faça o seguinte:

# mkdir /ocfs2/teste

Criamos um diretório chamado teste, agora vão ao outro servidor e vamos criar um arquivo dentro deste diretório teste.

No outro servidor:

# touch /ocfs2/teste/tudook

Note que temos acesso nos dois servidores ao mesmo arquivo, que é o nosso propósito e melhor, podemos criar e excluir simultaneamente os arquivos e diretórios.

Isso é bom demais!

Agora que já temos tudo certo vamos colocar esta partição para ser montada na inicialização do sistema.

Vamos editar o arquivo /etc/fstab

# vim /etc/fstab

[...]
/dev/drbd1 /ocfs2 _netdev,defaults 0 0

Pronto, criamos uma entrada no arquivo de montagem na inicialização do sistema, este parâmetro que coloquei _netdev é para ser montada a partição depois que subir a rede, pois não adianta ele tentar montar sem rede pois senão de que vai adiantar o /ocfs2, ele vai ser uma partição local como um /var ou /etc.

Agora vamos acertar um problema que achei na inicialização, no Debian GNU/Linux por padrão o drbd inicializa depois do ocfs2, isso está errado pois o que o ocfs2 vai gerenciar se o dispositivo do drbd não esta ativo?

Então vamos arrumar isso.

Faça isso nos 2 servidores.

# mv /etc/rc2.d/S70drbd /etc/rcS.d/S50drbd

Agora vamos ver se ficou tudo certo :

# ls /etc/rcS.d/
S50drbd
S55bootmisc.sh
S55urandom
S60o2cb
S65ocfs2

Note que agora o drbd vai inicializar antes do o2cb e do o2cfs, que são quem gerenciam o ocfs2.

Agora vai tudo funcionar corretamente.

Para fazer um teste reinicialize os dois servidores e veja se o /ocfs2 vai inicializar normalmente.

Se estiver tudo certo não vai dar nem um problema.

Se der algum problema tente identificar nos arquivos de log do sistema como o comando "dmesg" e os arquivos /var/log/syslog e /var/log/messages.

Página anterior     Próxima página

Páginas do artigo
   1. Um pouco de história
   2. Nosso ambiente de implementação
   3. Preparação do ambiente
   4. Instalação e configuração do Heartbeat
   5. Gerenciando o Heartbeat com Haclient
   6. Instalação e configuração do DRBD8 e OCFS2
   7. LVS
   8. Instalação e configuração do Monit
Outros artigos deste autor

Debian + Postfix + MySQL + PostfixAdmin + MailScanner + Webmail + Quotas

Debian Lenny com Kernel 2.6.28 + Layer7 + Firewall

Um pouco sobre IPtables

Bind9 slave em chroot no Debian Lenny

Bind9 em chroot no Debian Lenny

Leitura recomendada

Qpopper (POP seguro) no Slackware

Instalação do Zextras Suite para o Zimbra

Usando Spammer e SpamDomains no sendmail

Utilizando o pine com o fetchmail

Instalando um servidor de news com INN

  
Comentários
[1] Comentário enviado por luizvieira em 21/03/2010 - 09:25h

Muito bom, essa semana mesmo preciso implementar um ambiente desses e talvez seu artigo possa me ajudar.
Parabéns!
[ ]'s
Luiz

[2] Comentário enviado por leandrojpg em 22/03/2010 - 09:04h

É, podem seguir linha a linha desse artigo que funciona, implantei aqui no meu trabalho e foi total sucesso, o Douglas fez um excelente trabalho.
muito obrigado.!!!!

[3] Comentário enviado por manoserpa em 22/03/2010 - 10:44h

Vou fazer meu TCC sobre cluster, esse artigo será bastante útil e vou usar como referência no meu trabalho.

Parabéns Douglas, e obrigado pelas dicas que você já meu deu até hoje.

Um abraço.

[4] Comentário enviado por douglas_dksh em 22/03/2010 - 13:25h

Obrigado pelos comentários.


Espero continuar contribuindo sempre.


Douglas.

[5] Comentário enviado por lemurbr em 21/04/2010 - 10:48h

Douglas,

Parabéns pelo excelente artigo, vc foi muito didático e me ajudou muito na implantação de uma solução similar em um cliente.
Seu artigo esta muito bem escrito e direto.
Estou tentando adaptar essa solução para um servidor samba com controlador de dominio o processo está de vento em popa.
Mas ficaram três dúvidas :
Primeiro - Utilizo o Debian Lenny atualizado, mas o parâmetro que foi indicado no FSTAB ( _netdev ) não esta seno reconhecino na inicialização da máquina, consequentemente ele não monta o filesystem OCFS2 automaticamente.
Segundo - No início do seu artigo deu a entender que precisava-se de 2 placas de rede em cada máquina mas ao implementar o mesmo não encontrei referência alguma da configuração dessa segunda placa.
Terceiro com relação ao LVS achei a idéia muito boa mas é realmente necessário a adição de uma terceira máquina no serviço ? Poderia-se colocar o LVS em uma das máquinas do cluster?

Mais uma vez parabéns pelo excelente artigo continue assim nossa comunidade só tem a ganhar ....

Viva a Liberdade
Viva o Linux

Uma abraço

Luiz Xavier .:

[6] Comentário enviado por lemurbr em 23/04/2010 - 16:10h

Boa Tarde Douglas !!!


Das minhas dúvidas eu já consegui resolver uma :
a linha do FSTAB referente a montagem do OCFS2 está errada o correto segue abaixo :

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

Espero ter ajudado ;)

Atenciosamente

Luiz Xavier.:

Viva a Liberdade !!!
Viva o Linux !!!

[7] Comentário enviado por lemurbr em 28/04/2010 - 17:30h

Boa Tarde a todos ....

Mais uma vez gostaria de deixar minhas impressões com as pessoas que verem esse tópico.

Nosso colaborador Douglas está de parabéns .

Segui seu tutorial e fiz alguns ajustes e hoje sou um feliz próprietário de um cluster total rodanda Samba PDC, Squid Autenticado e OpenVpn.


Parabéns mais uma vez

Continue sempre assim ...

Viva a Liberdade !!!
Viva o Linux !!!!

Luiz Xavier .:

[8] Comentário enviado por fermguft em 30/04/2010 - 14:58h

Olá...

Primeiramente parabéns pelo artigo. Será de grande valia!!!

Tenho um problema: na hora de executar o Heartbeat em modo gráfico (heartbeat-2-gui) dá erro e nao abre. Tentei instalar em outra máquina e utilizar o putty e colocar o comando, mas ele nem abre. Se eu digitar o comando, da erro também. Alguem passou por isso, ou sabe como ontornar isso?

Situação:
Instalação em duas máquinas Debian/Lenny atualizadas, somente modo texto.

Erro:

debian1:~# /usr/lib/heartbeat-gui/haclient.py &
[1] 2372
debian1:~# /var/lib/python-support/python2.5/gtk-2.0/gtk/__init__.py:72: GtkWarning: could not open display
warnings.warn(str(e), _gtk.Warning)
/usr/lib/heartbeat-gui/haclient.py:1964: Warning: invalid (NULL) pointer instance
win_widget = gtk.Window()
/usr/lib/heartbeat-gui/haclient.py:1964: Warning: g_signal_connect_data: assertion `G_TYPE_CHECK_INSTANCE (instance)' failed
win_widget = gtk.Window()
/usr/lib/heartbeat-gui/haclient.py:2077: Warning: invalid (NULL) pointer instance
menubar = uimanager.get_widget('/menubar')
/usr/lib/heartbeat-gui/haclient.py:2077: Warning: g_signal_connect_data: assertion `G_TYPE_CHECK_INSTANCE (instance)' failed
menubar = uimanager.get_widget('/menubar')
/usr/lib/heartbeat-gui/haclient.py:2077: GtkWarning: gtk_settings_get_for_screen: assertion `GDK_IS_SCREEN (screen)' failed
menubar = uimanager.get_widget('/menubar')
/usr/lib/heartbeat-gui/haclient.py:2077: Warning: g_object_get: assertion `G_IS_OBJECT (object)' failed
menubar = uimanager.get_widget('/menubar')
/usr/lib/heartbeat-gui/haclient.py:2077: Warning: value "TRUE" of type `gboolean' is invalid or out of range for property `visible' of type `gboolean'
menubar = uimanager.get_widget('/menubar')
/usr/lib/heartbeat-gui/haclient.py:2084: Warning: invalid (NULL) pointer instance
glade = gtk.glade.XML(UI_FILE, "mainwin_main", "haclient")
/usr/lib/heartbeat-gui/haclient.py:2084: Warning: g_signal_connect_data: assertion `G_TYPE_CHECK_INSTANCE (instance)' failed
glade = gtk.glade.XML(UI_FILE, "mainwin_main", "haclient")
/usr/lib/heartbeat-gui/haclient.py:2084: GtkWarning: gtk_settings_get_for_screen: assertion `GDK_IS_SCREEN (screen)' failed
glade = gtk.glade.XML(UI_FILE, "mainwin_main", "haclient")
/usr/lib/heartbeat-gui/haclient.py:2092: GtkWarning: Screen for GtkWindow not set; you must always set
a screen for a GtkWindow before using the window
win_widget.show_all()
/usr/lib/heartbeat-gui/haclient.py:2092: GtkWarning: gtk_settings_get_for_screen: assertion `GDK_IS_SCREEN (screen)' failed
win_widget.show_all()
/usr/lib/heartbeat-gui/haclient.py:2092: Warning: g_object_get: assertion `G_IS_OBJECT (object)' failed
win_widget.show_all()
/usr/lib/heartbeat-gui/haclient.py:2092: GtkWarning: gdk_pango_context_get_for_screen: assertion `GDK_IS_SCREEN (screen)' failed
win_widget.show_all()
/usr/lib/heartbeat-gui/haclient.py:2092: PangoWarning: pango_context_set_font_description: assertion `context != NULL' failed
win_widget.show_all()
/usr/lib/heartbeat-gui/haclient.py:2092: PangoWarning: pango_context_set_base_dir: assertion `context != NULL' failed
win_widget.show_all()
/usr/lib/heartbeat-gui/haclient.py:2092: PangoWarning: pango_context_set_language: assertion `context != NULL' failed
win_widget.show_all()
/usr/lib/heartbeat-gui/haclient.py:2092: PangoWarning: pango_layout_new: assertion `context != NULL' failed
win_widget.show_all()
/usr/lib/heartbeat-gui/haclient.py:2092: PangoWarning: pango_layout_set_text: assertion `layout != NULL' failed
win_widget.show_all()
/usr/lib/heartbeat-gui/haclient.py:2092: PangoWarning: pango_layout_set_attributes: assertion `layout != NULL' failed
win_widget.show_all()
/usr/lib/heartbeat-gui/haclient.py:2092: PangoWarning: pango_layout_set_alignment: assertion `layout != NULL' failed
win_widget.show_all()
/usr/lib/heartbeat-gui/haclient.py:2092: PangoWarning: pango_layout_set_ellipsize: assertion `PANGO_IS_LAYOUT (layout)' failed
win_widget.show_all()
/usr/lib/heartbeat-gui/haclient.py:2092: PangoWarning: pango_layout_set_single_paragraph_mode: assertion `PANGO_IS_LAYOUT (layout)' failed
win_widget.show_all()
/usr/lib/heartbeat-gui/haclient.py:2092: PangoWarning: pango_layout_set_width: assertion `layout != NULL' failed
win_widget.show_all()
/usr/lib/heartbeat-gui/haclient.py:2092: PangoWarning: pango_layout_get_extents: assertion `layout != NULL' failed
win_widget.show_all()
/usr/lib/heartbeat-gui/haclient.py:2092: PangoWarning: pango_layout_get_pixel_extents: assertion `PANGO_IS_LAYOUT (layout)' failed
win_widget.show_all()
/usr/lib/heartbeat-gui/haclient.py:2092: Warning: g_object_unref: assertion `G_IS_OBJECT (object)' failed
win_widget.show_all()
/usr/lib/heartbeat-gui/haclient.py:2092: GtkWarning: gtk_icon_size_lookup_for_settings: assertion `GTK_IS_SETTINGS (settings)' failed
win_widget.show_all()
/usr/lib/heartbeat-gui/haclient.py:2092: GtkWarning: /build/buildd-gtk+2.0_2.12.12-1~lenny2-i386-2RfKoO/gtk+2.0-2.12.12/gtk/gtkstyle.c:2123: invalid icon size '3'
win_widget.show_all()
/usr/lib/heartbeat-gui/haclient.py:2092: GtkWarning: gtk_style_render_icon: assertion `pixbuf != NULL' failed
win_widget.show_all()
/usr/lib/heartbeat-gui/haclient.py:2092: GtkWarning: Failed to render icon
win_widget.show_all()
/usr/lib/heartbeat-gui/haclient.py:2092: Warning: g_object_ref: assertion `G_IS_OBJECT (object)' failed
win_widget.show_all()
/usr/lib/heartbeat-gui/haclient.py:2092: PangoWarning: pango_context_get_language: assertion `context != NULL' failed
win_widget.show_all()
/usr/lib/heartbeat-gui/haclient.py:2092: PangoWarning: pango_context_get_metrics: assertion `PANGO_IS_CONTEXT (context)' failed
win_widget.show_all()
/usr/lib/heartbeat-gui/haclient.py:2092: PangoWarning: pango_font_metrics_get_approximate_char_width: assertion `metrics != NULL' failed
win_widget.show_all()
/usr/lib/heartbeat-gui/haclient.py:2092: PangoWarning: pango_layout_get_context: assertion `layout != NULL' failed
win_widget.show_all()
/usr/lib/heartbeat-gui/haclient.py:2092: PangoWarning: pango_font_metrics_get_approximate_digit_width: assertion `metrics != NULL' failed
win_widget.show_all()
/usr/lib/heartbeat-gui/haclient.py:2092: PangoWarning: pango_font_metrics_get_ascent: assertion `metrics != NULL' failed
win_widget.show_all()
/usr/lib/heartbeat-gui/haclient.py:2092: PangoWarning: pango_font_metrics_get_descent: assertion `metrics != NULL' failed
win_widget.show_all()
/usr/lib/heartbeat-gui/haclient.py:2092: GtkWarning: gdk_screen_get_default_colormap: assertion `GDK_IS_SCREEN (screen)' failed
win_widget.show_all()
/usr/lib/heartbeat-gui/haclient.py:2092: GtkWarning: gdk_colormap_get_visual: assertion `GDK_IS_COLORMAP (colormap)' failed
win_widget.show_all()
/usr/lib/heartbeat-gui/haclient.py:2092: GtkWarning: gdk_screen_get_root_window: assertion `GDK_IS_SCREEN (screen)' failed
win_widget.show_all()
/usr/lib/heartbeat-gui/haclient.py:2092: GtkWarning: gdk_window_new: assertion `GDK_IS_WINDOW (parent)' failed
win_widget.show_all()
/usr/lib/heartbeat-gui/haclient.py:2092: GtkWarning: gdk_window_enable_synchronized_configure: assertion `GDK_IS_WINDOW (window)' failed
win_widget.show_all()
/usr/lib/heartbeat-gui/haclient.py:2092: GtkWarning: gdk_window_set_user_data: assertion `window != NULL' failed
win_widget.show_all()
/usr/lib/heartbeat-gui/haclient.py:2092: GtkWarning: gtk_style_attach: assertion `window != NULL' failed
win_widget.show_all()
/usr/lib/heartbeat-gui/haclient.py:2092: GtkWarning: gtk_style_set_background: assertion `GTK_IS_STYLE (style)' failed
win_widget.show_all()
/usr/lib/heartbeat-gui/haclient.py:2092: GtkWarning: gtk_paint_flat_box: assertion `GTK_IS_STYLE (style)' failed
win_widget.show_all()
/usr/lib/heartbeat-gui/haclient.py:2092: GtkWarning: gdk_window_set_accept_focus: assertion `GDK_IS_WINDOW (window)' failed
win_widget.show_all()
/usr/lib/heartbeat-gui/haclient.py:2092: GtkWarning: gdk_window_set_focus_on_map: assertion `GDK_IS_WINDOW (window)' failed
win_widget.show_all()
/usr/lib/heartbeat-gui/haclient.py:2092: GtkWarning: gdk_window_set_modal_hint: assertion `GDK_IS_WINDOW (window)' failed
win_widget.show_all()
/usr/lib/heartbeat-gui/haclient.py:2092: GtkWarning: gtk_window_realize_icon: assertion `widget->window != NULL' failed
win_widget.show_all()
/usr/lib/heartbeat-gui/haclient.py:2092: GtkWarning: gdk_window_set_geometry_hints: assertion `GDK_IS_WINDOW (window)' failed
win_widget.show_all()
/usr/lib/heartbeat-gui/haclient.py:2092: GtkWarning: gdk_window_invalidate_rect: assertion `window != NULL' failed
win_widget.show_all()
/usr/lib/heartbeat-gui/haclient.py:2092: GtkWarning: gdk_window_show: assertion `GDK_IS_WINDOW (window)' failed
win_widget.show_all()
/usr/lib/heartbeat-gui/haclient.py:2092: GtkWarning: gdk_window_get_events: assertion `GDK_IS_WINDOW (window)' failed
win_widget.show_all()
/usr/lib/heartbeat-gui/haclient.py:2092: GtkWarning: gdk_window_set_events: assertion `GDK_IS_WINDOW (window)' failed
win_widget.show_all()
/usr/lib/heartbeat-gui/haclient.py:2092: GtkWarning: gdk_screen_get_display: assertion `GDK_IS_SCREEN (screen)' failed
win_widget.show_all()
/usr/lib/heartbeat-gui/haclient.py:2092: GtkWarning: gdk_cursor_new_for_display: assertion `GDK_IS_DISPLAY (display)' failed
win_widget.show_all()
/usr/lib/heartbeat-gui/haclient.py:2092: GtkWarning: gdk_cursor_unref: assertion `cursor != NULL' failed
win_widget.show_all()
/usr/lib/heartbeat-gui/haclient.py:2092: GtkWarning: gdk_window_set_back_pixmap: assertion `GDK_IS_WINDOW (window)' failed
win_widget.show_all()
/usr/lib/heartbeat-gui/haclient.py:2092: GtkWarning: gdk_drawable_get_colormap: assertion `GDK_IS_DRAWABLE (drawable)' failed
win_widget.show_all()
/usr/lib/heartbeat-gui/haclient.py:2092: GtkWarning: gdk_window_set_background: assertion `GDK_IS_WINDOW (window)' failed
win_widget.show_all()


[9] Comentário enviado por douglas_dksh em 03/05/2010 - 08:59h

Bom dia.

Cara pela sua situação abaixo.
Situação:
Instalação em duas máquinas Debian/Lenny atualizadas, somente modo texto.

Não tem como você executar o haclient.

/usr/lib/heartbeat-gui/haclient.py &

para você poder exportar a tela eu comentei no tutorial que precisa de uma maquina com modo gráfico.

e dava para fazer a exportação da tela do haclient.py via putty em modo grafico.

nem precisa ser a que tenha o servidor mais pelo meno um cliente pois a tela que vc esta querendo exportar é feita em python e necessita de algumas bibliotecas de modo grafico X.


para resolver o seu problema instale uma maquina com o modo grafico so para voce gerenciar o seu cluster e deixe os seus server somente com o modo texto para não ficar enchendo o seu server de aplicativos e bibliotecas X.


Douglas.

[10] Comentário enviado por lanzelotti em 06/08/2010 - 10:41h

Bom dia Douglas,

Já tinha o heartbeat instalado nos servidores(Debian 5), mas com a versão 1, instalei o heartbeat-gui nos servidores (locais) e usei o comando "/usr/lib/heartbeat-gui/haclient.py &".
Acesso os servidores com o ssh com X11 para usar a interface grafica da minha maquina local:
#ssh servidor -XY
Abri o Haclient normalmente:
Server 127.0.0.1
User Name hacluster
Password: em branco

Utilizo a senha que cadastrei mas não consigo conectar no servidor, tentei a conexão com o IP LAN do servidor mas gera o mesmo erro.
Tenho que especificar alguma porta?
Sabe o que pode estar ocorrendo?

Obs.: Não tenho firewall habilitado neste servidor e adicionei o user hacluster no grupo haclient(encontrei em um forum)

Obrigado e parabens!

[11] Comentário enviado por douglas_dksh em 06/08/2010 - 11:29h

Bom dia caro colega.

acho que vc esqueceu disso aqui.

Como na instalação do Heartbeat ele não pediu senha para o hacluster, temos que inserir uma para podemos conectar no Heartbeat.

# passwd hacluster

dai vc informa a senha e loga o hacliet.


Douglas

[12] Comentário enviado por joelmp em 26/09/2010 - 23:32h

Boa noite a todos

Agradeço o artigo, está me ajudando bastante.

Porem ainda tenho um problema com o heartbeat.
Quando o host1 e host2 estão operando não consigo acessar o apache na rede, porem quando coloco qualquer um deles em standby o serviço funciona.
alguem pode me dar uma dica?

[13] Comentário enviado por joelmp em 26/09/2010 - 23:43h

ops!

Já resolvi, era apenas um location para o mesmo serviço, ou seja, por engano setei um outro location qualquer com apache tbm, ai duplicou o serviço.

[14] Comentário enviado por doomk em 03/11/2010 - 15:16h

Tutorial simplesmente perfeito.


Está de parabéns.

[15] Comentário enviado por rodrigom em 17/05/2011 - 16:56h

Pessoal, estava seguindo esse tutorial, mas ai surgiu uma dúvida, onde gero essa senha ?


# vim /etc/ha.d/authkeys

# /etc/ha.d/authkeys

#Definir qual o método de autenticação.
auth 3

#Métodos de autenticação disponíveis
1 crc <--------------------------------------------------------------------
2 sha1 senha <----------------------------------------------------------
3 md5 senha <----------------------------------------------------------


Muito obrigado a todos, bom dia.

[16] Comentário enviado por felipeogutierrez em 20/11/2012 - 15:41h

Olá Douglas,

O heartbeat só funciona com cabo crossover ligando os nodos?

Obrigado,
Felipe

[17] Comentário enviado por douglas_dksh em 20/11/2012 - 16:09h

Boa tarde.

Não, pode ser utilizado um cabo padrão de rede, o heartbeat somente vai garantir que um endereço ip seja compartilhado entre os servidores, ou vai monitorar um determinado serviço ou partição, mas o servidor pode ser montado como qualquer outro.

[18] Comentário enviado por fernandofrauches em 04/06/2013 - 18:03h

Boa noite a todos.

Fui seguindo o tutorial passo a passo porem adaptando ele para minha situação. Estou utilizando ja o debian wheezy, e não consigo instalar o heartbeat-gui....
Busco ele no apt-get e ele não encontra....o heartbeat instalado é a versão 3

Obrigado.

[19] Comentário enviado por douglas_dksh em 06/06/2013 - 10:04h

E ai fernando o que acontece é o seguinte o projeto do heartbeat e do corosync forão separados e foram descontinuadas algumas features.

da uma olhada nesse link aqui http://www.douglas.wiki.br/doku.php?id=corosync_pacemaker_lcmc_no_debian_squeeze

aqui eu fiz a implementação com o novo modelo a implementação do squeeze e do wheezy é para ser a mesma.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts