Sun Cluster: Guía del desarrollador de los servicios de datos del sistema operativo Solaris

Capítulo 10 Servicios genérico de datos

Este capítulo proporciona información sobre el servicio genérico de datos (GDS) y muestra cómo crear un servicio que utilice GDS con SunPlex Agent Builder o las órdenes administrativas estándar de Sun Cluster.

Información general de GDS

GDS es un mecanismo para dotar a aplicaciones sencillas habilitadas para la red de una alta disponibilidad o escalabilidad, mediante su conexión a una estructura de Gestión de grupos de recursos de Sun Cluster. Este mecanismo no requiere codificación de un agente, que es el método habitual para dotar una aplicación de alta disponibilidad y escalabilidad.

GDS es un servicio de datos único, precompilado. No es posible modificar el servicio de datos precompilado ni sus componentes, tampoco las implementaciones de método de rellamada (rt_callbacks(1HA)) ni el archivo de registro de tipo de recurso (rt_reg(4)).

Tipo de recurso precompilado

El tipo de recurso del servicio genérico de datos SUNW.gds se incluye en el paquete SUNWscgds. La utilidad scinstall(1M) instala este paquete durante la instalación del clúster. El paquete SUNWscgds incluye los archivos siguientes:


# pkgchk -v SUNWscgds

/opt/SUNWscgds
/opt/SUNWscgds/bin
/opt/SUNWscgds/bin/gds_monitor_check
/opt/SUNWscgds/bin/gds_monitor_start
/opt/SUNWscgds/bin/gds_monitor_stop
/opt/SUNWscgds/bin/gds_probe
/opt/SUNWscgds/bin/gds_svc_start
/opt/SUNWscgds/bin/gds_svc_stop
/opt/SUNWscgds/bin/gds_update
/opt/SUNWscgds/bin/gds_validate
/opt/SUNWscgds/etc
/opt/SUNWscgds/etc/SUNW.gds

Razones para utilizar GDS

GDS tiene las ventajas siguientes con respecto a la utilización del modelo de código fuente generado por SunPlex Agent Builder (consulte scdscreate(1HA)) o las órdenes administrativas estándar de Sun Cluster:

Formas de crear un servicio que utilice GDS

Hay dos formas de crear un servicio que utilice GDS:

GDS y SunPlex Agent Builder

Utilice SunPlex Agent Builder y seleccione GDS como tipo de código fuente generado. Los datos de entrada del usuario se utilizan para generar un conjunto de secuencias de control que configuren recursos para la aplicación en cuestión.

GDS y las órdenes administrativas estándar de Sun Cluster

Este método utiliza el código de servicio de datos precompilado de SUNWscgds pero requiere que el administrador del sistema emplee las órdenes administrativas estándar de Sun Cluster (scrgadm(1M) y scswitch(1M)) para crear y configurar el recurso.

Selección del método que se va a utilizar para crear el servicio basado en GDS

Como muestran los procedimientos Cómo utilizar las órdenes administrativas de Sun Cluster para crear un servicio de alta disponibilidad con GDS y Órdenes administrativas estándar de Sun Cluster para crear un servicio escalable con GDS, hay que escribir mucho para emitir las órdenes scrgadm y scswitch apropiadas.

Con GDS, SunPlex Agent Builder simplifica el proceso, porque genera las secuencias de control que emiten las órdenes scrgadm y scswitch.

Casos en los que no usar el mecanismo GDS

Aunque la utilización de GDS tiene muchas ventajas, hay casos en los que no es conveniente utilizarlo. El mecanismo GDS no hay que utilizarlo en estos casos:

Propiedades necesarias para GDS

Se deben proporcionar las propiedades siguientes:

Propiedad de extensión Start_command

La orden de inicio, que se especifica en la propiedad de extensión Start_command, inicia la aplicación. Debe ser una orden UNIX, con sus argumentos, que se puede pasar directamente a un shell para iniciar la aplicación.

Propiedad Port_list

La propiedad Port_list identifica la lista de puertos en los que recibe la aplicación; se debe especificar en la secuencia de inicio que crea SunPlex Agent Builder o en la orden scrgadm, si se están utilizando las órdenes administrativas estándar de Sun Cluster.

Propiedades opcionales para GDS

La propiedades opcionales para GDS son:

Propiedad Network_resources_used

