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

Capítulo 10 Servicio de datos genérico

Este capítulo proporciona información sobre el servicio de datos genérico (GDS) y muestra cómo crear un servicio que utilice GDS. Este servicio se crea utilizando SunPlex Agent Builder o los comandos estándar de administración de Sun Cluster.

Este capítulo se divide en los siguientes apartados:

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 (RGM) 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 datos genérico SUNW.gds se incluye en el paquete SUNWscgds. La utilidad scinstall instala este paquete durante la instalación del clúster (consulte la página del comando man de scinstall( 1M)). 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

Ventajas y desventajas derivadas del uso de GDS

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

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

Formas de crear un servicio que utilice GDS

Hay dos formas de crear un servicio que utilice GDS:

GDS y SunPlex Agent Builder

Use SunPlex Agent Builder y seleccione GDS como el 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 los comandos administrativos estándar de Sun Cluster

Este método usa el código del servicio de datos precompilado de SUNWscgds pero requiere que el administrador de sistema use comandos estándar de administración de Sun Cluster para crear y configurar los recursos. Consulte las páginas de comando man de scrgadm( 1M) y scswitch( 1M).

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

Como muestran los procedimientos Uso de los comandos administrativos de Sun Cluster para crear un servicio de alta disponibilidad que use GDS y Uso de los comandos administrativos de Sun Cluster para crear un servicio escalable que use GDS, hay que escribir mucho para emitir los comandos scrgadm y scswitch apropiados.

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

Registro de eventos de GDS

GDS le permite registrar información importante que pasa de GDS a las secuencias de control que inicia GDS. Entre esta información importante se incluye el estado de los métodos de inicio, de análisis y de parada, así como las variables de propiedades. Esta información se puede usar para diagnosticar problemas o errores en las secuencias de control o para aplicarla a otros propósitos.

La propiedad Log_level que se describe en Propiedad Log_level se usa para especificar el nivel de los mensajes (o el tipo) que GDS debe registrar. Puede especificar como valor NONE, INFO o ERR.

Archivos de registro de GDS

Los dos archivos de registro siguientes de GDS están ubicados en el directorio /var/cluster/logs/DS/nombre_grupo_recursos/ nombre_recurso:

El siguiente ejemplo muestra los tipos de información que contiene start_stop_log.txt:

10/20/2004 12:38:05 phys-node-1 START-INFO> Start succeeded. [/home/brianx/sc/start_cmd]
10/20/2004 12:42:11 phys-node-1 STOP-INFO> Successfully stopped the application

El siguiente ejemplo muestra los tipos de información que contiene probe_log.txt:

10/20/2004 12:38:15 phys-node-1 PROBE-INFO> The GDS monitor (gds_probe) has been started
10/20/2004 12:39:15 phys-node-1 PROBE-INFO> The probe result is 0
10/20/2004 12:40:15 phys-node-1 PROBE-INFO> The probe result is 0
10/20/2004 12:41:15 phys-node-1 PROBE-INFO> The probe result is 0

Propiedades de GDS requeridas

Si la aplicación no está habilitada para red, debe proporcionar tanto la propiedad de extensión Start_command como la propiedad Port_list. Por el contrario, si la aplicación sí está habilitada para red, debe proporcionar sólo la propiedad Port_list.

Propiedad de extensión Start_command

El comando de inicio, que se especifica en la propiedad de extensión Start_command, inicia la aplicación. Debe ser un comando UNIX con argumentos que se pueda pasar directamente a un shell para iniciar la aplicación.

Propiedad Port_list

La propiedad Port_list identifica la lista de puertos mediante los que escucha la aplicación. La propiedad Port_list se debe especificar en la secuencia de inicio que crea SunPlex Agent Builder o en el comando scrgadm, si se están utilizando los comandos administrativos estándar de Sun Cluster.

Propiedades de GDS opcionales

La siguiente lista contiene propiedades de GDS opcionales:

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 escucha 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, escriba uno o varios nombres de recurso. Cada uno de ellos puede contener uno o varios LogicalHostname o SharedAddress. Consulte la página de comando man de r_properties (5) para obtener más información.

Propiedad Stop_command

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

Si se ejecuta el comando Stop_command, el método de parada de GDS inicia el comando de parada con un 80 % del tiempo de espera de parada. Independientemente del resultado del inicio del comando 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 el comando de parada, GDS intenta detener la aplicación con la señal que se especifica en Stop_signal.

Propiedad Probe_command

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

