Load Balancing do JBoss App Server com Apache usando mod_jk

2

Estou tentando configurar um JBoss Cluster com o Apache Load Balancing. Mas quando eu digito localhost no meu navegador, ele deve ser redirecionado (proxied?) Para a porta 8080 (JBoss), mas não está sendo redirecionado.

Aqui está minha configuração de ambiente:

Ubuntu 11.04
JBoss AS 5.1-GA
Apache 2
mod_jk 1.2.30

Minha configuração é parecida com a seguinte:

Apache Web Server: 192.168.1.12:80 - lb1
JBoss App Server 1: 192.168.1.12:8080 - app1
JBoss App Server 2: 192.168.1.23:8080 - app2

Meu loadbalancer e JBoss1 estão na mesma máquina. (Eu até tentei mantê-lo em duas máquinas diferentes).

Eu copiei o arquivo mod_jk.so para /usr/lib/apache2/modules/mod_jk.so e executei os seguintes passos:

  1. Agora execute o seguinte # echo LoadModule jk_module /usr/lib/apache2/modules/mod_jk.so" > /etc/apache2/mods-available/jk.load
  2. e # touch /etc/apache2/mods-available/jk.conf
  3. e # touch /etc/apache2/workers.conf
  4. # a2enmod jk

Eu criei o arquivo /etc/apache2/workers.conf na máquina lb1

# Defining the workers list:
worker.list=loadbalancer,status
# first worker properties, we use the AJB13 connection type:
worker.worker1.type=ajp13
worker.worker1.connection_pool_size=20
worker.worker1.host=192.168.1.12
worker.worker1.port=8080
worker.worker1.lbfactor=1
# second worker properties, we use the AJB13 connection type:
worker.worker2.type=ajp13
worker.worker2.connection_pool_size=20
worker.worker2.host=192.168.1.23
worker.worker2.port=8080
worker.worker2.lbfactor=1
# No we set the load balancing config
worker.loadbalancer.type=lb
worker.loadbalancer.sticky_session=true
worker.loadbalancer.balance_workers=worker1,worker2
worker.status.type=status

Eu criei o arquivo /etc/apache2/mods-available/jk.conf :

<IfModule mod_jk.c>
# The Jk shared mem location
JkShmFile /var/log/apache2/mod_jk.shm

# Jk logs
JkLogFile /var/log/apache2/mod_jk.log
# Jk loglevel
JkLogLevel info
# Jk logformat
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "

# Our workers config
JkWorkersFile /etc/apache2/workers.conf

