Apéndice C. Archivos de configuración de ejemplo

Este apéndice contiene archivos de configuración de ejemplo para el componente Dispatcher de Load Balancer.

Archivos de configuración de Load Balancer de ejemplo

Los archivos de muestra se encuentran en el directorio siguiente:

Archivo de configuración de Dispatcher — Sistemas AIX, Linux y Solaris

#!/bin/bash
#
# configuration.sample - Archivo de configuración de ejemplo del Dispatcher, componente
#
#
# Asegúrese de ejecutar este script como usuario root.
#
# iam=`whoami`
 
# if [ "$iam" != "root" ]if [ "$iam" != "root" ]
#  then 
#  echo "Debe iniciar la sesión como root para ejecutar este script"
#   exit 2
# fi 

#
# Primero, inicie el servidor
#
# dsserver start
# sleep 5

#
# Después inicie el ejecutor
#
# dscontrol executor start

#
# Dispatcher se puede eliminar en cualquier momento utilizando los
# mandatos "dscontrol executor stop" y "dsserver stop" para
# detener el ejecutor y el servidor respectivamente antes de eliminar
# el software de Dispatcher.
#
# El siguiente paso de la configuración de Dispatcher es establecer la
# NFA (dirección de no reenvío) y las direcciones del clúster.
#
# La NFA se utiliza para acceder de forma remota a la máquina Dispatcher
# para tareas de administración o configuración. Esta
# dirección es necesaria puesto que Dispatcher enviará paquetes
# a las direcciones de clúster.
# 
# La dirección de CLUSTER es el nombre de host (o dirección IP) al
# que se conectarán los clientes remotos.
#
# En cualquier lugar de este archivo, puede utilizar los nombres de host y
# las direcciones IP de manera intercambiable.
#

# NFA=hostname.domain.name
# CLUSTER=www.suempresa.com

# echo "Cargando la dirección de no reenvío"
# dscontrol executor set nfa $NFA

#
# El siguiente paso de la configuración de Dispatcher es crear
# un clúster. Dispatcher direccionará las solicitudes enviadas a
# la dirección del clúster a las correspondientes máquinas servidor
# definidas en dicho clúster. Puede configurar y atender a
# varias direcciones de clúster utilizando Dispatcher.

# Emplee una configuración parecida para CLUSTER2, CLUSTER3, etc.
#

# echo "Cargando primero la dirección de clúster"
# dscontrol cluster add $CLUSTER

#
# Ahora debemos definir los puertos que usará este clúster. Las
# solicitudes recibidas por Dispatcher en un puerto definido se
# reenviarán al correspondiente puerto de una de las
# máquinas servidor.
#

# echo "Creando puertos para clúster: $CLUSTER"

# dscontrol port add $CLUSTER:20+21+80

#
# El último paso es añadir cada una de las máquinas servidor a los
# puertos de este clúster.
# De nuevo, puede usar el nombre de host o la dirección IP
# de las máquinas servidor.
#

# SERVER1=server1name.domain.name
# SERVER2=server2name.domain.name 
# SERVER3=server3name.domain.name

# echo "Añadiendo máquinas servidor"
# dscontrol server add $CLUSTER:20+21+80:
# $SERVER1+$SERVER2+$SERVER3

#
# Ahora iniciaremos los componentes de equilibrio de carga de
# Dispatcher. El principal componente de equilibrio de carga se denomina
# gestor y los segundos componentes de equilibrio de carga son los
# asesores. Si el gestor y los asesores no se están ejecutando,
# Dispatcher envía solicitudes de forma rotativo. Una vez que
# se inicia el gestor, se emplea la ponderación de decisiones basándose en el
# número de conexiones nuevas y activas y las solicitudes entrantes
# se envían al mejor servidor. Los asesores ofrecen al
# gestor una mejor comprensión de la posibilidad de los servidores para atender
# solicitudes así como detectar si un servidor está activo. Si
# un asesor detecta que un servidor está inactivo, se marcará como
# inactivo (a condición de que las proporciones de gestor se hayan establecido
# de forma que incluyan la entrada del asesor) y no se direccionarán
# más solicitudes al servidor.