El valor predeterminado de esta propiedad es nulo. Esta propiedad se debe especificar si la aplicación debe vincularse a una o varias direcciones concretas. Si se omite esta propiedad o si se especifica como Null, se presupone que la aplicación recibe en todas las direcciones.

Antes de crear el recurso de GDS es necesario haber configurado un recurso LogicalHostname o SharedAddress. Consulte Sun Cluster Data Services Planning and Administration Guide for Solaris OS para obtener información sobre cómo configurar un recurso LogicalHostname o SharedAddress.

Para especificar un valor especifique uno o varios nombres de recurso; cada uno puede contener uno o varios LogicalHostname o uno o más SharedAddress. Consulte r_properties(5) para obtener más detalles.

Propiedad Stop_command

La orden de parada debe detener la aplicación y retornar sólo cuando la aplicación se haya detenido completamente. Debe ser una orden UNIX completa, que se pueda pasar directamente a un shell para detener la aplicación.

Si se da la orden Stop_command, el método de parada de GDS inicia la orden de parada con un 80 % del tiempo de espera de parada. Independientemente del resultado del inicio de la orden de parada, el método de parada de GDS envía SIGKILL después del 15 % del tiempo de espera de parada. El 5 % restante de ese tiempo se reserva para cargas adicionales indirectas de las tareas domésticas.

Si se omite la orden de parada, GDS intenta detener la aplicación con la señal que se especifica en Stop_signal.

Propiedad Probe_command

La orden de análisis comprueba periódicamente el estado de la aplicación. Debe ser una orden UNIX, con sus argumentos, que se puede pasar directamente a un shell para analizar la aplicación. La orden de análisis retorna con un estado de salida de 0 si la aplicación está bien.

El estado de salida de la orden de análisis se utiliza para determinar la gravedad del fallo de la aplicación; se denomina estado de análisis y debe ser un número entero entre 0 (éxito) y 100 (fallo total). Puede tener también un valor especial de 201, lo que provoca una recuperación de fallos inmediata de la aplicación salvo que se establezca Failover_enabled en false. El estado de análisis se utiliza dentro del algoritmo de análisis de GDS, consulte scds_fm_action(3HA) para tomar la decisión de reiniciar la aplicación localmente en lugar de hacer una operación de recuperación de fallos a otro nodo; si el estado de salida es 201, se realiza inmediatamente una recuperación de fallos de la aplicación.

Si se omite la orden de análisis, GDS aporta su propio analizador sencillo, que conecta con la aplicación en el conjunto de direcciones IP derivadas de la propiedad Network_resources_used o la salida de scds_get_netaddr_list(3HA). Si la conexión es satisfactoria, se desconecta inmediatamente. Si tanto la conexión como la desconexión son satisfactorias, se considera que la aplicación está funcionando correctamente.


Nota –

El analizador incluido con GDS sólo se pretende que sea un sustituto sencillo del analizador específico de la aplicación, que cuenta con todas las funciones.


Propiedad Start_timeout

Esta propiedad especifica el tiempo de espera de inicio de la orden de inicio (consulte Propiedad de extensión Start_command para obtener información adicional). El valor predeterminado de Start_timeout es 300 segundos.

Propiedad Stop_timeout

Esta propiedad especifica el tiempo de espera de parada de la orden de parada (consulte Propiedad Stop_command para obtener información adicional). El valor predeterminado de Stop_timeout es 300 segundos.

Propiedad Probe_timeout

Esta propiedad especifica el valor de tiempo de espera de la orden de análisis (consulte Propiedad Probe_command para obtener información adicional). El valor predeterminado de Probe_timeout es 30 segundos.

Propiedad Child_mon_level

Esta propiedad proporciona control sobre los procesos que se supervisan a través de PMF. Indica el nivel máximo hasta el cual se supervisan los procesos secundarios bifurcados. Es similar al argumento -C de la orden pmfadm(1M).

Omitir esta propiedad, o establecerla en su valor predeterminado de -1, tiene el mismo efecto que omitir la opción -C en la orden pmfadm; es decir, todos los secundarios (y sus descendientes) se supervisarán.


Nota –

Esta opción sólo se puede especificar con las órdenes administrativas estándar de Sun Cluster; no se puede especificar si se está usando SunPlex Agent Builder.


Propiedad Failover_enabled

Esta propiedad de extensión booleana controla el comportamiento de la recuperación de fallos del recurso. Si esta propiedad de extensión se establece en true, la aplicación realiza una operación de recuperación de fallos cuando el número de reinicios supere el valor retry_count dentro del número de segundos de retry_interval.

