Differences

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

Link to this comparison view

corosync_pacemaker_lcmc_no_debian_wheezy_pt_br [2017/09/05 12:18] (current)
Line 1: Line 1:
 +====== Corosync + PaceMaker + Lcmc no Debian Wheezy ​ ======
 +
 +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: nodo1
 +     - IP: 192.168.25.40
 +    - Debian Squeeze Nodo2
 +     - Nome: nodo2
 +     - IP: 192.168.25.41
 +
 +Prepare o seu sistema com o seguinte script http://​wiki.douglasqsantos.com.br/​doku.php/​confinicialwheezy_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
 +192.168.25.40 ​    ​nodo1.douglasqsantos.com.br ​      nodo1
 +192.168.25.41 ​    ​nodo2.douglasqsantos.com.br ​      nodo2
 +</​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@nodo1
 +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@nodo2
 +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 192.168.25.41
 +The authenticity of host '​192.168.25.41 (192.168.25.41)'​ 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 '​192.168.25.41'​ (RSA) to the list of known hosts.
 +root@192.168.25.41'​s password: #SENHA
 +Now try logging into the machine, with "ssh '​192.168.25.41'",​ 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 192.168.25.40
 +The authenticity of host '​192.168.25.40 (192.168.25.40)'​ 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 '​192.168.25.40'​ (RSA) to the list of known hosts.
 +root@192.168.25.40'​s password: #SENHA
 +Now try logging into the machine, with "ssh '​192.168.25.40'",​ 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 192.168.25.40 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 192.168.25.41:/​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 192.168.25.0 é 192.168.25.0/​24 aqui mude para 
 +                #O endereço da sua rede ex: 192.168.0.0 que seria 192.168.0.0/​24
 +    bindnetaddr:​ 192.168.25.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 192.168.25.41:/​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[13885]:​ 2013/​06/​24_11:​47:​10 ERROR: unpack_resources:​ Resource start-up disabled since no STONITH resources have been defined
 +crm_mon[13885]:​ 2013/​06/​24_11:​47:​10 ERROR: unpack_resources:​ Either configure some or disable STONITH with the stonith-enabled option
 +crm_mon[13885]:​ 2013/​06/​24_11:​47:​10 ERROR: unpack_resources:​ NOTE: Clusters with shared data need STONITH to ensure data integrity
 +============
 +Last updated: Mon Jun 24 11:47:10 2013
 +Last change: Mon Jun 24 11:47:01 2013 via crmd on nodo1
 +Stack: openais
 +Current DC: nodo2 - partition with quorum
 +Version: 1.1.7-ee0730e13d124c3d58f00016c3376a1de5323cff
 +2 Nodes configured, 2 expected votes
 +0 Resources configured.
 +============
 +
 +Online: [ nodo1 nodo2 ]
 +</​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[3991]:​ 2013/​06/​24_11:​47:​09 ERROR: unpack_resources:​ Resource start-up disabled since no STONITH resources have been defined
 +crm_mon[3991]:​ 2013/​06/​24_11:​47:​09 ERROR: unpack_resources:​ Either configure some or disable STONITH with the stonith-enabled option
 +crm_mon[3991]:​ 2013/​06/​24_11:​47:​09 ERROR: unpack_resources:​ NOTE: Clusters with shared data need STONITH to ensure data integrity
 +============
 +Last updated: Mon Jun 24 11:47:09 2013
 +Last change: Mon Jun 24 11:47:01 2013 via crmd on nodo1
 +Stack: openais
 +Current DC: nodo2 - partition with quorum
 +Version: 1.1.7-ee0730e13d124c3d58f00016c3376a1de5323cff
 +2 Nodes configured, 2 expected votes
 +0 Resources configured.
 +============
 +
 +Online: [ nodo1 nodo2 ]
 +</​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: Mon Jun 24 11:47:16 2013
 +Last change: Mon Jun 24 11:47:01 2013 via crmd on nodo1
 +Stack: openais
 +Current DC: nodo2 - partition with quorum
 +Version: 1.1.7-ee0730e13d124c3d58f00016c3376a1de5323cff
 +2 Nodes configured, 2 expected votes
 +0 Resources configured.
 +============
 +
 +Online: [ nodo1 nodo2 ]
 +</​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 nodo1
 +node nodo2
 +property $id="​cib-bootstrap-options"​ \
 +  dc-version="​1.1.7-ee0730e13d124c3d58f00016c3376a1de5323cff"​ \
 +  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 nodo1
 +node nodo2
 +property $id="​cib-bootstrap-options"​ \
 +  dc-version="​1.1.7-ee0730e13d124c3d58f00016c3376a1de5323cff"​ \
 +  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
 +ASEHAagent.sh ​       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 ​              ​apache.sh
 +asterisk ​            ​clusterfs.sh ​        ​conntrackd ​          ​controld ​            ​db2 ​                 drbd                 ​eDir88 ​              ​ethmonitor ​          ​exportfs ​            ​fio ​                 fs.sh
 +iSCSILogicalUnit ​    ​iSCSITarget ​         ids                  ip.sh                iscsi                jboss                ldirectord ​          ​lvm.sh ​              ​lvm_by_lv.sh ​        ​lvm_by_vg.sh ​        lxc
 +mysql                mysql-proxy ​         mysql.sh ​            ​named.sh ​            ​netfs.sh ​            ​nfsclient.sh ​        ​nfsexport.sh ​        ​nfsserver ​           nfsserver.sh ​        ​nginx ​               o2cb
 +ocf-shellfuncs ​      ​openldap.sh ​         oracle ​              ​oracledb.sh ​         orainstance.sh ​      ​oralistener.sh ​      ​oralsnr ​             pgsql                ping                 ​pingd ​               portblock
 +postfix ​             postgres-8.sh ​       proftpd ​             rsyncd ​              ​samba.sh ​            ​script.sh ​           scsi2reservation ​    ​service.sh ​          ​sfex ​                ​smb.sh ​              ​svclib_nfslock
 +symlink ​             syslog-ng ​           tomcat ​              ​tomcat-5.sh ​         tomcat-6.sh ​         vm.sh                vmware ​         ​
 +</​sxh>​
 +
 +Agora vamos listar os recursos do tipo lsb
 +<sxh bash>
 +crm ra list lsb
 +acpid                     ​atd ​                      ​atop ​                     bootlogs ​                 bootmisc.sh ​              ​checkfs.sh ​               checkroot-bootclean.sh ​   checkroot.sh ​             console-setup
 +corosync ​                 cron                      dbus                      exim4                     ​halt ​                     hdparm ​                   hostname.sh ​              ​hwclock.sh ​               kbd
 +keyboard-setup ​           killprocs ​                ​kmod ​                     logd                      motd                      mountall-bootclean.sh ​    ​mountall.sh ​              ​mountdevsubfs.sh ​         mountkernfs.sh
 +mountnfs-bootclean.sh ​    ​mountnfs.sh ​              ​mtab.sh ​                  ​networking ​               nfs-common ​               openhpid ​                 pacemaker ​                ​postfix ​                  ​procps
 +rc                        rc.local ​                 rcS                       ​reboot ​                   rmnologin ​                ​rpcbind ​                  ​rsync ​                    ​rsyslog ​                  ​sendsigs
 +single ​                   ssh                       ​sudo ​                     udev                      udev-mtab ​                ​umountfs ​                 umountnfs.sh ​             umountroot ​               urandom
 +virtualbox-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 192.168.25.200 usando o RA IPaddr2.
 +<sxh bash>
 +crm configure primitive R_IP_Apache ocf:​heartbeat:​IPaddr2 params ip=192.168.25.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: Mon Jun 24 11:54:03 2013
 +Last change: Mon Jun 24 11:53:59 2013 via cibadmin on nodo1
 +Stack: openais
 +Current DC: nodo2 - partition with quorum
 +Version: 1.1.7-ee0730e13d124c3d58f00016c3376a1de5323cff
 +2 Nodes configured, 2 expected votes
 +1 Resources configured.
 +============
 +
 +Online: [ nodo1 nodo2 ]
 +
 + ​R_IP_Apache ​ (ocf::​heartbeat:​IPaddr2):​ Started nodo1
 +</​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 nodo1 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:​01:​18:​8b brd ff:​ff:​ff:​ff:​ff:​ff
 +    inet 192.168.25.40/​24 brd 192.168.25.255 scope global eth0
 +    inet 192.168.25.200/​24 brd 192.168.25.255 scope global secondary eth0
 +    inet6 fe80::​a00:​27ff:​fe01:​188b/​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:​66:​da:​85 brd ff:​ff:​ff:​ff:​ff:​ff
 +    inet 192.168.25.41/​24 brd 192.168.25.255 scope global eth0
 +    inet 192.168.25.200/​24 brd 192.168.25.255 scope global secondary eth0
 +    inet6 fe80::​a00:​27ff:​fe66:​da85/​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: Mon Jun 24 11:55:18 2013
 +Last change: Mon Jun 24 11:53:59 2013 via cibadmin on nodo1
 +Stack: openais
 +Current DC: nodo2 - partition WITHOUT quorum
 +Version: 1.1.7-ee0730e13d124c3d58f00016c3376a1de5323cff
 +2 Nodes configured, 2 expected votes
 +1 Resources configured.
 +============
 +
 +Online: [ nodo2 ]
 +OFFLINE: [ nodo1 ]
 +
 + ​R_IP_Apache ​ (ocf::​heartbeat:​IPaddr2):​ Started nodo2
 +</​sxh>​
 +
 +Note que o pacemaker já notou que o nodo1 está OFFLINE. Agora vamos ligar ele novamente
 +
 +Agora vamos consultar os nossos recursos novamente
 +<sxh bash>
 +crm_mon -1
 +============
 +Last updated: Mon Jun 24 11:56:00 2013
 +Last change: Mon Jun 24 11:53:59 2013 via cibadmin on nodo1
 +Stack: openais
 +Current DC: nodo2 - partition with quorum
 +Version: 1.1.7-ee0730e13d124c3d58f00016c3376a1de5323cff
 +2 Nodes configured, 2 expected votes
 +1 Resources configured.
 +============
 +
 +Online: [ nodo1 nodo2 ]
 +
 + ​R_IP_Apache ​ (ocf::​heartbeat:​IPaddr2):​ Started nodo2
 +</​sxh>​
 +
 +Note que agora o recurso voltou para o servidor nodo1.
 +====== 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>​Nodo 1</​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>​Nodo 2</​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: Mon Jun 24 11:57:53 2013
 +Last change: Mon Jun 24 11:57:50 2013 via cibadmin on nodo1
 +Stack: openais
 +Current DC: nodo2 - partition with quorum
 +Version: 1.1.7-ee0730e13d124c3d58f00016c3376a1de5323cff
 +2 Nodes configured, 2 expected votes
 +2 Resources configured.
 +============
 +
 +Online: [ nodo1 nodo2 ]
 +
 + ​R_IP_Apache ​ (ocf::​heartbeat:​IPaddr2):​ Started nodo2
 + ​R_Apache (lsb:​apache2): ​ Started nodo1
 +</​sxh>​
 +
 +Note que o recurso foi alocado no servidor nodo1, vamos acessar então http://​192.168.25.40 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: Mon Jun 24 11:59:35 2013
 +Last change: Mon Jun 24 11:59:19 2013 via cibadmin on nodo1
 +Stack: openais
 +Current DC: nodo2 - partition with quorum
 +Version: 1.1.7-ee0730e13d124c3d58f00016c3376a1de5323cff
 +2 Nodes configured, 2 expected votes
 +2 Resources configured.
 +============
 +
 +Online: [ nodo1 nodo2 ]
 +
 + ​Resource Group: G_HTTP_Server
 +     ​R_Apache (lsb:​apache2): ​ Started nodo1
 +     ​R_IP_Apache ​ (ocf::​heartbeat:​IPaddr2):​ Started nodo1
 +</​sxh>​
 +
 +Note que agora tanto o ip quando o serviço do apache estão no servidor nodo1, vamos acessar ele em http://​192.168.25.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 nodo2
 +<sxh bash>
 +crm configure location L_HTTP_Server G_HTTP_Server 100: nodo2
 +</​sxh>​
 +
 +Agora vamos consultar os nossos recursos
 +<sxh bash>
 +crm_mon -1
 +============
 +Last updated: Mon Jun 24 12:02:52 2013
 +Last change: Mon Jun 24 12:00:20 2013 via cibadmin on nodo1
 +Stack: openais
 +Current DC: nodo2 - partition with quorum
 +Version: 1.1.7-ee0730e13d124c3d58f00016c3376a1de5323cff
 +2 Nodes configured, 2 expected votes
 +2 Resources configured.
 +============
 +
 +Online: [ nodo1 nodo2 ]
 +
 + ​Resource Group: G_HTTP_Server
 +     ​R_Apache (lsb:​apache2): ​ Started nodo1
 +     ​R_IP_Apache ​ (ocf::​heartbeat:​IPaddr2):​ Started nodo1
 +</​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 nodo1
 +node nodo2
 +primitive R_Apache lsb:apache2
 +primitive R_IP_Apache ocf:​heartbeat:​IPaddr2 \
 +  params ip="​192.168.25.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: nodo2
 +property $id="​cib-bootstrap-options"​ \
 +  dc-version="​1.1.7-ee0730e13d124c3d58f00016c3376a1de5323cff"​ \
 +  cluster-infrastructure="​openais"​ \
 +  expected-quorum-votes="​2"​ \
 +  stonith-enabled="​false"​
 +</​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 nodo2
 +</​sxh>​
 +
 +Agora vamos consultar os nossos recursos
 +<sxh bash>
 +crm_mon -1
 +============
 +Last updated: Mon Jun 24 12:04:05 2013
 +Last change: Mon Jun 24 12:04:02 2013 via crm_resource on nodo1
 +Stack: openais
 +Current DC: nodo2 - partition with quorum
 +Version: 1.1.7-ee0730e13d124c3d58f00016c3376a1de5323cff
 +2 Nodes configured, 2 expected votes
 +2 Resources configured.
 +============
 +
 +Online: [ nodo1 nodo2 ]
 +
 + ​Resource Group: G_HTTP_Server
 +     ​R_Apache (lsb:​apache2): ​ Started nodo2
 +     ​R_IP_Apache ​ (ocf::​heartbeat:​IPaddr2):​ Started nodo2
 +</​sxh>​
 +
 +Agora vamos acessar novamente http://​192.168.25.200 e vamos notar que temos a identificação do nodo2 :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: Mon Jun 24 12:04:51 2013
 +Last change: Mon Jun 24 12:04:38 2013 via cibadmin on nodo1
 +Stack: openais
 +Current DC: nodo2 - partition with quorum
 +Version: 1.1.7-ee0730e13d124c3d58f00016c3376a1de5323cff
 +2 Nodes configured, 2 expected votes
 +2 Resources configured.
 +============
 +
 +Online: [ nodo1 nodo2 ]
 +</​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: Mon Jun 24 12:05:08 2013
 +Last change: Mon Jun 24 12:05:05 2013 via cibadmin on nodo1
 +Stack: openais
 +Current DC: nodo2 - partition with quorum
 +Version: 1.1.7-ee0730e13d124c3d58f00016c3376a1de5323cff
 +2 Nodes configured, 2 expected votes
 +2 Resources configured.
 +============
 +
 +Online: [ nodo1 nodo2 ]
 +
 + ​Resource Group: G_HTTP_Server
 +     ​R_Apache (lsb:​apache2): ​ Started nodo2
 +     ​R_IP_Apache ​ (ocf::​heartbeat:​IPaddr2):​ Started nodo2
 +</​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, obs: o recurso deve estar parado
 +<sxh bash>
 +crm configure delete R_Apache
 +</​sxh>​
 +
 +Podemos colocar um nodo em standby da seguinte forma
 +<sxh bash>
 +crm node standby nodo2
 +</​sxh>​
 +
 +Agora vamos consultar os nossos recursos
 +<sxh bash>
 +crm_mon -1
 +============
 +Last updated: Mon Jun 24 12:06:48 2013
 +Last change: Mon Jun 24 12:05:46 2013 via crm_attribute on nodo1
 +Stack: openais
 +Current DC: nodo2 - partition with quorum
 +Version: 1.1.7-ee0730e13d124c3d58f00016c3376a1de5323cff
 +2 Nodes configured, 2 expected votes
 +2 Resources configured.
 +============
 +
 +Node nodo2: standby
 +Online: [ nodo1 ]
 +
 + ​Resource Group: G_HTTP_Server
 +     ​R_Apache (lsb:​apache2): ​ Started nodo1
 +     ​R_IP_Apache ​ (ocf::​heartbeat:​IPaddr2):​ Started nodo1
 +</​sxh>​
 +
 +Note que os recursos foram migrados automaticamente para o nodo nodo1.
 +
 +Agora vamos deixar o nodo online novamente podemos fazer da seguinte forma
 +<sxh bash>
 +crm node online nodo2
 +</​sxh>​
 +
 +Agora vamos consultar os nossos recursos novamente
 +<sxh bash>
 +crm_mon -1
 +============
 +Last updated: Mon Jun 24 12:07:12 2013
 +Last change: Mon Jun 24 12:07:09 2013 via crm_attribute on nodo1
 +Stack: openais
 +Current DC: nodo2 - partition with quorum
 +Version: 1.1.7-ee0730e13d124c3d58f00016c3376a1de5323cff
 +2 Nodes configured, 2 expected votes
 +2 Resources configured.
 +============
 +
 +Online: [ nodo1 nodo2 ]
 +
 + ​Resource Group: G_HTTP_Server
 +     ​R_Apache (lsb:​apache2): ​ Started nodo2
 +     ​R_IP_Apache ​ (ocf::​heartbeat:​IPaddr2):​ Started nodo2
 +</​sxh>​
 +
 +Note que os recursos voltaram para o servidor padrão que é o nodo2.
 +
 +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 nodo1
 +node nodo2 \
 +        attributes standby="​off"​
 +primitive R_Apache lsb:apache2 \
 +        meta target-role="​Started"​
 +primitive R_IP_Apache ocf:​heartbeat:​IPaddr2 \
 +        params ip="​192.168.25.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: 192.168.25.41
 +location cli-prefer-G_HTTP_Server G_HTTP_Server \
 +        rule $id="​cli-prefer-rule-G_HTTP_Server"​ inf: #uname eq nodo2
 +property $id="​cib-bootstrap-options"​ \
 +        dc-version="​1.1.7-ee0730e13d124c3d58f00016c3376a1de5323cff"​ \
 +        cluster-infrastructure="​openais"​ \
 +        expected-quorum-votes="​2"​ \
 +        stonith-enabled="​false"​
 +</​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
 +============
 +Last updated: Mon Jun 24 12:08:07 2013
 +Last change: Mon Jun 24 12:07:09 2013 via crm_attribute on nodo1
 +Stack: openais
 +Current DC: nodo2 - partition with quorum
 +Version: 1.1.7-ee0730e13d124c3d58f00016c3376a1de5323cff
 +2 Nodes configured, 2 expected votes
 +2 Resources configured.
 +============
 +
 +Online: [ nodo1 nodo2 ]
 +
 + ​Resource Group: G_HTTP_Server
 +     ​R_Apache ​  ​(lsb:​apache2): ​ Started nodo2
 +     ​R_IP_Apache ​       (ocf::​heartbeat:​IPaddr2): ​      ​Started nodo2
 +</​sxh>​
 +
 +O comando acima é similar ao seguinte
 +<sxh bash>
 +watch crm_mon -1
 +Every 2,0s: crm_mon -1                                                                                                                                                                                               Mon Jun 24 12:08:44 2013
 +
 +============
 +Last updated: Mon Jun 24 12:08:44 2013
 +Last change: Mon Jun 24 12:07:09 2013 via crm_attribute on nodo1
 +Stack: openais
 +Current DC: nodo2 - partition with quorum
 +Version: 1.1.7-ee0730e13d124c3d58f00016c3376a1de5323cff
 +2 Nodes configured, 2 expected votes
 +2 Resources configured.
 +============
 +
 +Online: [ nodo1 nodo2 ]
 +
 + ​Resource Group: G_HTTP_Server
 +     ​R_Apache ​  ​(lsb:​apache2): ​ Started nodo2
 +     ​R_IP_Apache ​       (ocf::​heartbeat:​IPaddr2): ​      ​Started nodo2
 +</​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
 +
 +vamos ter algo como a imagem abaixo
 +
 +{{:​corosync01.png?​700|}}
 +
 +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.5.5-1_all.deb
 +</​sxh>​
 +
 +Agora vamos mandar instalar ele
 +<sxh bash>
 +dpkg -i lcmc_1.5.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.5.5-1.noarch.rpm
 +</​sxh>​
 +
 +Agora vamos mandar instalar ele
 +<sxh bash>
 +yum install lcmc-1.5.5-1.noarch.rpm -y
 +</​sxh>​
 +
 +Ou se preferir pode obter o executável para Windows
 +<sxh bash>
 +http://​wiki.douglasqsantos.com.br/​Downloads/​misc/​LCMC-1.5.5-setup.exe
 +</​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:
 +
 +{{:​lcmc01.png?​700|}}
 +
 +
 +Aqui nesta tela precisamos selecionar **Add Host / Wizard**:
 +    - Agora precisamos informar o endereço ip do Nodo1 ex: 192.168.25.40
 +    - 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: 192.168.25.41
 +    - 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 **Add Cluster/​Wizard**
 +    - 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 nodo1 e o nodo2 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:
 +
 +{{:​lcmc02.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: 192.168.25.40
 +  * IP Nodo2: 192.168.25.41
 +  * 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: nodo1
 +</​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: nodo2
 +</​sxh>​
 +
 +Agora vamos listar a nossa configuração
 +<sxh bash>
 + crm configure show
 +node nodo1
 +node nodo2 \
 +  attributes standby="​off"​
 +primitive ClusterGW ocf:​heartbeat:​Route \
 +  params destination="​0.0.0.0/​0"​ device="​eth1"​ gateway="​200.200.200.254"​ \
 +  op monitor interval="​30s"​
 +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: nodo1
 +location L_Cluster_LVS2 G_LVS 50: nodo2
 +property $id="​cib-bootstrap-options"​ \
 +  dc-version="​1.1.7-ee0730e13d124c3d58f00016c3376a1de5323cff"​ \
 +  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 Jun 24 12:38:29 2013
 +Last change: Mon Jun 24 12:37:43 2013 via cibadmin on nodo1
 +Stack: openais
 +Current DC: nodo2 - partition with quorum
 +Version: 1.1.7-ee0730e13d124c3d58f00016c3376a1de5323cff
 +2 Nodes configured, 2 expected votes
 +2 Resources configured.
 +============
 +
 +Online: [ nodo1 nodo2 ]
 +
 + ​Resource Group: G_LVS
 +     ​ClusterIP ​ (ocf::​heartbeat:​IPaddr2):​ Started nodo1
 +     ​ClusterGW ​ (ocf::​heartbeat:​Route):​ Started nodo1
 +</​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
 +0.0.0.0 ​        ​200.200.200.254 0.0.0.0 ​        ​UG ​   0      0        0 eth1
 +192.168.25.0 ​   0.0.0.0 ​        ​255.255.255.0 ​  ​U ​    ​0 ​     0        0 eth0
 +200.200.200.0 ​  ​0.0.0.0 ​        ​255.255.255.0 ​  ​U ​    ​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 192.168.25.40 -m multiport --dports 5404,5405 -j ACCEPT
 +iptables -A OUTPUT -p udp -m state --state NEW -d 192.168.25.40 -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 192.168.25.41 -m multiport --dports 5404,5405 -j ACCEPT
 +iptables -A OUTPUT -p udp -m state --state NEW -d 192.168.25.41 -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