# El último paso de la configuración de los componentes de equilibrio de carga
# es establecer las proporciones de gestor. El gestor actualiza el
# peso de cada uno de los servidores basándose en cuatro políticas:
#   1. El número de conexiones activas en cada servidor.
#   2. El número de nuevas conexiones en cada servidor.
#   3. La entrada de datos desde los asesores.
#   4. La entrada de datos desde el asesor del nivel del sistema.
# Estas proporciones deben sumar 100. Por ejemplo, si se establecen
# las proporciones del gestor en
#    dscontrol manager proportions 48 48 0 0
# se dará a las conexiones activas y nuevas el 48% de entrada en la
# ponderación de decisiones, los asesores contribuirán en el 4% y
# no se tendrá en cuenta la entrada del sistema.
#
# NOTA: de manera predeterminada, las proporciones del gestor están establecidas en 50 50 0 0
#

# echo "Iniciando el gestor..."
# dscontrol manager start

# echo "Iniciando el asesor FTP en puerto 21 ..."
# dscontrol advisor start ftp 21
# echo "Iniciando el asesor HTTP en puerto 80 ..."
# dscontrol advisor start http 80
# echo "Iniciando el asesor Telnet en puerto 23 ..."
# dscontrol advisor start telnet 23
# echo "Iniciando el asesor SMTP en puerto 25 ..."
# dscontrol advisor start smtp 25
# echo "Iniciando el asesor POP3 en puerto 110 ..."
# dscontrol advisor start pop3 110
# echo "Iniciando el asesor NNTP en puerto 119 ..."
# dscontrol advisor start nntp 119
# echo "Iniciando el asesor SSL en puerto 443 ..."
# dscontrol advisor start ssl 443
#

# echo "Definiendo las proporciones del gestor..."
# dscontrol manager proportions 58 40 2 0

#
# El paso final en la configuración de la máquina Dispatcher es
# crear un alias para la tarjeta de interfaz de red (NIC).
#
# NOTA: NO utilice este mandato en un entorno de alta
# disponibilidad. Los scripts go* configurarán la NIC y
# el bucle de retorno según sea necesario.
# dscontrol executor configure $CLUSTER

# Si la dirección de clúster está en una NIC o subred diferente
# de la NFA, utilice el siguiente formato para el mandato de
# configuración de clúster.
#  dscontrol executor configure $CLUSTER tr0 0xfffff800
# donde tr0 es la NIC (tr1 para la segunda tarjeta token ring, en0
# para la primera tarjeta ethernet) y 0xfffff800 es una
# máscara de subred válida para el sitio.
#

#
# Los siguientes mandatos se establecen en los valores predeterminados.
# Utilice estos mandatos como guía para cambiar los valores predeterminados.
#  dscontrol manager loglevel    1
#  dscontrol manager logsize     1048576
#  dscontrol manager sensitivity 5
#  dscontrol manager interval    2
#  dscontrol manager refresh     2
#
#  dscontrol advisor interval ftp  21  5
#  dscontrol advisor loglevel ftp  21  1
#  dscontrol advisor logsize  ftp  21  1048576
#  dscontrol advisor timeout  ftp  21  unlimited
#  dscontrol advisor interval telnet 23 5
#  dscontrol advisor loglevel telnet 23 1
#  dscontrol advisor logsize  telnet 23 1048576
#  dscontrol advisor timeout  telnet 23 unlimited
#  dscontrol advisor interval smtp 25  5
#  dscontrol advisor loglevel smtp 25  1
#  dscontrol advisor logsize  smtp 25  1048576
#  dscontrol advisor timeout  smtp 25  unlimited
#  dscontrol advisor interval http 80  5
#  dscontrol advisor loglevel http 80  1
#  dscontrol advisor logsize  http 80  1048576
#  dscontrol advisor timeout  http 80  unlimited
#  dscontrol advisor interval pop3 110 5    
#  dscontrol advisor loglevel pop3 110 1
#  dscontrol advisor logsize  pop3 110 1048576
#  dscontrol advisor timeout  pop3 110 unlimited
#  dscontrol advisor interval nntp 119 5
#  dscontrol advisor loglevel nntp 119 1
#  dscontrol advisor logsize  nntp 119 1048576
#  dscontrol advisor timeout  nntp 119 unlimited
#  dscontrol advisor interval ssl  443 5
#  dscontrol advisor loglevel ssl  443 1
#  dscontrol advisor logsize  ssl  443 1048576
#  dscontrol advisor timeout  ssl  443 unlimited
#

Archivo de configuración de Dispatcher — Sistemas Windows

A continuación se muestra un archivo de configuración de Load Balancer de ejemplo denominado configuration.cmd.sample para utilizarse con Windows.

@echo off
rem configuration.cmd.sample - Archivo de configuración de ejemplo para el
rem componente Dispatcher.
rem

rem dsserver debe iniciarse a través de Servicios

