Come regolare programmazione della direttiva disabilitare nella configurazione di bilanciamento del carico mod_jk?

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

  •  12-09-2019
  •  | 
  •  

Domanda

Abbiamo una configurazione in cui abbiamo una httpd (apache) con mod_jk a parlare in una configurazione di bilanciamento del carico a tre server Tomcat. Dobbiamo riciclare ogni istanza envery Tomcat tre ore. Così tomcat1 ripartirà a 1, e tomcat2 a 2 e ... fino tomcat1 ricicla di nuovo a 4.

Vogliamo configurare uno script o un tipo di programma per disattivare il nodo del lavoratore che sta attraversando un recylce per ridurre al minimo gli errori di sessione presso l'utente utilizzando la nostra applicazione.

Tutti i suggerimenti.

È stato utile?

Soluzione 3

Chris grazie o la vostra risposta. Sono sicuro che funzionerà, ma ho voluto innescare il cambiamento in fase di esecuzione, anche se il riavvio grazioso è molto simile. Sono stato in grado di compiere il mio compito di descrivere nel modo seguente.

Nel file httpd.conf è necessario aggiungere le seguenti righe per abilitare il jkmanager per modulo 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>

Le modifiche sui "workers.properties" dei file sono:

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

Dopo che questi cambiamenti sono fatti, si è in grado di vedere il jkmanager digitando l'URL seguito da / jkmanager / alla fine. Si dovrebbe ottenere qualcosa di simile alla seguente immagine.

jkmanager screenshot

Al fine di disabilitare i lavoratori in fase di esecuzione basta eseguire i seguenti URL contro il jkmanger. Si può anche leggere lo stato in un formato XML.

Per disabilitare tomcat1 appena colpito:

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

Per consentire tomcat1 indietro colpire:

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

Ho pubblicato un articolo completo nel mio blog che spiega la configurazione nel caso in cui qualcuno ha bisogno di sapere.

Cloud Computing Blog

Altri suggerimenti

mod_jk rilegge workers.properties su un "apachectl graceful", in modo da se il vostro workers.properties aspetto:

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

... 

Si può solo scrivere uno script che sostituisce la lista balanced_workers con quelli che si desidera, e quindi apache del grazioso

Aggiorna Ecco uno script di fare proprio questo, che ho messo insieme da alcuni pezzi che avevo in giro. Non suggerirei di usare in produzione, ma potrebbe darvi alcune idee per la propria versione.

#!/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, è risposta è stata interessante, ma non sembra funzionare per me. Volevo disattivare solo uno dei miei subworkers alla volta.

lascia supporre che stiamo lavorando con l' 'agente-lb' di bilanciamento del carico.

Per visualizzare lo stato lavoratore utilizzando questo URL:

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

Per disabilitare l'utilizzo operaio sub 'agent-n1' questo URL:

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

Per garantire che il lavoratore è disabilitato attesa per il reindirizzamento alla pagina di stato operaio, e cercare nel campo 'Act' per l'operaio sub, 'agente-n1'

Per consentire l'uso operaio sub 'agent-n1' questo URL:

server-name/jkmanager/?cmd=update&w=agent-lb&sw=agent-n1&vwa=0
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top