Si esta propiedad de extensión se fija en false, la aplicación no se reinicia ni realiza una recuperación de fallos a otro nodo cuando el número de reinicios supere el valor de retry_count del número de segundos de retry_interval.

Esta propiedad de extensión se puede utilizar para impedir que el recurso de aplicación inicie una recuperación de fallos del grupo de recursos. El valor predeterminado es true.

Propiedad Stop_signal

GDS utiliza el valor entero de esta propiedad de extensión para determinar la señal empleada para detener la aplicación con PMF. Consulte signal(3HEAD) para ver una lista de los valores enteros que se pueden especificar. El valor predeterminado es 15 (SIGTERM).

Utilización de SunPlex Agent Builder para crear un servicio con GDS

SunPlex Agent Builder puede utilizarse para crear el servicio que emplea GDS. SunPlex Agent Builder se describe con más detalle en el Capítulo 9.

Creación de un servicio con GDS en SunPlex Agent Builder

Creación de un servicio con GDS en Agent Builder
  1. Inicie SunPlex Agent Builder.


    # /usr/cluster/bin/scdsbuilder
    
  2. Aparece el panel de SunPlex Agent Builder.

    Cuadro de diálogo SunPlex Agent Builder que muestra la pantalla principal de Agent Builder
  3. Escriba el nombre del fabricante.

  4. Escriba el nombre de la aplicación.


    Nota –

    La combinación del nombre del fabricante y de la aplicación no puede contener más de nueve caracteres. Se utiliza como nombre del paquete de las secuencias de control.


  5. Vaya al directorio de trabajo.

    Se puede utilizar el desplegable del botón Examinar para seleccionar el directorio, en lugar de escribir la ruta.

  6. Seleccione si el servicio de datos es escalable o a prueba de fallos.

    No es necesario seleccionar la habilitación para red, porque es la opción predeterminada al crear GDS.

  7. Seleccione GDS.

  8. Haga clic en el botón Crear para crear las secuencias de control.

  9. El panel de SunPlex Agent Builder muestra los resultados de la creación del servicio. El botón Crear queda oscurecido; ya se puede utilizar el botón Siguiente.

    Cuadro de diálogo que muestra la pantalla de creación después de haber introducido información
Configuración de las secuencias de control

Después de crear las secuencias de control, es necesario utilizar SunPlex Agent Builder para configurar el nuevo servicio.

  1. Haga clic en Siguiente; se abrirá el panel de configuración.

  2. Escriba la ubicación de la orden de inicio o utilice el botón Examinar para buscarlo.

  3. (Opcional) Escriba la orden de parada o utilice el botón Examinar para buscarlo.

  4. (Opcional) Escriba la orden de análisis o utilice el botón Examinar para buscarlo.

  5. (Opcional) Especifique los valores de tiempo de espera de las órdenes de inicio, parada y análisis.

  6. Haga clic en Configurar para iniciar la configuración de las secuencias de control.


    Nota –

    El nombre del paquete se forma con la unión del nombre del fabricante y el nombre de la aplicación.


    Se crea un paquete de secuencias de control, que se ubica en:


    <directorio_trabajo>/<nombre_proveedor><applicación>/pkg
    
    Por ejemplo, /export/wdir/NETapp/pkg

  7. Instale el paquete terminado en todos los nodos del clúster.


    # cd /export/wdir/NETapp/pkg
    # pkgadd -d . NETapp
    

  8. Los archivos siguientes se instalarán durante pkgadd:


    /opt/NETapp
    /opt/NETapp/README.app
    /opt/NETapp/man
    /opt/NETapp/man/man1m
    /opt/NETapp/man/man1m/removeapp.1m
    /opt/NETapp/man/man1m/startapp.1m
    /opt/NETapp/man/man1m/stopapp.1m
    /opt/NETapp/man/man1m/app_config.1m
    /opt/NETapp/util
    /opt/NETapp/util/removeapp
    /opt/NETapp/util/startapp
    /opt/NETapp/util/stopapp
    /opt/NETapp/util/app_config


    Nota –

    Las páginas de comando man y los nombres de secuencias de órdenes se corresponderán con el nombre de la aplicación que se introdujo antes, precedido del nombre de la secuencia; por ejemplo startapp.


    Para ver las páginas de comando man hay que especificar la ruta a la página. Por ejemplo, para ver las páginas de comando man de startapp utilice:


    # man -M /opt/NETapp/man startapp
    
  9. En un nodo del clúster configure los recursos e inicie la aplicación.


    # /opt/NETapp/util/startapp -h <sistema_lógico> -p <lista de puertos y protocolos>
    

    Los argumentos de la secuencia de inicio variarán según el tipo de recurso: a prueba de fallos o escalable. Compruebe la página de comando man personalizada o ejecute la secuencia de inicio sin argumentos para obtener una instrucción de sintaxis.


    # /opt/NETapp/util/startapp
     Se deben especificar los nombres de LogicalHostname o SharedAddress.
     Para servicios a prueba de fallos:
     Sintaxis: startapp -h <nombre_sistema_lógico>
              -p <lista_puertos_y_protocolos>
              [-n <grupo_IPMP/lista_adaptadores>]
     Para servicios escalables:
     Sintaxis: startapp
              -h <nombre_dirección_compartida>
              -p <lista_puertos_y_protocolos>
              [-l <norma_de_equilibrio_de_cargas>]
              [-n <grupo_IPMP/lista_adaptadores>]
              [-w <pesos_de_equilibrio_de_cargas>]