rem

rem
rem Después inicie el ejecutor
rem
rem call dscontrol executor start

rem

rem En el siguiente paso de la configuración de Dispatcher se establecerá la
rem NFA (dirección de no reenvío) y la dirección o
rem las direcciones del clúster.
rem

rem La NFA se usa para acceder de forma remota a la máquina Dispatcher
rem para tareas de configuración de administración. Esta
rem dirección es necesaria puesto que Dispatcher reenviará
rem paquetes a las direcciones de clúster.

rem
rem La dirección de CLUSTER es el nombre de host (o dirección IP) al
rem que se conectarán los clientes remotos.
rem

rem En todo este archivo puede utilizar los nombres de host y
rem las direcciones IP de manera intercambiable.
rem  NFA=[dirección de no reenvío]
rem CLUSTER=[el nombre de clúster]
rem

rem set NFA=hostname.domain.name
rem set CLUSTER=www.suempresa.com

rem echo "Cargando la dirección de no reenvío"
rem call dscontrol executor set nfa %NFA%

rem
rem Los siguientes mandatos se establecen en los valores predeterminados.
rem Utilice estos mandatos para cambiar los valores predeterminados

rem  call dscontrol executor set fintimeout 30
rem
rem En el siguiente paso de la configuración de Dispatcher se creará
rem un clúster. Dispatcher direccionará las solicitudes enviadas a
rem la dirección del clúster a las correspondientes máquinas servidor
rem definidas para dicho clúster. Puede configurar y atender a
rem varias direcciones de clúster utilizando Dispatcher.
rem Emplee una configuración parecida para CLUSTER2, CLUSTER3, etc.
rem

rem echo "Cargando primero la dirección de clúster"
rem call dscontrol cluster add %CLUSTER%

rem
rem Ahora debemos definir los puertos que usará este clúster. Todas
rem las solicitudes recibidas por Dispatcher en un puerto definido
rem se reenviarán al correspondiente
rem puerto de una de las máquinas servidor.
rem

rem echo "Creando puertos para clúster: %CLUSTER%"
rem call dscontrol port add %CLUSTER%:20+21+80

rem
rem En el último paso se añadirá cada una de las máquinas servidor a
rem los puertos de este clúster. De nuevo, puede utilizar el
rem nombre de host o la dirección IP de las máquinas servidor.
rem

rem set SERVER1=server1name.domain.name
rem set SERVER2=server2name.domain.name
rem set SERVER3=server3name.domain.name

rem echo "Añadiendo máquinas servidor"
rem call dscontrol server add %CLUSTER%:20+21+80:
rem %SERVER1%+%SERVER2%+%SERVER3%

rem
rem Ahora se iniciarán los componentes de equilibrio de carga de
rem Dispatcher. El principal componente de equilibrio de carga se denomina
rem gestor y los segundos componentes de equilibrio de carga son los
rem asesores. Si el gestor y los asesores no se están
rem ejecutando, Dispatcher envía solicitudes de forma rotativa.
rem Una vez que se inicia el gestor, se utiliza la ponderación de decisiones
rem basándose en el número de conexiones nuevas y activas
rem y las solicitudes entrantes se envían al mejor
rem servidor. Los asesores ofrecen al gestor una mejor compresión
rem de la posibilidad de los servidores de atender solicitudes así como
rem de detectar si un servidor está activo. Si un asesor detecta
rem que un servidor está inactivo, se marcará como inactivo (siempre que las
rem proporciones del gestor se hayan establecido de forma que incluyan
rem la entrada de asesor) y no se direccionarán solicitudes adicionales al servidor.
rem En el último paso de la configuración de los componentes de equilibrio
rem de carga se establecen las proporciones de gestor. El
rem gestor actualiza el peso de cada uno de los servidores basándose
rem en cuatro políticas:

rem   1.  El número de conexiones activas en cada servidor
rem   2.  El número de nuevas conexiones en cada servidor
rem   3.  La entrada de datos desde los asesores.
rem   4.  La entrada de datos desde el asesor del nivel del sistema.
rem
rem  Estas proporciones deben sumar hasta 100. Por ejemplo, si se
rem  establecen las proporciones de clúster utilizando
rem      dscontrol cluster set <clúster> proportions 48 48 4 0
rem  se dará a las conexiones activas y nuevas el 48% de entrada en la
rem  ponderación de decisiones, el asesor contribuirá en el 4% y
rem  no se tendrá en cuenta la entrada del sistema.
rem
rem NOTE: De manera predeterminada, las proporciones del gestor se establecen en
rem 50 50 0 0