# The most important:
# We will send eveything (/*) to our loadbalancer (set in JkWorkersFile)
JkMount /* loadbalancer
</IfModule>

Eu mudei o arquivo serve.xml do meu JBoss:

<Connector port="8009" address="${jboss.bind.address}"
emptySessionPath="true" enableLookups="false" redirectPort="8443" 
protocol="AJP/1.3" connectionTimeout="600000" maxThreads="200"/>

Eu verifiquei os arquivos de log que dizem que mod_jk foi inicializado.

Mas não está sendo redirecionado para a porta 8080 do jboss.

Obrigado antecipadamente.

Este meu arquivo mod_jk.log

  [Tue Jul 19 13:17:23 2011] [5505:3079493376] [info] init_jk::mod_jk.c (3183):       
  mod_jk/1.2.28 initialized
  [Tue Jul 19 13:17:23 2011] [5506:3079493376] [info] init_jk::mod_jk.c (3183):    
  mod_jk/1.2.28 initialized

e arquivo error.log do apache

  [Tue Jul 19 13:17:23 2011] [notice] Apache/2.2.17 (Ubuntu) mod_jk/1.2.28 configured --      
  resuming normal operations
  [Tue Jul 19 13:22:13 2011] [error] [client 192.168.1.12] File does not exist:   
  /var/www/favicon.ico
    
por VISHAL 18.07.2011 / 14:25

2 respostas

0

Eu vejo esses possíveis erros:

  1. Base no arquivo workers.conf que você deseja conectar na porta 8080 usando o protocolo AJP. Se você quiser usar AJP, você deve usar tal definição (veja a definição de porta):

    worker.worker1.type=ajp13
    worker.worker1.connection_pool_size=20
    worker.worker1.host=192.168.1.12
    worker.worker1.port=8009
    worker.worker1.lbfactor=1
    
  2. Há falta de definição na tag Engine no arquivo server.xml . Em cada servidor, você deve definir jvmRoute parameter - base no seu arquivo workrs.conf :

    <Engine name="jboss.web" defaultHost="localhost" jvmRoute="worker1"> 
    

    Você pode encontrar mais informações aqui: link

  3. Como você administra o seu JBoss? Por padrão, o JBoss listine apenas em localhost . você pode verificá-lo usando netstat :

    netstat -ltnp
    

    Você também pode executar o JBoss com o parâmetro -b :

    run.sh -b 192.168.1.12
    
por 18.07.2011 / 17:24
0

Aqui está todo o processo passo a passo para o balanceamento de carga do servidor de aplicativos jboss com o apache usando mod_jk.

etapa 1: configuração do ambiente

Ubuntu 11.04
JBoss AS 5.1-GA
Apache 2
mod_jk 1.2.30

My setup looks something like the following:

 Apache Web Server: 192.168.1.12:80 - lb1
 JBoss App Server 1: 192.168.1.53:8080 - app1
 JBoss App Server 2: 192.168.1.56:8080 - app2

etapa 2: configurando o apache

crie os seguintes arquivos na pasta / etc / apache2 / conf

 step -I: create file httpd.conf

 # Include mod_jk's specific configuration file  
 Include conf/mod-jk.conf  

e substitua este arquivo por um que esteja lá em / etc / apache

step -II: create file mod-jk.conf

  # Set the jk log level [debug/error/info]
  JkLogLevel info 

 # Select the log format
  JkLogStampFormat  "[%a %b %d %H:%M:%S %Y]"

 # JkOptions indicates to send SSK KEY SIZE
  JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories

 # JkRequestLogFormat
   JkRequestLogFormat "%w %V %T"

 # Mount your applications
  JkMount /application/* loadbalancer

 # You can use external file for mount points.
 # It will be checked for updates each 60 seconds.
 # The format of the file is: /url=worker
 # /examples/*=loadbalancer
 # here cluster1 is the name of the test project that i used 

  JkMountFile conf/uriworkermap.properties   

  JkMount /cluster1 loadbalancer
  JkMount /cluster1/* loadbalancer

 # Add shared memory.
 # This directive is present with 1.2.10 and
 # later versions of mod_jk, and is needed for
 # for load balancing to work properly
 JkShmFile logs/jk.shm 

 # Add jkstatus for managing runtime data
 <Location /jkstatus/>
   JkMount status
   Order deny,allow
   Deny from all
   Allow from 127.0.0.1
 </Location>

 <VirtualHost *:80>

 ServerName 192.168.1.53

 JkMountFile conf/uriworkermap.properties

 </VirtualHost>

passo -III: criar arquivo uriworkermap.properties

   # Simple worker configuration file
   # Mount the Servlet context to the ajp13 worker
    /jmx-console=loadbalancer
    /jmx-console/*=loadbalancer
    /web-console=loadbalancer
    /web-console/*=loadbalancer
    /*=loadbalancer

etapa -IV: criar arquivo workers.properties

  # Define list of workers that will be used
  # for mapping requests
   worker.list=loadbalancer,status

  # Define Node1
  # modify the host as your host IP or DNS name.
  worker.worker1.port=8009
  worker.worker1.host=192.168.1.53
  worker.worker1.type=ajp13
  worker.worker1.lbfactor=1
  worker.worker1.cachesize=10

 # Define Node2
 # modify the host as your host IP or DNS name.
 worker.worker2.port=8009
 worker.worker2.host= 192.168.1.56
 worker.worker2.type=ajp13
 worker.worker2.lbfactor=1
 worker.worker2.cachesize=10

 # Load-balancing behaviour
 worker.loadbalancer.type=lb
 worker.loadbalancer.balance_workers=worker1,worker2
 worker.loadbalancer.sticky_session=1
 #worker.list=loadbalancer

 # Status worker for managing load balancer
  worker.status.type=status


 # Simple worker configuration file
 # Mount the Servlet context to the ajp13 worker
 /jmx-console=loadbalancer
 /jmx-console/*=loadbalancer
 /web-console=loadbalancer
 /web-console/*=loadbalancer
 /*=loadbalancer

Passo 3: configurando o jboss

modifique o server.xml do seu jboss da seguinte forma:

<Engine name="jboss.web" defaultHost="localhost" jvmRoute="worker1">

mesmo para o server2 usando worker2 em vez de worker1.

agora inicie o jboss e o apache. tente localhost em seu navegador na máquina lb1 ele será redirecionado para a página do jboss (na porta 8080) em execução no server1.

para melhor resultado tente usar três máquinas diferentes. Eu tentei no ubuntu-11.04 e centos seu trabalho bem.

é isso.

Obrigado .............

    
por 25.07.2011 / 10:31