Salida de SunPlex Agent Builder

SunPlex Agent Builder genera tres secuencias de control y un archivo de configuración de acuerdo con los datos que se han introducido durante la creación de paquetes. El archivo de configuración especifica los nombres del grupo de recursos y el tipo de recurso.

Las secuencias de control son las siguientes:

Estas secuencias de control tienen la misma interfaz y el mismo comportamiento que las secuencias de utilidad que genera SunPlex Agent Builder para agentes no basados en GDS. Las secuencias se colocan en un paquete de Solaris, que se puede reutilizarse en varios clústers.

El archivo de configuración se puede personalizar para proporcionar los nombres a los grupos de recursos u otros parámetros que suelen darse como entradas de la orden scrgadm. Si no se personalizan las secuencias, SunPlex Agent Builder proporciona unos valores predeterminados razonables para los parámetros de scrgadm.

Utilización de las órdenes administrativas estándar de Sun Cluster para crear un servicio con GDS

En este apartado se describe cómo se pueden introducir estos parámetros en GDS. GDS se utiliza y administra con las órdenes administrativas de Sun Cluster, como scrgadm y scswitch.

Así, no será necesario introducir las órdenes administrativas de nivel inferior que aparecen en esta sección, siempre que las secuencias de control proporcionen unas funciones adecuadas. Sin embargo, es posible hacerlo si se necesita un mayor control del recurso basado en GDS. Éstas son las órdenes que ejecutan las secuencias de control.

Cómo utilizar las órdenes administrativas de Sun Cluster para crear un servicio de alta disponibilidad con GDS
  1. Registre el tipo de recurso SUNW.gds


    # scrgadm -a -t SUNW.gds
    
  2. Cree el grupo de recursos que contenga el recurso LogicalHostname y el servicio a prueba de fallos.


    # scrgadm -a -g haapp_rg
    
  3. Cree el recurso para LogicalHostname.


    # scrgadm -a -L -g haapp_rs -l hhead
    
  4. Cree el recurso para el propio servicio a prueba de fallos.


    # scrgadm -a -j haapp_rs -g haapp_rg -t SUNW.gds \
             -y Scalable=false -y Start_timeout=120 \
             -y Stop_timeout=120 -x Probe_timeout=120 \
             -y Port_list="2222/tcp" \
             -x Start_command="/export/ha/appctl/start" \
             -x Stop_command="/export/ha/appctl/stop" \
             -x Probe_command="/export/app/bin/probe" \
             -x Child_mon_level=0 -y Network_resources_used=hhead \
             -x Failover_enabled=true -x Stop_signal=9
    
  5. Ponga el grupo de recursos haapp_rg en línea.


    # scswitch -Z -g haapp_rg
    