rem echo "Iniciando el gestor..."
rem call dscontrol manager start

rem echo "Iniciando el asesor FTP en puerto 21 ..."
rem call dscontrol advisor start ftp 21
rem echo "Iniciando el asesor HTTP en puerto 80 ..."
rem call dscontrol advisor start http 80
rem echo "Iniciando el asesor Telnet en puerto 23 ..."
rem call dscontrol advisor start telnet 23
rem echo "Iniciando el asesor SMTP en puerto 25 ..."
rem call dscontrol advisor start smtp 25
rem echo "Iniciando el asesor POP3 en puerto 110 ..."
rem call dscontrol advisor start pop3 110
rem echo "Iniciando el asesor NNTP en puerto 119 ..."
rem call dscontrol advisor start nntp 119
rem echo "Iniciando el asesor SSL en puerto 443 ..."
rem call dscontrol advisor start ssl 443
rem

rem echo "Definiendo las proporciones del clúster..."
rem call dscontrol cluster set %CLUSTER% proportions 58 40 2 0

rem
rem El último paso de la configuración de la máquina Dispatcher es
rem crear un alias para la tarjeta de interfaz de red (NIC).
rem
rem NOTA: NO utilice este mandato en un entorno de alta
rem disponibilidad. Los scripts go* configurarán la NIC y
rem el bucle de retorno según sea necesario.
rem
rem dscontrol executor configure %CLUSTER%

rem  Si la dirección de clúster está en una NIC o subred distinta
rem  de la de NFA, utilice el siguiente formato para el mandato
rem  configuración de clúster.
rem  dscontrol executor configure %CLUSTER% tr0 0xfffff800
rem  donde tr0 es la NIC (tr1 para la segunda tarjeta token ring,
rem  en0 para la primera tarjeta ethernet) y 0xfffff800 es
rem  una máscara de subred válida para el sitio.
rem

rem
rem Los siguientes mandatos se establecen en los valores predeterminados.
rem Utilice estos mandatos como orientación para cambiar los valores predeterminados.
rem call dscontrol manager loglevel    1
rem call dscontrol manager logsize     1048576
rem call dscontrol manager sensitivity 5
rem call dscontrol manager interval    2
rem call dscontrol manager refresh     2
rem
rem call dscontrol advisor interval ftp  21  5
rem call dscontrol advisor loglevel ftp  21  1
rem call dscontrol advisor logsize  ftp  21  1048576
rem call dscontrol advisor timeout  ftp  21  unlimited
rem call dscontrol advisor interval telnet 23 5
rem call dscontrol advisor loglevel telnet 23 1
rem call dscontrol advisor logsize  telnet 23 1048576
rem call dscontrol advisor timeout  telnet 23 unlimited
rem call dscontrol advisor interval smtp 25  5
rem call dscontrol advisor loglevel smtp 25  1
rem call dscontrol advisor logsize  smtp 25  1048576
rem call dscontrol advisor timeout  smtp 25  unlimited
rem call dscontrol advisor interval http 80  5
rem call dscontrol advisor loglevel http 80  1
rem call dscontrol advisor logsize  http 80  1048576
rem call dscontrol advisor timeout  http 80  unlimited
rem call dscontrol advisor interval pop3 110 5
rem call dscontrol advisor loglevel pop3 110 1
rem call dscontrol advisor logsize  pop3 110 1048576
rem call dscontrol advisor timeout  pop3 110 unlimited
rem call dscontrol advisor interval nntp 119 5
rem call dscontrol advisor loglevel nntp 119 1
rem call dscontrol advisor logsize  nntp 119 1048576
rem call dscontrol advisor timeout  nntp 119 unlimited
rem call dscontrol advisor interval ssl  443 5
rem call dscontrol advisor loglevel ssl  443 1
rem call dscontrol advisor logsize  ssl  443 1048576
rem call dscontrol advisor timeout  ssl  443 unlimited
rem

Asesor de ejemplo

A continuación se muestra un archivo de asesor de ejemplo denominado ADV_sample.

