8 Replies Latest reply on Apr 24, 2013 1:06 PM by adrianoschmidt

    configurando-ambiente-de-producao-no-jboss-as-7-1-2-jboss-eap-6-parte-2

    adrianoschmidt

      Olá,

       

      Estou seguindo o tutorial:

       

      http://jbossdivers.wordpress.com/2012/12/02/configurando-ambiente-de-producao-no-jboss-as-7-1-2-jboss-eap-6-parte-2/

       

      E fiquei com algumas dúvidas..

       

      Está escrito assim:

       

      Crie três novos perfis baseados no modo Domain e renomeie como abaixo:

       

      $ cp -Rap /usr/local/jboss/7.1.3/jboss-eap-6.0/domain  /usr/local/jboss/7.1.3/jboss-eap-6.0/master

      $ cp -Rap /usr/local/jboss/7.1.3/jboss-eap-6.0/domain  /usr/local/jboss/7.1.3/jboss-eap-6.0/slave01

      $ cp -Rap /usr/local/jboss/7.1.3/jboss-eap-6.0/domain  /usr/local/jboss/7.1.3/jboss-eap-6.0/slave02

       

      Enfim, fiz isso e fiz todas as demais configurações ditas no tutorial...

       

      Mais abaixo no tutorial está escrito:

       

      No meu ambiente possuo 3 servidores:

       

      Domain Controller + Apache Web Server: 192.168.0.128

      Hostr Controller 01: 192.168.0.140

      Hostr Controller 02: 192.168.0.117

       

      Se as 3 pastas (Domain Contoller (master), Hostr Controller 01 (slave01) e Hostr Controller 02 (slave02)) estão na mesma máquina, como podem ter IPs diferentes? Ou eu devo ter um JBoss em cada máquina e pra cada máquina copiar apenas a sua pasta. Na 192.168.0.140 por exemplo eu faço unzip do jboss e colo a pasta slave01... é isso?

       

      Outra dúvida, no meu ambiente, o Apache não fica na mesma máquina que o Domain Controller.. onde eu digo o IP do Apache? Ou é no Apache q eu digo IP do JBoss?

       

      Última dúvida.. Vou utilizar os JBoss em cluster.. minha ideia é ter um apache na frente com mod_cluster distribuindo as requisições para dois jboss (em máquinas distintas e em cluster).. porém, se eu tiver um Domain Controller em uma máquina, e esse servidor cair, vai parar tudo? quero utilizar cluster justamente para não ter um ponto na arquitetura que se cair pare tudo..

       

       

      Aguardo e desde já agradeço!

      Adriano Schmidt.

      http://www.localhost8080.com.br

        • 1. Re: configurando-ambiente-de-producao-no-jboss-as-7-1-2-jboss-eap-6-parte-2
          mauriciomag

          Oi Adriano Bom dia,

           

          Acho que vou parar de escrever no blog hein to deixando muitas dúvidas acho que to mais atrapalhando do que ajudando hahahaha... brincadeiras a parte é o seguinte:

           

          Se as 3 pastas (Domain Contoller (master), Hostr Controller 01 (slave01) e Hostr Controller 02 (slave02)) estão na mesma máquina, como podem ter IPs diferentes? Ou eu devo ter um JBoss em cada máquina e pra cada máquina copiar apenas a sua pasta. Na 192.168.0.140 por exemplo eu faço unzip do jboss e colo a pasta slave01... é isso?

           

          [pobreza on] Eu utilizei o mesmo S.O. CentoOS na máquina virtual para simular 3 servidores. Eu simulei isso utilizando 3 interfaces de rede cada uma com um IP diferente. [pobreza off]

           

          Então se voce for configurar em máquinas diferentes basta criar um perfil para cada maquina, por exemplo:

           

          Servidor / Host 1 ----> $ cp -Rap /usr/local/jboss/7.1.3/jboss-eap-6.0/domain  /usr/local/jboss/7.1.3/jboss-eap-6.0/master

          Servidor / Host 2 ----> $ cp -Rap /usr/local/jboss/7.1.3/jboss-eap-6.0/domain  /usr/local/jboss/7.1.3/jboss-eap-6.0/slave01

          Servidor / Host 3 ----> $ cp -Rap /usr/local/jboss/7.1.3/jboss-eap-6.0/domain  /usr/local/jboss/7.1.3/jboss-eap-6.0/slave02

           

          Outra dúvida, no meu ambiente, o Apache não fica na mesma máquina que o Domain Controller.. onde eu digo o IP do Apache? Ou é no Apache q eu digo IP do JBoss?

           

          Aqui voce vai ter que decidir se vai utilizar TCP ou UDP.

           

          No tutorial estou utilizando UDP pela facilidade porque quando utilizamos UDP as instâncias JBoss fica fazendo algo parecido com um "ping" (MCPM) em busca do proxy "Apache". No arquivo de configuração do Apache nós dizemos para aceitar esse ping com "EnableMCPMReceive on".

           

          Já que estamos utilizando UDP então é necessário que o ambiente esteja preparada para multicast. Para testes,  basta adicionar uma nova rota:

           

          route add -net 224.0.0.0 netmask 224.0.0.0 dev ethXYZ

           

          Na inicialização basta fazer o binding com a opção -b IP ou -Djboss.bind.address=IP.  Sendo assim os nós vão "encontrar" por MCPM o servidor Web configurado para isso com "EnableMCPMReceive on".  Não sei se falei besteira mas eu aprendi lendo a doc e consegui entender isso. 

           

          Já que citou o cluster um ponto importante é  o "ServerAdvertise on" que permite a "comunicação" entre os nós do cluster.

           

          Se for por TCP voce teria que configurar no JBoss, especificamente no subsystem do mod_cluster um atributo chamado "proxyList" ou ainda passar com parametro:

           

          -Djboss.mod_cluster.proxyList="192.168.0.110:80"

           

          Também teria que colocar "ServerAdvertise off"e "EnableMCPMReceive off".   Seria interessante utilizar o TCP ping algo como:

           

          <subsystem xmlns="urn:jboss:domain:jgroups:1.1" default-stack="tcp">

                      <stack name="udp">

                     .

                     .

                     .

                      </stack>

                      <stack name="tcp">

                          <transport type="TCP" socket-binding="jgroups-tcp" diagnostics-socket-binding="jgroups-diagnostics"/>

                          <protocol type="TCPPING">

                              <property name="initial_hosts">192.168.0.120[7600],192.168.0.130[7600]</property>

                              <property name="num_initial_members">2</property>

                              <property name="port_range">0</property>

                              <property name="timeout">2000</property>

                          </protocol>

                          <protocol type="MERGE2"/>

                          <protocol type="FD_SOCK" socket-binding="jgroups-tcp-fd"/>

                          <protocol type="FD"/>

                          <protocol type="VERIFY_SUSPECT"/>

                          <protocol type="BARRIER"/>

                          <protocol type="pbcast.NAKACK"/>

                          <protocol type="UNICAST2"/>

                          <protocol type="pbcast.STABLE"/>

                          <protocol type="pbcast.GMS"/>

                          <protocol type="UFC"/>

                          <protocol type="MFC"/>

                          <protocol type="FRAG2"/>

                      </stack>

                  </subsystem>

           

          Na inicialização teria que passar também o nome do node:

           

          -Djboss.node.name=node1

           

          Lembre-se também de alterar o transporte do infinispan para TCP:

           

          <cache-container name="web" default-cache="repl">

             <transport stack="tcp"/>

          </cache-container>

           

          Última dúvida.. Vou utilizar os JBoss em cluster.. minha ideia é ter um apache na frente com mod_cluster distribuindo as requisições para dois jboss (em máquinas distintas e em cluster).. porém, se eu tiver um Domain Controller em uma máquina, e esse servidor cair, vai parar tudo? quero utilizar cluster justamente para não ter um ponto na arquitetura que se cair pare tudo..

           

          Podemos fazer as seguintes afirmações:

           

          Se um Domain Controller cair as instâncias continuam respondendo, voce só perde o ponto de gerenciamento, deploy e configuração. Basta iniciar o Domain Controller com o mesmo IP utilizado inicialmente que os Host Controllers vão se conectar automaticamente.  Nesse caso teriar que existir um balanceamento de Hardware e deixar os dois domains configurados caso um caia o outro assume mas se não tiver esses recursos basta inciar manualmente mesmo como disse anteriormente.

           

          Existe uma maneira de criar um BKP do domain controller que não achei nem um pouco interessante podemos ver isso uma outra hora.

           

          Aconselho fortemente a leitura da documentação pois é bem importante ter um conceito do que realmente está sendo configurado.

           

          https://access.redhat.com/site/documentation/en-US/JBoss_Enterprise_Application_Platform/6-Beta/html/Administration_and_Configuration_Guide/index.html

           

          Lembrando que esse é um produto Enterprise e voce seria melhor auxiliado pelo suporte da propria Red Hat.

           

          Grande Abraço,

          Mauricio Magnani

          • 2. Re: configurando-ambiente-de-producao-no-jboss-as-7-1-2-jboss-eap-6-parte-2
            adrianoschmidt

            Show!

             

            Vamos lá!!

             

            Estou agora com o seguinte ambiente:

             

            Uma vm com CentOS com apache (IP 192.168.16.131)

            Uma vm com RHEL com o jboss para ser domain controller (IP 192.168.16.133)

            Uma vm com RHEL com o jboss para ser host controller (slave01) (IP 192.168.16.134)

             

            Nos 3 servidores eu executei o comando: route add -net 224.0.0.0 netmask 224.0.0.0 dev eth0

             

            E no meu RHEL domain controller eu rodei:

             

            jboss-eap-6.0/bin/domain.sh

            -Djboss.domain.base.dir=/usr/local/jboss/7.1.3/jboss-eap-6.0/master

            -Djboss.host.default.config=host-master.xml

            -Djboss.bind.address=192.168.16.133

            -Djboss.bind.address.management=192.168.16.133

             

            Ele subiu perfeitamente...

             

             

            No meu RHEL host controller eu rodei:

             

            jboss-eap-6.0/bin/domain.sh

            -Djboss.domain.base.dir=/usr/local/jboss/7.1.3/jboss-eap-6.0/slave01

            -Djboss.host.default.config=host-slave.xml

            -Djboss.domain.master.address=192.168.16.133

            -Djboss.bind.address.management=192.168.16.134

            -Djboss.bind.address=192.168.16.134

            -Djboss.server.name=server-one

             

            ele deu uma patinada mas iniciou:

             

            [Host Controller] 21:53:12,358 INFO  [org.xnio.nio] (MSC service thread 1-1) XNIO NIO Implementation Version 3.0.7.GA-redhat-1

            [Host Controller] 21:53:12,365 INFO  [org.jboss.remoting] (MSC service thread 1-1) JBoss Remoting version 3.2.14.GA-redhat-1

            [Host Controller] 21:53:12,565 INFO  [org.jboss.as.remoting] (MSC service thread 1-1) JBAS017100: Listening on 192.168.16.134:9999

            [Host Controller] 21:53:17,748 WARN  [org.jboss.as.host.controller] (Controller Boot Thread) JBAS010900: Could not connect to remote domain controller 192.168.16.133:9999: java.net.ConnectException: JBAS012144: Could not connect to remote://192.168.16.133:9999. The connection timed out

            [Host Controller] 21:53:23,762 WARN  [org.jboss.as.host.controller] (Controller Boot Thread) JBAS010900: Could not connect to remote domain controller 192.168.16.133:9999: java.net.ConnectException: JBAS012144: Could not connect to remote://192.168.16.133:9999. The connection timed out

            [Host Controller] 21:53:29,770 WARN  [org.jboss.as.host.controller] (Controller Boot Thread) JBAS010900: Could not connect to remote domain controller 192.168.16.133:9999: java.net.ConnectException: JBAS012144: Could not connect to remote://192.168.16.133:9999. The connection timed out

            [Host Controller] 21:53:35,153 INFO  [org.jboss.as.host.controller] (Controller Boot Thread) JBAS010922: Starting server server-one

            [Host Controller] 21:53:35,161 INFO  [org.jboss.as] (Controller Boot Thread) JBAS015874: JBoss EAP 6.0.1.GA (AS 7.1.3.Final-redhat-4) (Host Controller) started in 24390ms - Started 11 of 11 services (0 services are passive or on-demand)

            21:53:35,204 INFO  [org.jboss.as.process.Server:server-one.status] (ProcessController-threads - 3) JBAS012017: Starting process 'Server:server-one'

            [Server:server-one] 21:53:35,947 INFO  [org.jboss.modules] (main) JBoss Modules version 1.1.3.GA-redhat-1

             

             

             

             

            no meu domain controller apareceu isso:

             

            [Host Controller] 21:52:40,360 INFO  [org.jboss.as] (Controller Boot Thread) JBAS015951: Admin console listening on http://192.168.16.133:9990

            [Host Controller] 21:52:40,360 INFO  [org.jboss.as] (Controller Boot Thread) JBAS015874: JBoss EAP 6.0.1.GA (AS 7.1.3.Final-redhat-4) (Host Controller) started in 3485ms - Started 11 of 11 services (0 services are passive or on-demand)

            [Host Controller] 21:53:35,024 INFO  [org.jboss.as.domain] (slave-request-threads - 1) JBAS010918: Registered remote slave host "slave01", JBoss EAP 6.0.1.GA (AS 7.1.3.Final-redhat-4)

             

             

            mas o host controller continuou rodando o log e estourou esse erro:

             

             

            [Server:server-one] 21:53:57,772 INFO  [org.jboss.modcluster.ModClusterService] (ServerService Thread Pool -- 52) Initializing mod_cluster 1.2.3.Final-redhat-1

            [Server:server-one] 21:53:57,787 INFO  [org.jboss.modcluster.advertise.impl.AdvertiseListenerImpl] (ServerService Thread Pool -- 52) Listening to proxy advertisements on 225.0.1.106:23,364

            [Server:server-one] 21:54:06,944 WARN  [com.arjuna.ats.arjuna] (MSC service thread 1-2) ARJUNA012210: Unable to use InetAddress.getLocalHost() to resolve address.

            [Server:server-one] 21:54:07,117 INFO  [org.jboss.as.connector.subsystems.datasources] (MSC service thread 1-1) JBAS010400: Bound data source [java:jboss/datasources/ExampleDS]

            [Server:server-one] 21:54:07,161 INFO  [org.jboss.as] (Controller Boot Thread) JBAS015874: JBoss EAP 6.0.1.GA (AS 7.1.3.Final-redhat-4) started in 31794ms - Started 134 of 277 services (142 services are passive or on-demand)

            [Host Controller] 21:54:07,165 INFO  [org.jboss.as.host.controller] (proxy-threads - 1) JBAS010919: Registering server server-one

            [Server:server-one] 21:54:11,130 INFO  [org.jboss.modcluster.mcmp.impl.DefaultMCMPHandler] (ContainerBackgroundProcessor[StandardEngine[jboss.web]]) IO error sending command INFO to proxy 192.168.16.131/192.168.16.131:80: java.net.NoRouteToHostException: No route to host

            [Server:server-one]     at java.net.PlainSocketImpl.socketConnect(Native Method) [rt.jar:1.6.0_33]

            [Server:server-one]     at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351) [rt.jar:1.6.0_33]

            [Server:server-one]     at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213) [rt.jar:1.6.0_33]

            [Server:server-one]     at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200) [rt.jar:1.6.0_33]

            [Server:server-one]     at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366) [rt.jar:1.6.0_33]

            [Server:server-one]     at java.net.Socket.connect(Socket.java:529) [rt.jar:1.6.0_33]

            [Server:server-one]     at org.jboss.modcluster.mcmp.impl.DefaultMCMPHandler$Proxy.getConnection(DefaultMCMPHandler.java:821)

            [Server:server-one]     at org.jboss.modcluster.mcmp.impl.DefaultMCMPHandler$Proxy.getConnectionWriter(DefaultMCMPHandler.java:844)

            [Server:server-one]     at org.jboss.modcluster.mcmp.impl.DefaultMCMPHandler.sendRequest(DefaultMCMPHandler.java:481)

            [Server:server-one]     at org.jboss.modcluster.mcmp.impl.DefaultMCMPHandler.sendRequest(DefaultMCMPHandler.java:582)

            [Server:server-one]     at org.jboss.modcluster.mcmp.impl.DefaultMCMPHandler.status(DefaultMCMPHandler.java:369)

            [Server:server-one]     at org.jboss.modcluster.mcmp.impl.DefaultMCMPHandler.status(DefaultMCMPHandler.java:349)

            [Server:server-one]     at org.jboss.modcluster.ModClusterService.status(ModClusterService.java:468)

            [Server:server-one]     at org.jboss.modcluster.container.catalina.CatalinaEventHandlerAdapter.lifecycleEvent(CatalinaEventHandlerAdapter.java:244)

            [Server:server-one]     at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:115) [jbossweb-7.0.17.Final-redhat-1.jar:]

            [Server:server-one]     at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1338) [jbossweb-7.0.17.Final-redhat-1.jar:]

            [Server:server-one]     at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1605) [jbossweb-7.0.17.Final-redhat-1.jar:]

            [Server:server-one]     at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1591) [jbossweb-7.0.17.Final-redhat-1.jar:]

            [Server:server-one]     at java.lang.Thread.run(Thread.java:662) [rt.jar:1.6.0_33]

            [Server:server-one]

             

             

            Estou pesquisando por esse erro mas não encontro nada.. acredito que seja alguma configuração de rede no linux.. ou não?

             

            Abraço!

            Adriano Schmidt

            • 3. Re: configurando-ambiente-de-producao-no-jboss-as-7-1-2-jboss-eap-6-parte-2
              mauriciomag

              Oi Adriano,

               

              Bacana é isso mesmo... vejo que vc conseguiu compreender bem e está indo no caminha certo.

               

              O erro java.net.NoRouteToHostException: No route to host ocorreu pois o nós tentou "pingar" o Proxy via MCPM e não conseguiu encontrar... pode ser um Firewall ou uma má configuração de rede.

               

              Te aconselho 2 testes:

               

              Test com Telnet

               

              telnet 192.168.16.131 80

               

              Verificar se o status foi OK se consegui conectar certinho!

               

              Test com JGroups para Multicast

               

              No servidor onde está o Apache execute:

               

              java -cp jgroups.jar org.jgroups.tests.McastReceiverTest -mcast_addr 233.3.4.5 -port 1110

               

              No servidor onde está o Host Controller execute:

               

              java -cp  jgroups.jar org.jgroups.tests.McastSenderTest -mcast_addr 233.3.4.5 -port 1110

               

              O jgroups.jar está nesse link: https://www.dropbox.com/s/7irakj8vx0mphlc/jgroups.jar

               

              Verifique se ocorreu a comunicação. Lembrando que o multicast deve estar configurado.

               

              Abs

              1 of 1 people found this helpful
              • 4. Re: configurando-ambiente-de-producao-no-jboss-as-7-1-2-jboss-eap-6-parte-2
                adrianoschmidt

                deeeeeeeeeeeu certooooooo

                 

                tive que desabilitar o iptables...

                 

                iptables -F nos 3 servidores...

                 

                aí funcionou..

                 

                vou deixar assim por agora e depois vejo certinho como funciona o iptables pra fazer as regras certinhas...

                 

                Obrigadão!!

                Adriano Schmidt

                • 5. Re: configurando-ambiente-de-producao-no-jboss-as-7-1-2-jboss-eap-6-parte-2
                  mauriciomag

                  Hahaha Bacana....

                   

                  Aqui tem um post que eu fiz sobre regras de firewall --->  https://jbossdivers.wordpress.com/2013/03/06/regras-de-firewall-no-linux/

                   

                  Se a questão foi resolvida marque como Correct Answer.

                   

                  Abs

                  • 6. Re: configurando-ambiente-de-producao-no-jboss-as-7-1-2-jboss-eap-6-parte-2
                    rimolive

                    O ideal teria sido criar uma discussion para cada problema encontrado, pois assim a gente marcava uma Correct Answer para cada problema... =)

                     

                    No entanto, acredito ser possível marcar mais de uma Helpful Answer, portanto se puder também marcar as outras dessa forma ajuda outras pessoas a encontrarem as soluções mais fácil.

                     

                    A propósito: Já falei pra vocês o quanto eu gosto dessa coisa de "comunidade"? Continuem contribuindo pessoal, fico muito grato por encontrar uma discussão como essa aqui.

                    • 7. Re: configurando-ambiente-de-producao-no-jboss-as-7-1-2-jboss-eap-6-parte-2
                      mauriciomag

                      Boa idéia Martina

                       

                      Fica bem mais fácil encontrar as soluções... como dica também tentar utilizar titulos mais sugestivos na discussion.

                       

                       

                      Abs

                      • 8. Re: configurando-ambiente-de-producao-no-jboss-as-7-1-2-jboss-eap-6-parte-2
                        adrianoschmidt

                        podem deixar, nas próximas discussões abrirei um tópico para cada dúvida e com títulos mais claros : )