El estado de salida del comando de análisis se utiliza para determinar la gravedad del fallo de la aplicación. Dicho estado de salida se denomina estado de análisis y debe ser un número entero entre 0 (éxito) y 100 (fallo total). El estado de análisis también puede ser un valor especial de 201, lo que provoca que la aplicación se recupere de los fallos inmediatamente, a menos que Failover_enabled esté establecido en FALSE . El estado de análisis se utiliza dentro del algoritmo de análisis de GDS (consulte scds_fm_action(3HA)) para 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 el comando de análisis, GDS proporciona su propio análisis sencillo que se conecta a la aplicación mediante el conjunto de direcciones IP que se derivan de la propiedad Network_resources_used o de la salida de scds_get_netaddr_list (consulte la página man 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 inicio del tiempo de espera del comando 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 la detención del tiempo de espera del comando 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 del tiempo de espera del comando 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


Nota –

Si usa los comandos estándar de administración de Sun Cluster, podrá usar esta opción. En cambio, si usa SunPlex Agent Builder, no podrá usarla.


Esta propiedad permite controlar los procesos supervisados mediante el recurso de supervisión de procesos (PMF). Indica el nivel máximo hasta el cual se supervisan los procesos secundarios bifurcados. Esta propiedad funciona igual que el argumento -C con el comando pmfadm. Consulte la página de comando man de pmfadm(1M).

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

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 dentro del número de segundos de retry_interval .

Esta propiedad se puede utilizar para impedir que el recurso de aplicación inicie una recuperación de fallos del grupo de recursos. El valor predeterminado de esta propiedad 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 la página de comando man de signal( 3HEAD) para obtener una lista de los valores enteros que se pueden especificar. El valor predeterminado es 15 ( SIGTERM).

Propiedad Log_level

Esta propiedad especifica el nivel (o el tipo) de mensajes de diagnóstico que registra GDS. Puede especificar NONE, INFO o ERR para esta propiedad. Si especifica NONE, GDS no registrará los mensajes de diagnóstico. Si especifica INFO, sólo se registrarán mensajes de información. Y, por último, si especifica ERR, sólo se registrarán los mensajes de error. Por defecto, GDS no registra mensajes de diagnóstico (NONE).

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

Puede usar SunPlex Agent Builder para crear un servicio que use GDS. SunPlex Agent Builder se describe con más detalle en el Capítulo 9, Agent Builder de SunPlex.

Creación y configuración de secuencias de control

Inicio de SunPlex Agent Builder y creación de secuencias de control
  1. Conviértase en superusuario o asuma una función similar.

  2. Inicio de SunPlex Agent Builder.


    # /usr/cluster/bin/scdsbuilder
    
  3. Aparece la ventana de creación de SunPlex Agent Builder.

    Cuadro de diálogo de SunPlex Agent Builder que muestra la pantalla de creación de Agent Builder
  4. Escriba el nombre del proveedor.

  5. Escriba el nombre de la aplicación.


    Nota –

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


  6. Vaya al directorio de trabajo.

    Puede usar el menú desplegable Examinar para seleccionar el directorio en lugar de escribir la ruta.

  7. 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.

  8. Seleccione GDS.

  9. (Opcional) Cambie el valor predeterminado de la versión de RT que se muestra.


    Nota –

    En el campo de la versión del tipo de recurso no se pueden usar los siguientes caracteres: espacios, tabulaciones, barra oblicua (/), barra inversa (\), asterisco (*), interrogación (?), coma (,), punto y coma (;), corchete de apertura ([) o corchete de cierre (]).


  10. Pulse Crear.

    Agent Builder crea secuencias de control. Los resultados de la creación del servicio se muestran en el registro de salida.

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

    Crear está atenuado. Ahora puede configurar las secuencias de control.

  11. Haga clic en Next.

    Aparece la pantalla de configuración.

Configuración de las secuencias de control

Después de crear las secuencias de control, debe configurar el nuevo servicio.

  1. Escriba la ubicación del comando de inicio o haga clic en Examinar para localizar dicho comando.

    Puede especificar variables de propiedad. Las variables de propiedad se describen en Variables de propiedades.

  2. (Opcional) Escriba el comando de parada o haga clic en Examinar para localizar dicho comando.

    Puede especificar variables de propiedad. Las variables de propiedad se describen en Variables de propiedades.

  3. (Opcional) Escriba el comando de análisis o haga clic en Examinar para localizar dicho comando.

    Puede especificar variables de propiedad. Las variables de propiedad se describen en Variables de propiedades.

  4. (Opcional) Especifique los valores de tiempo de espera de los comandos inicio, parada y análisis.

  5. Haga clic en Configurar.

    Agent Builder comienza la configuración de las secuencias de control.


    Nota –

    Agent Builder combina el nombre del proveedor y el de la aplicación para crear el nombre del paquete.


    Se crea un paquete para las secuencias de control y se ubica en el siguiente directorio:


    directorio_trabajo/nombre_proveedoraplicación/pkg
    

    Por ejemplo, /export/wdir/NETapp/pkg.

  6. Como superusuario, instale el paquete terminado en todos los nodos del clúster.


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

  7. Los siguientes archivos los instala 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 control 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 la página de comando man de startapp(1M), escriba:


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


    # /opt/NETapp/util/startapp -h nombre_sistema_lógico -p lista_puertos_y_protocolos
    

    Los argumentos de la secuencia de inicio startapp 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 startapp 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_IPM/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:

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ústeres.

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 del comando scrgadm. Si no se personalizan las secuencias de control, SunPlex Agent Builder proporciona unos valores predeterminados para los parámetros de scrgadm.

Utilización de los comandos administrativos estándar de Sun Cluster para crear un servicio que use GDS

Esta sección describe cómo se puede especificar parámetros de entrada para GDS. Para usar y administrar GDS, se usan comandos de administración existentes de Sun Cluster como, por ejemplo, scrgadm y scswitch.

Así, no será necesario introducir los comandos administrativos de nivel inferior que aparecen en esta sección, siempre que las secuencias de control proporcionen unas funciones adecuadas. No obstante, puede especificar comandos administrativos de nivel inferior si necesita tener un mayor control con respecto a los recursos basados en GDS. Estos comandos los ejecutan las secuencias de control.

Uso de los comandos administrativos de Sun Cluster para crear un servicio de alta disponibilidad que use GDS
  1. Conviértase en superusuario o asuma una función similar.

  2. Registre el tipo de recurso SUNW.gds.


    # scrgadm -a -t SUNW.gds
    
  3. Cree el grupo de recursos que contenga el recurso LogicalHostname y el servicio de recuperación de fallos.


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


    # scrgadm -a -L -g haapp_rs -l hhead
    
  5. Cree el recurso para el 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
    
  6. Ponga el grupo de recursos haapp_rg en línea.


    # scswitch -Z -g haapp_rg
    
Uso de los comandos administrativos de Sun Cluster para crear un servicio escalable que use GDS
  1. Conviértase en superusuario o asuma una función similar.

  2. Registre el tipo de recurso SUNW.gds.


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


    # scrgadm -a -g sa_rg
    

  4. Cree el recurso SharedAddress en sa_rg.


    # scrgadm -a -S -g sa_rg -l hhead
    
  5. 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
    
  6. 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 
    
  7. Ponga en línea el grupo de recursos que contiene los recursos de red.


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


    # scswitch -Z -g app_rg
    

Interfaz de línea de comandos de SunPlex Agent Builder

SunPlex Agent Builder también incorpora una interfaz de línea de comandos que proporciona las mismas funciones que la interfaz gráfica de usuario. Esta interfaz consta de los comandos scdscreate y scdsconfig. Consulte las páginas de comando man de scdscreate (1HA) y scdsconfig(1HA).

Creación de un servicio que utiliza GDS con la versión de línea de comandos de Agent Builder

Esta sección describe cómo realizar el mismo conjunto de pasos que se muestra en Utilización de SunPlex Agent Builder para crear un servicio que use GDS usando la interfaz de línea de comandos.

  1. Conviértase en superusuario o asuma una función similar.

  2. Cree el servicio.

    Para un servicio de recuperación 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 –

    El parámetro -d es opcional. Si no lo especifica, el directorio actual se convertirá en el directorio de trabajo.


  3. Configure el servicio.


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

    Puede especificar variables de propiedad. Las variables de propiedad se describen en Variables de propiedades.


    Nota –

    Sólo se requiere el comando de inicio start. Todos los demás parámetros son opcionales.


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


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

  5. Los siguientes archivos los instala 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 control 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 la página de comando man de startapp(1M), escriba:


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


    # /opt/NETapp/util/startapp -h nombre_sistema_lógico -p lista_puertos_y_protocolos
    

    Los argumentos de la secuencia de inicio startapp 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 startapp 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]