/**
 * ADV_sample: Asesor HTTP de Load Balancer
 * 
 * 
 * Esta clase define un asesor personalizado de ejemplo para Load Balancer. Igual que
 * todos los asesores, este asesor personalizado amplía la función de la base del
 * asesor, denominada ADV_Base. Es la base del asesor que en realidad realiza la
 * mayoría de las funciones del asesor, por ejemplo informar de las cargas de nuevo a Load Balancer
 * para su uso en el algoritmo de ponderación de Load Balancer. El asesor base también
 * realiza operaciones de conexión y cierre de sockets y proporciona métodos
 * de envío y recepción para que el asesor los emplee. El asesor sólo se utiliza
 * para enviar y recibir datos del puerto del servidor que se está asesorando.
 * Se calcula la duración de los métodos TCP incluidos en la base del asesor para
 * calcular la carga. Un distintivo del constructor de ADV_base escribe
 * sobre la carga existente la nueva carga devuelta desde el asesor, si se desea.
 *
 * Nota: en función de un valor fijado en el constructor, la base del asesor
 * suministra la carga al algoritmo de peso a intervalos especificados. Si el
 * asesor real no se ha completado y puede devolver una carga válida, la base del
 * asesor utiliza la carga anterior.
 *  
 * DENOMINACIÓN
 * 
 * El convenio de denominación es el siguiente:
 *
 * - El archivo debe estar ubicado en el siguiente directorio de Load Balancer: *   
 *    lb/servers/lib/CustomAdvisors/ (lb\servers\lib\CustomAdvisors en Windows)
 *
 * - El nombre del asesor debe ir precedido de "ADV_". Sin embargo, el asesor
 *    sólo puede empezar con el nombre; por ejemplo, el asesor "ADV_sample"
 *    puede empezar con "sample".
 *
 * - El nombre del asesor debe indicarse en minúsculas.
 *
 *  Por lo tanto, teniendo presente estas reglas, este ejemplo se denomina:
 * 
 *             <directorio base>/lib/CustomAdvisors/ADV_sample.class
 *
 *
 * Los asesores, igual que el resto de Load Balancer, deben compilarse con la
 * versión prereq de Java. Para garantizar el acceso a las clases de Load Balancer,
 * asegúrese de que el archivo ibmlb.jar (que se encuentra en el directorio lib
 * del directorio base) está incluido en la CLASSPATH del sistema.
 *
 * Métodos proporcionados por ADV_Base:
 * 
 * - ADV_Base (Constructor):
 *
 *   - Parámetros
 *     - String sName = Nombre del asesor
 *     - String sVersion = Versión del asesor
 *     - int iDefaultPort = Número de puerto predeterminado sobre el que asesorar
 *     - int iInterval = Intervalo sobre el que asesorar sobre los servidores
 *     - String sDefaultName = No se utiliza.  Debe pasarse como "".
 *     - boolean replace = True - sustituye el valor de carga que calcula
 *                                la base del asesor
 *                         False - añade el valor de carga que calcula
 *                                 la base del asesor
 *   - Retorno
 *     - Los constructores no tienen valores de retorno.
 *
 * Puesto que la base del asesor se basa en hebras, tiene otros métodos
 * disponibles que un asesor puede usar. Se puede hacer referencia a estos métodos
 * con el parámetro CALLER pasado en getLoad().
 *
 * Estos métodos son los siguientes:
 * 
 * - send - Envía un paquete de información en la conexión de socket establecida
 *           al servidor del puerto especificado.
 *   - Parámetros
 *     - String sDataString - Los datos que deben enviar en el formato de serie
 *   - Retorno
 *     - int RC - Si los datos se han enviado satisfactoriamente; cero indica que
 *                 los datos se han enviado; un entero negativo indica un error.
 * 
 * - receive - Recibe información de la conexión del socket.
 *   - Parámetros
 *     - StringBuffer sbDataBuffer - Los datos recibidos durante la llamada de
 *                                   recepción
 *   - Retorno
 *     - int RC - Si los datos se recibieron satisfactoriamente; cero
 *                indica que los datos se enviaron; un entero negativo indica
 *                un error.
 *
 * Si la función proporcionada por la base del asesor no es suficiente,
 * puede crear la función adecuada dentro del asesor y
 * se ignorarán los métodos proporcionados por la base de asesor.
 *
 * Una pregunta importante en relación a la carga devuelta es si se debe aplicar
 * a la carga que se está generando dentro de la base de asesor
 * o se debe sustituir; hay instancias válidas para las dos situaciones.
 * 
 * Este ejemplo es esencialmente el asesor HTTP de Load Balancer. Funciona
 * de forma muy simple: se emite una solicitud de envío: una solicitud de cabecera HTTP.
 * Una vez que se recibe la respuesta, el método getLoad finaliza, indicando a la
 * base del asesor que detenga la medición del tiempo de la solicitud. Entonces el
 * método finaliza. La información devuelta no se analiza; la carga se basa en el
 * tiempo necesario en realizar las operaciones de envío y recepción.
 */