Órdenes administrativas estándar de Sun Cluster para crear un servicio escalable con GDS
  1. Registre el tipo de recurso SUNW.gds.


    # scrgadm -a -t SUNW.gds
    
  2. Cree el grupo de recursos para SharedAddress.


    # scrgadm -a -g sa_rg
    

  3. Cree el recurso SharedAddress en sa_rg.


    # scrgadm -a -S -g sa_rg -l hhead
    
  4. Cree el grupo de recursos para el servicio escalable.


    # scrgadm -a -g app_rg -y Maximum_primaries=2 \
          -y Desired_primaries=2 -y RG_dependencies=sa_rg
    
  5. Cree el grupo de recursos para el servicio escalable.


    # scrgadm -a -j app_rs -g app_rg -t SUNW.gds \
           -y Scalable=true -y Start_timeout=120 \
           -y Stop_timeout=120 -x Probe_timeout=120 \
           -y Port_list="2222/tcp" \
           -x Start_command="/export/app/bin/start" \
           -x Stop_command="/export/app/bin/stop" \
           -x Probe_command="/export/app/bin/probe" \
           -x Child_mon_level=0 -y Network_resource_used=hhead \
           -x Failover_enabled=true -x Stop_signal=9 
    
  6. Ponga en línea el grupo de recursos que contiene los recursos de red.


     # scswitch -Z -g sa_rg
    
  7. Ponga en línea el grupo de recursos app_rg.


    # scswitch -Z -g app_rg
    

Interfaz de línea de órdenes de SunPlex Agent Builder

SunPlex Agent Builder tiene una interfaz de línea de órdenes con una función equivalente a la interfaz GUI. Esta interfaz consta de las órdenes scdscreate(1HA) y scdsconfig(1HA). En la sección siguiente Creación de un servicio que utiliza GDS con la versión de línea de órdenes de Agent Builder se realiza la misma función que en el procedimiento basado en GUI pero utiliza una interfaz no gráfica.

Creación de un servicio que utiliza GDS con la versión de línea de órdenes de Agent Builder
  1. Cree el servicio.

    Para un servicio a prueba de fallos, utilice:


    # scdscreate -g -V NET -T app -d /export/wdir
    

    Para un servicio escalable, utilice:


    # scdscreate -g -s -V NET -T app -d /export/wdir
    

    Nota –

    Los parámetros –d son opcionales. Si no se especifica otro, el directorio de trabajo predeterminado es el actual.


  2. Configure el servicio.


    # scdsconfig -s "/export/app/bin/start' -t "/export/app/bin/stop" \
    -m "/export/app/bin/probe" -d /export/wdir
    


    Nota –

    Sólo se requiere la orden de inicio. Todos los demás parámetros son opcionales.


  3. Instale el paquete terminado en todos los nodos del clúster.


    # cd /export/wdir/NETapp/pkg
    # pkgadd -d . NETapp
    

  4. Los archivos siguientes se instalarán durante pkgadd:


    /opt/NETapp
    /opt/NETapp/README.app
    /opt/NETapp/man
    /opt/NETapp/man/man1m
    /opt/NETapp/man/man1m/removeapp.1m
    /opt/NETapp/man/man1m/startapp.1m
    /opt/NETapp/man/man1m/stopapp.1m
    /opt/NETapp/man/man1m/app_config.1m
    /opt/NETapp/util
    /opt/NETapp/util/removeapp
    /opt/NETapp/util/startapp
    /opt/NETapp/util/stopapp
    /opt/NETapp/util/app_config


    Nota –

    Las páginas de comando man y los nombres de secuencias se corresponderán con el nombre de aplicación que se introdujo antes, precedido del nombre de la secuencia; por ejemplo startapp.


    Para ver las páginas de comando man hay que especificar la ruta a la página. Por ejemplo, para ver las páginas de comando man de startapp utilice:


    # man -M /opt/NETapp/man startapp
    
  5. En un nodo del clúster configure los recursos e inicie la aplicación.


    # /opt/NETapp/util/startapp -h <sistema_lógico> -p <lista de puertos y protocolos>
    

    Los argumentos de la secuencia de inicio variarán según el tipo de recurso: a prueba de fallos o escalable. Compruebe la página de comando man personalizada o ejecute la secuencia de inicio sin argumentos para obtener una instrucción de sintaxis.


    # /opt/NETapp/util/startapp
     Se deben especificar los nombres de LogicalHostname o SharedAddress.
    Para servicios a prueba de fallos:
     Sintaxis: startapp -h <nombre_sistema_lógico>
              -p <lista_puertos_y_protocolos>
              [-n <grupo_IPMP/lista_adaptadores>]
     Para servicios escalables:
     Sintaxis: startapp
              -h <nombre_dirección_compartida>
              -p <lista_puertos_y_protocolos>
              [-l <norma_de_equilibrio_de_cargas>]
              [-n <grupo_IPMP/lista_adaptadores>]
              [-w <pesos_de_equilibrio_de_cargas>]