Como ajustar programaticamente a diretiva de desativar na configuração do balanceador de carga MOD_JK?

StackOverflow https://stackoverflow.com/questions/766891

  •  12-09-2019
  •  | 
  •  

Pergunta

Temos uma configuração em que temos um httpd (apache) com mod_jk falando em uma configuração de balanço de carga em três servidores TomCat. Temos que reciclar cada instância do Tomcat em três horas. Portanto, o Tomcat1 reiniciará em 1 e o tomcat2 em 2 e ... até que o tomcat1 recicla novamente às 4.

Queremos configurar um script ou um tipo de programa para desativar o nó do trabalhador que está passando por um recilento para minimizar os erros de sessão no usuário usando nosso aplicativo.

Alguma sugestão.

Foi útil?

Solução 3

Chris obrigado ou sua resposta. Tenho certeza de que funcionará, mas eu queria desencadear a mudança no tempo de execução, mesmo que o reinício gracioso seja muito semelhante. Consegui realizar minha tarefa de descrever da seguinte maneira.

No seu arquivo httpd.conf, você deve adicionar as seguintes linhas para ativar o módulo JKManager para MOD_JK.

<Location /jkmanager/>
JkMount jkstatus
order deny,allow
allow from <your ip address>
allow from 127.0.0.1
deny from all
</Location>

<IfModule mod_jk.c>
...
JkMount  /jkmanager/* jkstatus
...
</IfModule>

As mudanças no arquivo "trabalhadores.properties" são:

 worker.list=router,tomcat1,tomcat2,...,tomcatn,jkstatus
 worker.jkstatus.type=status

Depois que essas alterações forem feitas, você poderá ver o JKManager digitando seu URL seguido por / jkmanager / no final. Você deve obter algo semelhante à imagem a seguir.

jkmanager screenshot

Para desativar os trabalhadores no tempo de execução, execute os seguintes URLs contra o JKManger. Você pode até ler o status em um formato XML.

Para desativar o tomcat1, apenas acerte:

http://your.web.server/jkmanager/?cmd=update&w=router&opt=256&from=list&att=vwa&val0=1&val1=0&val2=0  

Para ativar o TomCat1 Back Hit:

http://your.web.server/jkmanager/?cmd=update&w=router&opt=256&from=list&att=vwa&val0=0&val1=0&val2=0

Publiquei um artigo completo no meu blog, explicando a configuração, caso alguém precise saber.

Blog de computação em nuvem

Outras dicas

mod_jk relia trabalhadores.properties em um "apachectl gracioso", então você se seus trabalhadores. Propriedades se parecem com o seguinte:

worker.loadbalancer.type=lb
worker.loadbalancer.balanced_workers=tomcat1, tomcat2, tomcat3

... 

Você pode apenas escrever um script que substitui a lista Balanced_workers pelaqueles que deseja e depois o Apache do Graceful

Atualizar Aqui está um roteiro para fazer exatamente isso, que eu juntei de alguns pedaços que tinha por aí. Eu não sugeriria usá -lo na produção, mas pode lhe dar algumas idéias para sua própria versão.

#!/bin/bash

# set some paths
WORKERS_PROPERTIES="./workers.properties"
APACHECTL="/usr/sbin/apache2ctl"

# what does the loadbalancer config line look like?
WORKER_LINE_START="worker.loadbalancer.balanced_workers="
# full list of workers
ALL_WORKERS="tomcat1 tomcat2 tomcat3"

# first command line arg is the worker to remove. 
remove=$1

# build up the new line listing the active workers
worker_line=$WORKER_LINE_START
sep=""
for worker in $ALL_WORKERS
do
  if [ ${remove} != ${worker} ]
  then
     worker_line="${worker_line}$sep $worker"
     sep=","
  fi
done

# sed hackery to replace the current line with the one we just built.
# needs gnu sed (or another one that supports in-place editing)
sed -i.bak "s/^$WORKER_LINE_START.*$/$worker_line/" $WORKERS_PROPERTIES

# restart apache
$APACHECTL graceful

Gkiragiannis, sua resposta foi interessante, mas não parece funcionar para mim. Eu queria desativar apenas um dos meus subworkers de cada vez.

Vamos supor que estamos trabalhando com o balanceador de carga 'agente-lb'.

Para visualizar o status do trabalhador usando este URL:

server-name/jkmanager/?cmd=list&w=agent-lb

Para desativar o sub-trabalhador 'agente-n1', use este URL:

server-name/jkmanager/?cmd=update&w=agent-lb&sw=agent-n1&vwa=1

Para garantir que o trabalhador esteja desativado, aguarde o redirecionamento para a página de status do trabalhador e procure no campo 'ACT' para o sub-trabalhador, 'agente-n1'

Para ativar o sub-trabalhador 'agente-n1', use este URL:

server-name/jkmanager/?cmd=update&w=agent-lb&sw=agent-n1&vwa=0
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top