package CustomAdvisors;
import com.ibm.internet.nd.advisors.*;

public class ADV_sample extends ADV_Base implements ADV_MethodInterface
{
  String COPYRIGHT = 
            "(C) Copyright IBM Corporation 1997, All Rights Reserved.\n";

  static final String  ADV_NAME              = "Sample";
  static final int     ADV_DEF_ADV_ON_PORT   = 80;
  static final int     ADV_DEF_INTERVAL      = 7;

  // Nota: la mayoría de los protocolos de servidor requieren un retorno de
  //       carro ("\r") y un salto de línea ("\n") al final de los mensajes.
  //       Si es así, inclúyalos en la serie aquí.
  static final String  ADV_SEND_REQUEST      = 
    "HEAD / HTTP/1.0\r\nAccept: */*\r\nUser-Agent: " +
    "IBM_Load_Balancer_HTTP_Advisor\r\n\r\n";

  /**
   * Constructor.
   *
   * Parámetros: Ninguno; pero el constructor de ADV_Base tienen varios parámetros
   *             que deben pasarse.
   *
   */
  public ADV_sample()
  {
    super( ADV_NAME,
       "2.0.0.0-03.27.98",
           ADV_DEF_ADV_ON_PORT,
           ADV_DEF_INTERVAL,
           "",     // no se utiliza
           false);
    super.setAdvisor( this );
  }


  /**
   * ADV_AdvisorInitialize
   *
   * Se inicia cualquier inicialización específica del asesor que debe tener lugar
   * después de la base de asesor. Este método se llama sólo una vez y
   * normalmente no se utiliza.
   */
  public void ADV_AdvisorInitialize()
  {
    return;
  }


  /**
   * getLoad()
   *
   * La base del asesor llama a este método para completar la operación del
   * asesor, basándose en detalles específicos del protocolo. En este ejemplo del
   * asesor, sólo es necesario emitir un sólo envío y recepción; si es necesario
   * usa una lógica más compleja, se pueden emitir varios envíos y recepciones.
   * Por ejemplo, una respuesta puede recibirse y analizarse. Basándose en la
   * información que se obtiene, se podría emitir otro envío y recepción.
   *
   * Parámetros:
   * 
   * - iConnectTime - La carga actual relativa al intervalo de tiempo que ha
   *                  tardado en llevarse a cabo la conexión con el servidor en
   *                  el puerto especificado.
   *
   * - caller - Una referencia a la clase base del asesor donde los métodos
   *            proporcionados por Load Balancer son realizar solicitudes TCP simples,
   *            principalmente envío y recepción.
   *
   * Resultados:
   *
   * - La carga, un valor expresado en milisegundos, que puede añadirse a la
   *   carga existente o que puede sustituir a la misma, según lo
   *   determina el distintivo "replace" del constructor.
   *
   *   Cuánto mayor sea la carga, más tiempo necesitará el servidor para responder;
   *   por lo tanto, menor será el peso en Load Balancer.
   *
   *   Si el valor es negativo, se supone un error. Un error de un asesor
   *   indica que el servidor al que el asesor intenta llegar no es
   *   accesible y se ha identificado como inactivo. Load Balancer
   *   no intentará equilibrar la carga en un servidor que esté inactivo. Load Balancer
   *   reanudará el equilibrio de carga en el servidor cuando se reciba un valor positivo.
   *
   */
  public int getLoad(int iConnectTime, ADV_Thread caller)
  {
    int iRc;
    int iLoad = ADV_HOST_INACCESSIBLE;  // -1

    // Enviar solicitud TCP
    iRc = caller.send(ADV_SEND_REQUEST);
    if (iRc >= 0)
    {
      // Realizar una recepción
      StringBuffer sbReceiveData = new StringBuffer("");
      iRc = caller.receive(sbReceiveData);

      /**
      *  En modalidad de asesor norma (el distintivo "replace" es false), la carga
      *  devuelta es 0 o 1, lo que indica que el servidor está activo o inactivo.
      *  Si la recepción es satisfactoria, se devuelve una carga de cero, lo
      *  que indica que se va a usar la carga incluida dentro del asesor base.
      * 
      *  De lo contrario (el distintivo "replace" es true), devuelva el valor de
      *  carga que desee.
      */

      if (iRc >= 0)
      {
        iLoad = 0;
      }
    }
    return iLoad;
  }

} // Final de - ADV_sample