Differences

This shows you the differences between two versions of the page.

Link to this comparison view

corosync_pacemaker_lcmc_no_debian_squeeze_pt_br [2017/09/05 12:18] (current)
Line 1: Line 1:
 +====== Corosync + PaceMaker + Lcmc no Debian Squeeze ​ ======
  
 +O **Pacemaker** é um gerenciador de recursos de cluster ou cluster resource manager (CRM). Sua função é oferecer uma interface para que o usuário possa gerenciar o conjunto de clusters.
 +
 +Para evitar dados corrompidos,​ a administração é feita através de uma estrutura centralizada. Quando um evento de falha é relatado, automaticamente é iniciado o processo de recuperação da disponibilidade da aplicação iniciando o recurso em outra máquina do cluster.
 +
 +Características:​
 +  - Detecta e recupera falhas em computadores no nível de aplicação
 +  - Administração centralizada através de shell
 +  - Suporta cluster por quorate e resource-driven
 +  - Suporte o envio de sinal de desligamento conforme o estado da aplicação
 +  - Suporta aplicações com múltiplos nós (master/​slave)
 +  - Correção automática de falhas
 +
 +**Corosync Cluster Engine** ​
 +
 +Publicada em 2008, é considerada a evolução do **Heartbeat**. Possui recursos adicionais ao **Heartbeat** e com mais suporte.
 +
 +Características:​
 +  - Confiabilidade na criação de réplicas de máquina de estado
 +  - Reinício de aplicações em caso de falha
 +  - Sistema de quorum com notificação caso uma aplicação ou máquina venha a falhar.
 +
 +**Resource Agent**
 +
 +Os Resource Agent'​s são scripts que contém uma série de comandos fornecendo uma interface para um recurso de cluster. Sua função é traduzir o resultado das operações executadas por um serviço verificando se ouve sucesso ou falha.
 +
 +O Pacemaker suporta três tipos de agentes de recurso.
 +  - LSB (Linux Standard Base)
 +  - OCF (Open Cluster Framework)
 +  - HRA (Heartbeat Resource Agents)
 +
 +A maioria dos scripts estão no formato LSB ou OCF, o HRA tornou-se obsoleto.
 +
 +**Lcmc** é uma ferramenta gráfica para gerenciamento de cluster disponibilizada pela pacemaker, a ferramente é escrita em java com isso podemos portar ela para qualquer plataforma.
 +
 +O que eu vou utilizar:
 +    - Debian Squeeze Nodo1
 +     - Nome: debian25
 +     - IP: 10.101.0.25
 +    - Debian Squeeze Nodo2
 +     - Nome: debian26
 +     - IP: 10.101.0.26
 +
 +Prepare o seu sistema com o seguinte script http://​wiki.douglasqsantos.com.br/​doku.php/​confinicialsqueeze_en para que não falte nenhum pacote ou configuração.
 +
 +====== Ajustes iniciais ======
 +
 +Agora vamos mandar fazer um update dos repositórios e vamos fazer um upgrade do sistema nos dois nodos
 +<sxh bash>
 +aptitude update && aptitude dist-upgrade -y
 +</​sxh>​
 +
 +Agora vamos ajustar o arquivo /etc/hosts dos dois nodos este arquivo tem que ficar como abaixo.
 +<sxh bash>
 +127.0.0.1 ​      ​localhost
 +10.101.0.25 ​    ​debian25.douglas.wiki.br ​      ​debian25
 +10.101.0.26 ​    ​debian26.douglas.wiki.br ​      ​debian26
 +</​sxh>​
 +
 +Agora vamos fazer a instalação dos seguintes pacotes nós dois nodos
 +<sxh bash>
 +aptitude install corosync pacemaker -y
 +</​sxh>​
 +
 +====== SSH com troca de Chaves ======
 +
 +Agora no Nodo1 vamos gerar as chaves de ssh para efetuarmos a conexão de ssh via troca de chaves
 +<sxh bash>
 +ssh-keygen -t rsa
 +Generating public/​private rsa key pair.
 +Enter file in which to save the key (/​root/​.ssh/​id_rsa):​ #ENTER
 +Created directory '/​root/​.ssh'​.
 +Enter passphrase (empty for no passphrase):​ #ENTER
 +Enter same passphrase again: #ENTER
 +Your identification has been saved in /​root/​.ssh/​id_rsa.
 +Your public key has been saved in /​root/​.ssh/​id_rsa.pub.
 +The key fingerprint is:
 +b2:​88:​e4:​58:​ff:​c7:​07:​05:​2a:​55:​05:​03:​1e:​a4:​43:​1b root@debian25
 +The key's randomart image is:
 ++--[ RSA 2048]----+
 +|    E.+o+o. ​     |
 +|   . =....       |
 +|    +... .       |
 +|    ...   ​. ​     |
 +|  o  .. S.       |
 +| = o . o.        |
 +|. o o .. .       |
 +|     ​. ​ o .      |
 +|      .. .       |
 ++-----------------+
 +</​sxh>​
 +
 +Agora no Nodo2 vamos gerar as chaves de ssh para efetuarmos a conexão de ssh via troca de chaves
 +<sxh bash>
 +ssh-keygen -t rsa
 +Generating public/​private rsa key pair.
 +Enter file in which to save the key (/​root/​.ssh/​id_rsa):​ #ENTER
 +Created directory '/​root/​.ssh'​.
 +Enter passphrase (empty for no passphrase):​ #ENTER
 +Enter same passphrase again: #ENTER
 +Your identification has been saved in /​root/​.ssh/​id_rsa.
 +Your public key has been saved in /​root/​.ssh/​id_rsa.pub.
 +The key fingerprint is:
 +4d:​b0:​df:​ef:​b1:​08:​fb:​9f:​2e:​5c:​fb:​3c:​b0:​8f:​d4:​77 root@debian26
 +The key's randomart image is:
 ++--[ RSA 2048]----+
 +|        .        |
 +|         ​o ​      |
 +|        . .      |
 +|         + .     |
 +|        S o .    |
 +|             ​oo ​ |
 +|          .. o=oE|
 +|           ​o++o*o|
 +|          ..o=Bo+|
 ++-----------------+
 +</​sxh>​
 +
 +Agora no Nodo1 vamos copiar as chaves para o Nodo2
 +<sxh bash>
 +ssh-copy-id 10.101.0.26
 +The authenticity of host '​10.101.0.26 (10.101.0.26)'​ can't be established.
 +RSA key fingerprint is 8b:​af:​fc:​ac:​d7:​8a:​44:​d5:​30:​ad:​1e:​b9:​de:​95:​78:​d0.
 +Are you sure you want to continue connecting (yes/no)? yes
 +Warning: Permanently added '​10.101.0.26'​ (RSA) to the list of known hosts.
 +root@10.101.0.26'​s password: #SENHA
 +Now try logging into the machine, with "ssh '​10.101.0.26'",​ and check in:
 +
 +  .ssh/​authorized_keys
 +
 +to make sure we haven'​t added extra keys that you weren'​t expecting.
 +</​sxh>​
 +
 +Agora no Nodo2 vamos copiar as chaves para o Nodo1
 +<sxh bash>
 +ssh-copy-id 10.101.0.25
 +The authenticity of host '​10.101.0.25 (10.101.0.25)'​ can't be established.
 +RSA key fingerprint is a0:​73:​55:​67:​86:​11:​8d:​13:​c6:​45:​cc:​85:​c6:​d5:​a9:​a2.
 +Are you sure you want to continue connecting (yes/no)? yes
 +Warning: Permanently added '​10.101.0.25'​ (RSA) to the list of known hosts.
 +root@10.101.0.25'​s password: #SENHA
 +Now try logging into the machine, with "ssh '​10.101.0.25'",​ and check in:
 +
 +  .ssh/​authorized_keys
 +
 +to make sure we haven'​t added extra keys that you weren'​t expecting.
 +</​sxh>​
 +
 +====== Configuração do Corosync ======
 +
 +Agora no Nodo1 vamos gerar a chave de autenticação para o Corosync
 +<sxh bash>
 +corosync-keygen ​
 +Corosync Cluster Engine Authentication key generator.
 +Gathering 1024 bits for key from /​dev/​random.
 +Press keys on your keyboard to generate entropy.
 +Press keys on your keyboard to generate entropy (bits = 176).
 +Press keys on your keyboard to generate entropy (bits = 240).
 +Press keys on your keyboard to generate entropy (bits = 304).
 +Press keys on your keyboard to generate entropy (bits = 368).
 +Press keys on your keyboard to generate entropy (bits = 432).
 +Press keys on your keyboard to generate entropy (bits = 496).
 +Press keys on your keyboard to generate entropy (bits = 560).
 +Press keys on your keyboard to generate entropy (bits = 624).
 +Press keys on your keyboard to generate entropy (bits = 688).
 +Press keys on your keyboard to generate entropy (bits = 752).
 +Press keys on your keyboard to generate entropy (bits = 816).
 +Press keys on your keyboard to generate entropy (bits = 880).
 +Press keys on your keyboard to generate entropy (bits = 944).
 +Press keys on your keyboard to generate entropy (bits = 1008).
 +Writing corosync key to /​etc/​corosync/​authkey.
 +</​sxh>​
 +
 +Agora abra um novo terminal para o servidor 10.101.0.25 enquanto é gerada a chave para o corosync, vamos agilizar a geração dos dados aleatórios para a chave
 +
 +Agora no novo terminal no Nodo1 execute o seguinte comando
 +<sxh bash>
 +find / -iname "​*"​ -exec ls -l {} \;
 +</​sxh>​
 +
 +Depois que terminar a geração da chave para o corosync podemos cancelar o comando do find com um crtl + c e podemos fechar o terminal adicional que abrimos no Nodo1
 +
 +Agora no Nodo1 vamos copiar as chaves do corosync para o Nodo2
 +<sxh bash>
 +scp /​etc/​corosync/​authkey 10.101.0.26:/​etc/​corosync/​authkey
 +</​sxh>​
 +
 +Agora vamos executar o comando abaixo nos dois Nodos para deixarmos o corosync ativado na inicialização
 +<sxh bash>
 +sed -i '​s/​START=no/​START=yes/​g'​ /​etc/​default/​corosync
 +</​sxh>​
 +
 +No Nodo1 vamos fazer um backup do arquivo de configuração do Corosync
 +<sxh bash>
 +cp -a /​etc/​corosync/​corosync.conf{,​.bkp}
 +</​sxh>​
 +
 +Agora vamos a configuração do corosync
 +<sxh bash>
 +vim /​etc/​corosync/​corosync.conf
 +# /​etc/​corosync/​corosync.conf
 +
 +#Opção do protocolo totem
 +totem {
 +  version: 2
 +
 +  #Tempo para verificar perca de pacotes em (ms)
 +  token: 3000
 +
 +  #Quantas verificações antes de gerar notificações
 +  token_retransmits_before_loss_const:​ 10
 +
 +  #Quanto tempo esperar para agrupar as notificações em (ms)
 +  join: 60
 +
 +  #Quanto tempo esperar para uma solução antes de começar uma nova verificação (ms)
 +  consensus: 3600
 +
 +  #Filtro de sincronismo virtual desabilitado
 +  vsftype: none
 +
 +  #Número de mensagens processadas na recepção de pacotes
 +  max_messages:​ 20
 +
 +  #Limite de cluster assinados
 +  clear_node_high_bit:​ yes
 +
 +  #​Criptografia desabilitada
 +  secauth: off
 +
 +  #Quantas threads usadas para criptografar/​descriptografar
 +  threads: 0
 +
 +  #Atribui ID em um cluster fixo (opcional)
 +  # nodeid: 1234
 +
 +  #Especifica que em modo de redundancia,​ não pode havar nenhum cluster ativo ou passivo.
 +  rrp_mode: none
 +
 +  interface {
 +    #Número de clusters (0 default)
 +    ringnumber: 0
 +                #Início de ips utilizados por cluster 10.101.0.0 é 10.101.0.0/​24 aqui mude para 
 +                #O endereço da sua rede ex: 192.168.0.0 que seria 192.168.0.0/​24
 +    bindnetaddr:​ 10.101.0.0
 +                #Fim de ips utilizados por cluster
 +    mcastaddr: 226.94.1.1
 +                #Porta utilizaad pelo corosync
 +    mcastport: 5405
 +  }
 +}
 +
 +#​Configuração de AIS Availability Management Framework
 +amf {
 +  mode: disabled
 +}
 +
 +service {
 +  #​Carregamento do serviço para gerenciamento
 +  ver:       0
 +  name:      pacemaker
 +}
 +
 +#Temos que setar o usuário e grupo como root para o ais ser capaz de gerenciar os recursos do pacemaker
 +aisexec {
 +        user:   root
 +        group: ​ root
 +}
 +
 +
 +#​Configuração de log
 +logging {
 +        fileline: off
 +        to_stderr: yes
 +        to_logfile: yes
 +        logfile: /​var/​log/​corosync/​corosync.log
 +        #Aqui estou desabilitando os logs para o syslog, pq senão zoa demais o arquivo
 +        to_syslog: no
 +  syslog_facility:​ daemon
 +        debug: off
 +        timestamp: on
 +        logger_subsys {
 +                subsys: AMF
 +                debug: off
 +                tags: enter|leave|trace1|trace2|trace3|trace4|trace6
 +        }
 +}
 +</​sxh>​
 +
 +Agora vamos copiar o nosso arquivo para o Nodo2
 +<sxh bash>
 +scp /​etc/​corosync/​corosync.conf 10.101.0.26:/​etc/​corosync/​
 +</​sxh>​
 +
 +Agora vamos reiniciar o corosync nos dois nodos
 +<sxh bash>
 +/​etc/​init.d/​corosync restart
 +</​sxh>​
 +
 +
 +Agora vamos ver se o nosso cluster está funcionando no Nodo1 vamos consultar
 +<sxh bash>
 +crm_mon --one-shot -V
 +crm_mon[15140]:​ 2013/​01/​04_15:​07:​11 ERROR: unpack_resources:​ Resource start-up disabled since no STONITH resources have been defined
 +crm_mon[15140]:​ 2013/​01/​04_15:​07:​11 ERROR: unpack_resources:​ Either configure some or disable STONITH with the stonith-enabled option
 +crm_mon[15140]:​ 2013/​01/​04_15:​07:​11 ERROR: unpack_resources:​ NOTE: Clusters with shared data need STONITH to ensure data integrity
 +============
 +Last updated: Fri Jan  4 15:07:11 2013
 +Stack: openais
 +Current DC: debian25 - partition with quorum
 +Version: 1.0.9-74392a28b7f31d7ddc86689598bd23114f58978b
 +2 Nodes configured, 2 expected votes
 +0 Resources configured.
 +============
 +
 +Online: [ debian25 debian26 ]
 +</​sxh>​
 +
 +Caso não apareça a mensagem como acima os dois nodos online, reinicie o corosync novamente para ele recarregar os nodos
 +<sxh bash>
 +/​etc/​init.d/​corosync restart
 +</​sxh>​
 +
 +Agora vamos ver se o nosso cluster está funcionando no Nodo2 vamos consultar
 +<sxh bash>
 +crm_mon --one-shot -V
 +crm_mon[3319]:​ 2013/​01/​04_15:​08:​07 ERROR: unpack_resources:​ Resource start-up disabled since no STONITH resources have been defined
 +crm_mon[3319]:​ 2013/​01/​04_15:​08:​07 ERROR: unpack_resources:​ Either configure some or disable STONITH with the stonith-enabled option
 +crm_mon[3319]:​ 2013/​01/​04_15:​08:​07 ERROR: unpack_resources:​ NOTE: Clusters with shared data need STONITH to ensure data integrity
 +============
 +Last updated: Fri Jan  4 15:08:07 2013
 +Stack: openais
 +Current DC: debian25 - partition with quorum
 +Version: 1.0.9-74392a28b7f31d7ddc86689598bd23114f58978b
 +2 Nodes configured, 2 expected votes
 +0 Resources configured.
 +============
 +
 +Online: [ debian25 debian26 ]
 +</​sxh>​
 +
 +
 +
 +Agora no Nodo1 vamos desabilitar o stonith para que ele não fique gerando erros, caso o comando abaixo demore, cancele ele com ctrl + C e reinicie o corosync e depois rode ele novamente.
 +<sxh bash>
 +crm configure property stonith-enabled=false
 +</​sxh>​
 +
 +Agora vamos consultar novamente no Nodo1 agora com outro comando
 +<sxh bash>
 +crm_mon -1
 +============
 +Last updated: Fri Jan  4 15:09:07 2013
 +Stack: openais
 +Current DC: debian25 - partition with quorum
 +Version: 1.0.9-74392a28b7f31d7ddc86689598bd23114f58978b
 +2 Nodes configured, 2 expected votes
 +0 Resources configured.
 +============
 +
 +Online: [ debian25 debian26 ]
 +</​sxh>​
 +
 +Agora podemos verificar senão temos nenhum problema com o nosso cluster da seguinte forma
 +<sxh bash>
 +crm_verify -L
 +</​sxh>​
 +
 +Como não tivemos erros ele não retorna nada.
 +
 +Vamos consultar a configuração do corosync no Nodo1
 +<sxh bash>
 +crm configure show
 +node debian25
 +node debian26
 +property $id="​cib-bootstrap-options"​ \
 +  dc-version="​1.0.9-74392a28b7f31d7ddc86689598bd23114f58978b"​ \
 +  cluster-infrastructure="​openais"​ \
 +  expected-quorum-votes="​2"​ \
 +  stonith-enabled="​false"​
 +</​sxh>​
 +
 +Agora vamos consultar a configuração do corosync no Nodo2
 +<sxh bash>
 +crm configure show
 +node debian25
 +node debian26
 +property $id="​cib-bootstrap-options"​ \
 +  dc-version="​1.0.9-74392a28b7f31d7ddc86689598bd23114f58978b"​ \
 +  cluster-infrastructure="​openais"​ \
 +  expected-quorum-votes="​2"​ \
 +  stonith-enabled="​false"​
 +</​sxh>​
 +====== Pacemaker ======
 +
 +Para o Pacemaker ser configurado ser utilizado o utilitário de linha de comando crm.
 +
 +Através do crm é possível criar tipos básicos e avançados de cluster, regras, nodes de failback e failover, monitoramento,​ migração entre outros.
 +
 +Vamos listar os recursos do tipo OCF
 +<sxh bash>
 +crm ra list ocf
 +AoEtarget ​          ​AudibleAlarm ​       CTDB                ClusterMon ​         Delay               ​Dummy ​              ​EvmsSCC ​            Evmsd
 +Filesystem ​         HealthCPU ​          ​HealthSMART ​        ​ICP ​                ​IPaddr ​             IPaddr2 ​            ​IPsrcaddr ​          ​IPv6addr
 +LVM                 ​LinuxSCSI ​          ​MailTo ​             ManageRAID ​         ManageVE ​           Pure-FTPd ​          ​Raid1 ​              Route
 +SAPDatabase ​        ​SAPInstance ​        ​SendArp ​            ​ServeRAID ​          ​SphinxSearchDaemon ​ Squid               ​Stateful ​           SysInfo
 +SystemHealth ​       VIPArip ​            ​VirtualDomain ​      ​WAS ​                ​WAS6 ​               WinPopup ​           Xen                 ​Xinetd
 +anything ​           apache ​             controld ​           db2                 ​drbd ​               eDir88 ​             iSCSILogicalUnit ​   iSCSITarget
 +ids                 ​iscsi ​              ​ldirectord ​         mysql               ​mysql-proxy ​        ​nfsserver ​          ​o2cb ​               oracle
 +oralsnr ​            ​pgsql ​              ​ping ​               pingd               ​portblock ​          ​postfix ​            ​proftpd ​            ​rsyncd
 +scsi2reservation ​   sfex                syslog-ng ​          ​tomcat ​             vmware ​             ​
 +</​sxh>​
 +
 +Agora vamos listar os recursos do tipo lsb
 +<sxh bash>
 +crm ra list lsb
 +acpid                            atd                              atop                             ​bootlogd ​                        ​bootlogs
 +bootmisc.sh ​                     checkfs.sh ​                      ​checkroot.sh ​                    ​console-setup ​                   corosync
 +cron                             ​exim4 ​                           fancontrol ​                      ​halt ​                            ​hdparm
 +hostname.sh ​                     hwclock.sh ​                      ​hwclockfirst.sh ​                 ifupdown ​                        ​ifupdown-clean
 +kbd                              keyboard-setup ​                  ​killprocs ​                       lm-sensors ​                      logd
 +module-init-tools ​               mountall-bootclean.sh ​           mountall.sh ​                     mountdevsubfs.sh ​                ​mountkernfs.sh
 +mountnfs-bootclean.sh ​           mountnfs.sh ​                     mountoverflowtmp ​                ​mtab.sh ​                         networking
 +openhpid ​                        ​portmap ​                         postfix ​                         procps ​                          rc
 +rc.local ​                        ​rcS ​                             reboot ​                          ​rmnologin ​                       rsync
 +rsyslog ​                         sendsigs ​                        ​single ​                          ​ssh ​                             stop-bootlogd
 +stop-bootlogd-single ​            ​sudo ​                            ​udev ​                            ​udev-mtab ​                       umountfs
 +umountnfs.sh ​                    ​umountroot ​                      ​urandom ​                         virtualbox-ose-guest-utils ​      ​x11-common
 +</​sxh>​
 +
 +Agora vamos desabilitar o quorum para não recebermos erros durante a configuração dos recursos, podemos executar em algum dos dois nodos
 +<sxh bash>
 +crm configure property no-quorum-policy=ignore
 +</​sxh>​
 +
 +====== Configuração de Recurso Endereço IP ======
 +
 +Para poder prover a movimentação de serviços entre os nós do cluster sem a necessidade de alterarmos o endereço IP do serviço, o endereço IP associado ao serviço deverá ser configurado como um recurso para que ele possa ser movido livremente entre os nós do cluster junto com o serviço.
 +
 +
 +Agora vamos criar um recurso do tipo endereço IP 10.101.0.200 usando o RA IPaddr2.
 +<sxh bash>
 +crm configure primitive R_IP_Apache ocf:​heartbeat:​IPaddr2 params ip=10.101.0.200 cidr_netmask=255.255.255.0 nic=eth0 op monitor interval=10s
 +</​sxh>​
 +
 +Agora vamos verificar o nosso recurso
 +<sxh bash>
 +crm_mon -1
 +============
 +Last updated: Fri Jan  4 15:26:23 2013
 +Stack: openais
 +Current DC: debian25 - partition with quorum
 +Version: 1.0.9-74392a28b7f31d7ddc86689598bd23114f58978b
 +2 Nodes configured, 2 expected votes
 +1 Resources configured.
 +============
 +
 +Online: [ debian25 debian26 ]
 +
 + ​R_IP_Apache ​ (ocf::​heartbeat:​IPaddr2):​ Started debian25
 +</​sxh>​
 +
 +Aqui nós não definimos em qual servidor o recurso deve ser alocado, com isso o Pacemaker já fez isso.
 +
 +Agora vamos consultar o endereço ip configurado no servidor debian25 que é no Nodo1
 +<sxh bash>
 +ip addr show dev eth0
 +2: eth0: <​BROADCAST,​MULTICAST,​UP,​LOWER_UP>​ mtu 1500 qdisc pfifo_fast state UP qlen 1000
 +    link/ether 08:​00:​27:​a2:​83:​04 brd ff:​ff:​ff:​ff:​ff:​ff
 +    inet 10.101.0.25/​24 brd 10.101.0.255 scope global eth0
 +    inet 10.101.0.200/​24 brd 10.101.0.255 scope global secondary eth0
 +    inet6 fe80::​a00:​27ff:​fea2:​8304/​64 scope link 
 +       ​valid_lft forever preferred_lft forever
 +</​sxh>​
 +
 +Agora vamos testar, vamos desligar o servidor Nodo1 aonde esta o nosso recurso alocado.
 +<sxh bash>
 +shutdown -h now
 +</​sxh>​
 +
 +Agora no Nodo2 vamos consultar os endereços ip
 +<sxh bash>
 +ip addr show dev eth0
 +2: eth0: <​BROADCAST,​MULTICAST,​UP,​LOWER_UP>​ mtu 1500 qdisc pfifo_fast state UP qlen 1000
 +    link/ether 08:​00:​27:​8c:​3b:​93 brd ff:​ff:​ff:​ff:​ff:​ff
 +    inet 10.101.0.26/​24 brd 10.101.0.255 scope global eth0
 +    inet 10.101.0.200/​24 brd 10.101.0.255 scope global secondary eth0
 +    inet6 fe80::​a00:​27ff:​fe8c:​3b93/​64 scope link 
 +       ​valid_lft forever preferred_lft forever
 +</​sxh>​
 +
 +Note que o nosso recurso agora está no servidor Nodo2, vamos consultar os nossos recursos
 +<sxh bash>
 +crm_mon -1
 +============
 +Last updated: Fri Jan  4 15:30:17 2013
 +Stack: openais
 +Current DC: debian26 - partition WITHOUT quorum
 +Version: 1.0.9-74392a28b7f31d7ddc86689598bd23114f58978b
 +2 Nodes configured, 2 expected votes
 +1 Resources configured.
 +============
 +
 +Online: [ debian26 ]
 +OFFLINE: [ debian25 ]
 +
 + ​R_IP_Apache ​ (ocf::​heartbeat:​IPaddr2):​ Started debian26
 +</​sxh>​
 +
 +Note que o pacemaker já notou que o debian25 está OFFLINE. Agora vamos ligar ele novamente
 +
 +Agora vamos consultar os nossos recursos novamente
 +<sxh bash>
 +crm_mon -1
 +============
 +Last updated: Fri Jan  4 15:31:16 2013
 +Stack: openais
 +Current DC: debian26 - partition with quorum
 +Version: 1.0.9-74392a28b7f31d7ddc86689598bd23114f58978b
 +2 Nodes configured, 2 expected votes
 +1 Resources configured.
 +============
 +
 +Online: [ debian25 debian26 ]
 +
 + ​R_IP_Apache ​ (ocf::​heartbeat:​IPaddr2):​ Started debian25
 +</​sxh>​
 +
 +Note que agora o recurso voltou para o servidor debian25.
 +
 +====== Configuração de recursos para monitoramento de serviços ======
 +
 +
 +Agora vamos instalar o apache nos dois nodos para utilizarmos o recurso para monitoramento de serviços
 +<sxh bash>
 +aptitude install apache2 -y
 +</​sxh>​
 +
 +Agora no Nodo1 vamos deixar o index.html da seguinte forma
 +<sxh bash>
 +vim /​var/​www/​index.html
 +<​html><​body><​h1>​Debian 25</​h1>​
 +</​body></​html>​
 +</​sxh>​
 +
 +Agora no Nodo2 vamos deixar o index.html da seguinte forma
 +<sxh bash>
 +vim /​var/​www/​index.html
 +<​html><​body><​h1>​Debian 26</​h1>​
 +</​body></​html>​
 +</​sxh>​
 +
 +Agora vamos parar o apache nos dois nodos
 +<sxh bash>
 +/​etc/​init.d/​apache2 stop
 +</​sxh>​
 +
 +Agora vamos configurar um recurso para monitorar o apache2
 +<sxh bash>
 +crm configure primitive R_Apache lsb:apache2
 +</​sxh>​
 +
 +Agora vamos consultar os recursos
 +<sxh bash>
 +crm_mon -1
 +============
 +Last updated: Fri Jan  4 15:36:16 2013
 +Stack: openais
 +Current DC: debian26 - partition with quorum
 +Version: 1.0.9-74392a28b7f31d7ddc86689598bd23114f58978b
 +2 Nodes configured, 2 expected votes
 +2 Resources configured.
 +============
 +
 +Online: [ debian25 debian26 ]
 +
 + ​R_IP_Apache ​ (ocf::​heartbeat:​IPaddr2):​ Started debian25
 + ​R_Apache (lsb:​apache2): ​ Started debian26
 +</​sxh>​
 +
 +Note que o recurso foi alocado no servidor debian26, vamos acessar então http://​10.101.0.26 o acesso vai estar ok pois o Pacemaker vai subir o serviço do apache automaticamente.
 +
 +====== Criação de Grupos de Recursos ======
 +
 +
 +Para facilitar a movimentação e o gerenciamento de recursos associados a um serviço, podemos agrupar todos esses recursos em um único grupo de recursos. Assim ao definirmos uma localização para o grupo, todos os recursos serão movidos para a localização desejada.
 +
 +Vamos levar em consideração o nosso servidor apache que precisa de um endereço ip para ser acessado, e nos nossos recursos o ip está em um servidor e o serviço do apache está em outro servidor, para resolvermos isso vamos criar um grupo
 +<sxh bash>
 +crm configure group G_HTTP_Server R_Apache R_IP_Apache
 +</​sxh>​
 +
 +Agora vamos consultar os nossos recursos novamente
 +<sxh bash>
 +crm_mon -1
 +============
 +Last updated: Fri Jan  4 15:41:56 2013
 +Stack: openais
 +Current DC: debian26 - partition with quorum
 +Version: 1.0.9-74392a28b7f31d7ddc86689598bd23114f58978b
 +2 Nodes configured, 2 expected votes
 +1 Resources configured.
 +============
 +
 +Online: [ debian25 debian26 ]
 +
 + ​Resource Group: G_HTTP_Server
 +     ​R_Apache (lsb:​apache2): ​ Started debian25
 +     ​R_IP_Apache ​ (ocf::​heartbeat:​IPaddr2):​ Started debian25
 +</​sxh>​
 +
 +Note que agora tanto o ip quando o serviço do apache estão no servidor debian25, vamos acessar ele em http://​10.101.0.200 e vamos ter o acesso corretamente.
 +
 +====== Configuração das localizações de Recursos ======
 +
 +
 +Agora vamos ver como fazemos para definir o local padrão para o G_HTTP_Server sendo o servidor debian26
 +<sxh bash>
 +crm configure location L_HTTP_Server G_HTTP_Server 100: 10.101.0.26
 +</​sxh>​
 +
 +Agora vamos consultar os nossos recursos
 +<sxh bash>
 +crm_mon -1
 +============
 +Last updated: Fri Jan  4 15:47:39 2013
 +Stack: openais
 +Current DC: debian26 - partition with quorum
 +Version: 1.0.9-74392a28b7f31d7ddc86689598bd23114f58978b
 +2 Nodes configured, 2 expected votes
 +1 Resources configured.
 +============
 +
 +Online: [ debian25 debian26 ]
 +
 + ​Resource Group: G_HTTP_Server
 +     ​R_Apache (lsb:​apache2): ​ Started debian25
 +     ​R_IP_Apache ​ (ocf::​heartbeat:​IPaddr2):​ Started debian25
 +</​sxh>​
 +
 +Ele não migrou os recursos pois os recursos estão em funcionamento,​ agora vamos verificar a configuração do crm
 +<sxh bash>
 +crm configure show
 +node debian25
 +node debian26
 +primitive R_Apache lsb:apache2
 +primitive R_IP_Apache ocf:​heartbeat:​IPaddr2 \
 +  params ip="​10.101.0.200"​ cidr_netmask="​255.255.255.0"​ nic="​eth0"​ \
 +  op monitor interval="​10s"​
 +group G_HTTP_Server R_Apache R_IP_Apache
 +location L_HTTP_Server G_HTTP_Server 100: 10.101.0.26
 +property $id="​cib-bootstrap-options"​ \
 +  dc-version="​1.0.9-74392a28b7f31d7ddc86689598bd23114f58978b"​ \
 +  cluster-infrastructure="​openais"​ \
 +  expected-quorum-votes="​2"​ \
 +  stonith-enabled="​false"​ \
 +  no-quorum-policy="​ignore
 +</​sxh>​
 +
 +Como ele não migrou vamos mandar migrar manualmente,​ aqui precisamos passar o nome do nodo ao invés do ip
 +<sxh bash>
 +crm resource migrate G_HTTP_Server debian26
 +</​sxh>​
 +
 +Agora vamos consultar os nossos recursos
 +<sxh bash>
 +crm_mon -1
 +============
 +Last updated: Fri Jan  4 15:51:04 2013
 +Stack: openais
 +Current DC: debian26 - partition with quorum
 +Version: 1.0.9-74392a28b7f31d7ddc86689598bd23114f58978b
 +2 Nodes configured, 2 expected votes
 +1 Resources configured.
 +============
 +
 +Online: [ debian25 debian26 ]
 +
 + ​Resource Group: G_HTTP_Server
 +     ​R_Apache (lsb:​apache2): ​ Started debian26
 +     ​R_IP_Apache ​ (ocf::​heartbeat:​IPaddr2):​ Started debian26
 +</​sxh>​
 +
 +Agora vamos acessar novamente http://​10.101.0.200 e vamos notar que temos a identificação do debian26 :D
 +
 +====== Manipulando Recursos ======
 +
 +
 +Para parar um recurso podemos fazer da seguinte forma
 +<sxh bash>
 +crm resource stop R_Apache
 +</​sxh>​
 +
 +Aqui no exemplo acima mandamos parar o recurso do apache, vamos consultar os recursos
 +<sxh bash>
 +crm_mon -1
 +============
 +Last updated: Fri Jan  4 15:53:15 2013
 +Stack: openais
 +Current DC: debian26 - partition with quorum
 +Version: 1.0.9-74392a28b7f31d7ddc86689598bd23114f58978b
 +2 Nodes configured, 2 expected votes
 +1 Resources configured.
 +============
 +
 +Online: [ debian25 debian26 ]
 +</​sxh>​
 +
 +Note que não temos nada mais funcionando pois o R_Apache pertence ao G_HTTP que tem o recurso do apache e o recurso do ip, então temos que cuidar quando formos mandar baixar algum serviços.
 +
 +Para iniciar um recurso podemos fazer da seguinte forma
 +<sxh bash>
 +crm resource start R_Apache
 +</​sxh>​
 +
 +Agora vamos consultar os nossos recursos novamente
 +<sxh bash>
 +crm_mon -1
 +============
 +Last updated: Fri Jan  4 15:55:10 2013
 +Stack: openais
 +Current DC: debian26 - partition with quorum
 +Version: 1.0.9-74392a28b7f31d7ddc86689598bd23114f58978b
 +2 Nodes configured, 2 expected votes
 +1 Resources configured.
 +============
 +
 +Online: [ debian25 debian26 ]
 +
 + ​Resource Group: G_HTTP_Server
 +     ​R_Apache (lsb:​apache2): ​ Started debian26
 +     ​R_IP_Apache ​ (ocf::​heartbeat:​IPaddr2):​ Started debian26
 +</​sxh>​
 +
 +Note que agora temos os nossos recursos funcionando novamente
 +
 +
 +Podemos mandar listar somente os recursos da seguinte forma
 +<sxh bash>
 +crm resource list
 + ​Resource Group: G_HTTP_Server
 +     ​R_Apache (lsb:​apache2) Started ​
 +     ​R_IP_Apache ​ (ocf::​heartbeat:​IPaddr2) Started ​
 +</​sxh>​
 +
 +Para remover um recurso podemos fazer da seguinte forma
 +<sxh bash>
 +crm configure delete R_Apache
 +</​sxh>​
 +
 +Podemos colocar um nodo em standby da seguinte forma
 +<sxh bash>
 +crm node standby debian26
 +</​sxh>​
 +
 +Agora vamos consultar os nossos recursos
 +<sxh bash>
 +crm_mon -1
 +============
 +Last updated: Fri Jan  4 15:58:04 2013
 +Stack: openais
 +Current DC: debian26 - partition with quorum
 +Version: 1.0.9-74392a28b7f31d7ddc86689598bd23114f58978b
 +2 Nodes configured, 2 expected votes
 +1 Resources configured.
 +============
 +
 +Node debian26: standby
 +Online: [ debian25 ]
 +
 + ​Resource Group: G_HTTP_Server
 +     ​R_Apache (lsb:​apache2): ​ Started debian25
 +     ​R_IP_Apache ​ (ocf::​heartbeat:​IPaddr2):​ Started debian25
 +</​sxh>​
 +
 +Note que os recursos foram migrados automaticamente para o nodo debian25.
 +
 +Agora vamos deixar o nodo online novamente podemos fazer da seguinte forma
 +<sxh bash>
 +crm node online debian26
 +</​sxh>​
 +
 +Agora vamos consultar os nossos recursos novamente
 +<sxh bash>
 +crm_mon -1
 +============
 +Last updated: Fri Jan  4 15:59:16 2013
 +Stack: openais
 +Current DC: debian26 - partition with quorum
 +Version: 1.0.9-74392a28b7f31d7ddc86689598bd23114f58978b
 +2 Nodes configured, 2 expected votes
 +1 Resources configured.
 +============
 +
 +Online: [ debian25 debian26 ]
 +
 + ​Resource Group: G_HTTP_Server
 +     ​R_Apache (lsb:​apache2): ​ Started debian26
 +     ​R_IP_Apache ​ (ocf::​heartbeat:​IPaddr2):​ Started debian26
 +</​sxh>​
 +
 +Note que os recursos voltaram para o servidor padrão que é o debian26.
 +
 +Podemos editar a configuração do crm da seguinte forma também, use estão opção somente em última alternativa.
 +<sxh bash>
 +crm configure edit
 +node debian25
 +node debian26 \
 +        attributes standby="​off"​
 +primitive R_Apache lsb:apache2 \
 +        meta target-role="​Started"​
 +primitive R_IP_Apache ocf:​heartbeat:​IPaddr2 \
 +        params ip="​10.101.0.200"​ cidr_netmask="​255.255.255.0"​ nic="​eth0"​ \
 +        op monitor interval="​10s"​
 +group G_HTTP_Server R_Apache R_IP_Apache
 +location L_HTTP_Server G_HTTP_Server 100: 10.101.0.26
 +location cli-prefer-G_HTTP_Server G_HTTP_Server \
 +        rule $id="​cli-prefer-rule-G_HTTP_Server"​ inf: #uname eq debian26
 +property $id="​cib-bootstrap-options"​ \
 +        dc-version="​1.0.9-74392a28b7f31d7ddc86689598bd23114f58978b"​ \
 +        cluster-infrastructure="​openais"​ \
 +        expected-quorum-votes="​2"​ \
 +        stonith-enabled="​false"​ \
 +        no-quorum-policy="​ignore"​
 +</​sxh>​
 +
 +====== Monitoramento de Recursos ======
 +
 +Agora vamos ver uma lista de comandos úteis para o monitoramento dos recursos criados
 +
 +Monitorar os recursos do cluster com atualizações a cada 1 segundo
 +<sxh bash>
 +crm_mon --interval=1
 +</​sxh>​
 +
 +O comando acima é similar ao seguinte
 +<sxh bash>
 +watch crm_mon -1
 +</​sxh>​
 +
 +Monitorar os recursos do cluster e exibir a saída em um arquivo html
 +<sxh bash>
 +crm_mon --daemonize --as-html /​var/​www/​cluster.html
 +</​sxh>​
 +
 +Agora já podemos consultar o nosso relatório em http://​ip_servidor/​cluster.html
 +
 +Podemos deixar este comando para ser carregado na inicialização do sistema da seguinte forma
 +<sxh bash>
 +echo "​crm_mon --daemonize --as-html /​var/​www/​cluster.html"​ >> /​etc/​rc.local
 +</​sxh>​
 +
 +====== Instalando e configurando o Lcmc ======
 +
 +Podemos utilizar um cliente qualquer agora para instalar o Lcmc eu vou abordar a instalação no CentOS e no Debian :D porém podemos obter o .exe dele em http://​sourceforge.net/​projects/​lcmc/​files/?​source=directory ​
 +
 +Como é uma ferramenta feita em java vamos mandar instalar os pacotes necessários.
 +
 +No Debian precisamos instalar
 +<sxh bash>
 +aptitude install sun-java6-jdk -y
 +</​sxh>​
 +
 +No CentOS precisamos instalar
 +<sxh bash>
 +yum install java-1.7.0-openjdk -y
 +</​sxh>​
 +
 +Agora podemos obter o pacote para Debian
 +<sxh bash>
 +cd /usr/src
 +wget -c http://​wiki.douglasqsantos.com.br/​Downloads/​misc/​lcmc_1.4.5-1_all.deb
 +</​sxh>​
 +
 +Agora vamos mandar instalar ele
 +<sxh bash>
 +dpkg -i lcmc_1.4.5-1_all.deb
 +</​sxh>​
 +
 +Caso tenha alguma dependência não satisfeita podemos executar o comando abaixo para resolver.
 +<sxh bash>
 +apt-get -f install -y
 +</​sxh>​
 +
 +Agora vamos obter o pacote para CentOS
 +<sxh bash>
 +cd /usr/src
 +wget -c http://​wiki.douglasqsantos.com.br/​Downloads/​misc/​lcmc-1.4.5-1.noarch.rpm
 +</​sxh>​
 +
 +Agora vamos mandar instalar ele
 +<sxh bash>
 +yum install lcmc-1.4.5-1.noarch.rpm -y
 +</​sxh>​
 +
 +Agora para mandar executar ele precisamos executar o seguinte comando tanto no Debian quanto no CentOS
 +<sxh bash>
 +lcmc &
 +</​sxh>​
 +
 +Vamos ter algo como a imagem abaixo:
 +
 +{{:​lcmc1.png?​700|}}
 +
 +
 +Aqui nesta tela precisamos selecionar **Add Host / Wizard**:
 +    - Agora precisamos informar o endereço ip do Nodo1 ex: 10.101.0.25
 +    - Agora se a porta de ssh não for a padrão precisamos informar a porta e selecionar **Next**
 +    - Agora vamos selecionar **Next** novamente
 +    - Agora informe a senha do root
 +    - Talvez ele peça a senha 3 vezes
 +    - Agora selecione **Next**
 +    - Agora ele vai reconhecer qual o Distro que está sendo utilizada selecione **Next**
 +    - Agora ele vai dar uma reclamada que não temos o drbd instalado como não vamos utilizar ele selecine **Ski this dialog** e selecione **Next**
 +    - Agora selecione **Add Another Host**
 +    - Agora precisamos informar o endereço ip do Nodo2 ex: 10.101.0.26
 +    - Agora se a porta de ssh não for a padrão precisamos informar a porta e selecionar **Next**
 +    - Agora vamos selecionar **Next** novamente
 +    - Agora informe a senha do root Caso tenha configurado a troca de chaves não vamos precisar informar a senha do root
 +    - Talvez ele peça a senha 3 vezes
 +    - Agora selecione **Next**
 +    - Agora ele vai reconhecer qual o Distro que está sendo utilizada selecione **Next**
 +    - Agora ele vai dar uma reclamada que não temos o drbd instalado como não vamos utilizar ele selecine **Ski this dialog** e selecione **Next**
 +    - Agora selecione **Configure Cluster**
 +    - Agora precisamos informar um Nome para ele ex: Cluster_Matriz agora selecione **Next**
 +    - Agora precisamos informar quais Nodos pertencem a este cluster vamos selecionar o debian25 e o debian26 e vamos selecionar **Next**
 +    - Agora o sistema vai querer saber quem vamos utilizar o Heartbeat ou o Corosync/​OpenAIS vamos selecionar o Corosync/​OpenAIS e selecione **Next**
 +    - Agora ele vai nos mostrar a configuração do corosync.conf vamos deixar ela como está e vamos selecionar **Next/Keep Old Config**
 +    - Agora vamos ter um aviso que o DRBD e o Heartbeat não estão funcionando mais como não estamos utilizando eles selecione **Skip this dialog** e selecione **Next**
 +    - Agora deixe selecionado **Save** e selecione **Finish**
 +
 +Se tudo foi seguido como explicado vamos ter algo como a imagem abaixo:
 +
 +{{:​lcmc2.png?​700|}}
 +
 +Agora podemos fazer todas as configurações dos recursos pela interface gráfica :D
 +
 +====== Uso Real ======
 +
 +Situação:
 +
 +Temos um servidor de FW de borda que vai fazer o balanceamento dos serviços para a DMZ, e só temos um endereço ip público para este servidor, com isso não temos como setar um endereço ip em cada servidor e depois mais um para balanceamento,​ com isso podemos criar dois recursos um para o endereço ip e outro para o router do provedor de serviços, com isso temos um cluster com somente um endereço ip compartilhado,​ ou múltiplos endereços compartilhados entre os dois servers e com o GW compartilhado também sem a necessidade de colocar ips sem uso nos servers.
 +
 +Vamos levar em consideração o seguinte:
 +  * IP Nodo1: 10.101.0.25
 +  * IP Nodo2: 10.101.0.26
 +  * IP público: 200.200.200.1/​24
 +  * GW Público: 200.200.200.254
 +  * Interface pública: eth1
 +  * Nome do recurso IP: ClusterIP
 +  * Nome do recuros GW: ClusterGW
 +  * Nome do grupo de recursos: G_LVS
 +  * Nome da localização:​ L_Cluster_LVS
 +
 +Para utilizar o recurso de GW precisamos remover o route default da seguinte forma nos dois nodos
 +<sxh bash>
 +route del default
 +</​sxh>​
 +
 +Efetue a configuração do Corosync e não adicione recursos e depois vamos a configuração do nosso ambiente
 +
 +Vamos criar o recurso que vai conter o endereço ip compartilhado
 +<sxh bash>
 +crm configure primitive ClusterIP ocf:​heartbeat:​IPaddr2 params ip=200.200.200.1 cidr_netmask=24 nic=eth1 op monitor interval=30s
 +</​sxh>​
 +
 +Agora vamos criar o recurso que vai conter o endereço ip do GW
 +<sxh bash>
 +crm configure primitive ClusterGW ocf:​heartbeat:​Route params destination="​0.0.0.0/​0"​ device=eth1 gateway=200.200.200.254 op monitor interval=30s
 +</​sxh>​
 +
 +Agora vamos configurar um grupo de recursos para podermos agrupar o ip e o gw em um mesmo servidor, aqui leve em consideração a ordem dos recursos como é um ip e o gw então informa o recurso ip primeiro depois o gw pois se a interface não tiver um gw padrão, quando for inserir o gw e não tiver o ip da faixa vai ficar dando erro.
 +<sxh bash>
 +crm configure group G_LVS ClusterIP ClusterGW
 +</​sxh>​
 +
 +Agora vamos criar a configuração de onde vamos deixar os nossos recursos, vou deixar no nodo1
 +<sxh bash>
 +crm configure location L_Cluster_LVS G_LVS 100: 10.101.0.25
 +</​sxh>​
 +
 +Agora vamos criar a configuração de onde vamos deixar os nossos recursos caso o primeiro nodo caia
 +<sxh bash>
 +crm configure location L_Cluster_LVS2 G_LVS 50: 10.101.0.26
 +</​sxh>​
 +
 +Agora vamos listar a nossa configuração
 +<sxh bash>
 +crm configure show
 +node debian25
 +node debian26
 +primitive ClusterGW ocf:​heartbeat:​Route \
 +  params destination="​0.0.0.0/​0"​ device="​eth1"​ gateway="​200.200.200.254"​ \
 +  op monitor interval="​10"​ timeout="​20"​
 +primitive ClusterIP ocf:​heartbeat:​IPaddr2 \
 +  params ip="​200.200.200.1"​ cidr_netmask="​24"​ nic="​eth1"​ \
 +  op monitor interval="​30s"​
 +group G_LVS ClusterIP ClusterGW
 +location L_Cluster_LVS G_LVS 100: 10.101.0.25
 +location L_Cluster_LVS2 G_LVS 50: 10.101.0.26
 +property $id="​cib-bootstrap-options"​ \
 +  dc-version="​1.0.9-74392a28b7f31d7ddc86689598bd23114f58978b"​ \
 +  cluster-infrastructure="​openais"​ \
 +  expected-quorum-votes="​2"​ \
 +  stonith-enabled="​false"​
 +</​sxh>​
 +
 +Agora vamos visualizar os nossos recursos
 +<sxh bash>
 +crm_mon -1
 +============
 +Last updated: Mon Jan 14 11:59:53 2013
 +Stack: openais
 +Current DC: debian25 - partition with quorum
 +Version: 1.0.9-74392a28b7f31d7ddc86689598bd23114f58978b
 +2 Nodes configured, 2 expected votes
 +1 Resources configured.
 +============
 +
 +Online: [ debian25 debian26 ]
 +
 + ​Resource Group: G_LVS
 +     ​ClusterIP ​ (ocf::​heartbeat:​IPaddr2):​ Started debian25
 +     ​ClusterGW ​ (ocf::​heartbeat:​Route):​ Started debian25
 +</​sxh>​
 +
 +Agora vamos listar as rotas
 +<sxh bash>
 +route -n
 +Tabela de Roteamento IP do Kernel
 +Destino ​        ​Roteador ​       MáscaraGen. ​   Opções Métrica Ref   Uso Iface
 +200.200.200.0 ​  ​0.0.0.0 ​        ​255.255.255.0 ​  ​U ​    ​0 ​     0        0 eth1
 +10.101.0.0 ​     0.0.0.0 ​        ​255.255.255.0 ​  ​U ​    ​0 ​     0        0 eth0
 +0.0.0.0 ​        ​200.200.200.254 0.0.0.0 ​        ​UG ​   0      0        0 eth1
 +</​sxh>​
 +
 +OBS: Caso esteja utilizando em fw de borda com politica de fw drop precisamos ajustar algumas regras.
 +
 +No nodo1 tem que ser utilizado o ip dele mesmo pois ele trabalha com um tunnel.
 +<sxh bash>
 +iptables -A INPUT -p udp -m state --state NEW -s 10.101.0.25 -m multiport --dports 5404,5405 -j ACCEPT
 +iptables -A OUTPUT -p udp -m state --state NEW -d 10.101.0.25 -m multiport --dports 5404,5405 -j ACCEPT
 +iptables -A INPUT -p udp -m state --state NEW -s 226.94.1.1 -m multiport --dports 5404,5405 -j ACCEP
 +iptables -A INPUT -p udp -m state --state NEW -d 226.94.1.1 -m multiport --dports 5404,5405 -j ACCEP
 +</​sxh>​
 +
 +No nodo2 tem que ser utilizado o ip dele mesmo para liberar pois ele trabalha com um tunnel.
 +<sxh bash>
 +iptables -A INPUT -p udp -m state --state NEW -s 10.101.0.26 -m multiport --dports 5404,5405 -j ACCEPT
 +iptables -A OUTPUT -p udp -m state --state NEW -d 10.101.0.26 -m multiport --dports 5404,5405 -j ACCEPT
 +iptables -A INPUT -p udp -m state --state NEW -s 226.94.1.1 -m multiport --dports 5404,5405 -j ACCEP
 +iptables -A INPUT -p udp -m state --state NEW -d 226.94.1.1 -m multiport --dports 5404,5405 -j ACCEP
 +</​sxh>​
 +
 +====== Referências ======
 +  - http://​clusterlabs.org/​
 +  - http://​clusterlabs.org/​doc/​
 +  - http://​sourceforge.net/​projects/​lcmc/?​source=directory
 +  - http://​sourceforge.net/​projects/​lcmc/​files/?​source=navbar
 +  - http://​www.corosync.org/​
 +  - https://​github.com/​corosync/​corosync
 +  - https://​github.com/​corosync/​corosync/​blob/​master/​INSTALL
 +  - https://​github.com/​corosync/​corosync/​wiki/​_pages
 +  - man 5 corosync.conf