GNU/Linux >> Tutoriales Linux >  >> Linux

Usar estados de tareas con imágenes de servidor

OpenStack Server Extended Status Extension ha expuesto algunos nuevos estados de tareas que brindan una visibilidad más detallada del estado del servidor durante el proceso de creación de imágenes (o "instantánea"). Este artículo describe qué son y sugiere cómo puede utilizarlos.

Antes del lanzamiento de OpenStack Grizzly, cuando solicitaba una acción de creación de imagen en un servidor, el servidor entraba en un estado de tarea especial. de image_snapshot , y permanecería en este estado de tarea hasta que se completara la imagen. Este estado de tarea única ocultó el hecho de que hay tres fases distintas en una operación de instantánea:

  1. El hipervisor crea una imagen del disco duro virtual del servidor.
  2. El hipervisor empaqueta la imagen y la prepara para cargarla en el almacén de imágenes.
  3. El hipervisor carga la imagen empaquetada en el almacén de imágenes.

Durante la fase 1, debe evitar cualquier operación que modifique los datos en el disco duro virtual del servidor. De lo contrario, la instantánea grabada podría incluir inconsistencias de las cuales ciertos programas de aplicación en su servidor, principalmente bases de datos, podrían no ser capaces de recuperarse cuando inicie desde la imagen.

Tanto en la fase 2 como en la 3, el hipervisor funciona en nombre de su servidor, pero no hace nada con su disco duro virtual. Con diferencia, la tercera fase, en la que se produce la carga, es la que más tiempo tarda en completarse.

El lanzamiento de OpenStack Grizzly modificó ligeramente la semántica del estado image_snapshottask y agregó dos nuevos estados de tareas. Ahora, su servidor pasa por los siguientes estados de tarea mientras procesa una acción de creación de imagen:

  1. image_snapshot:el hipervisor crea una imagen del disco duro virtual del servidor
  2. image_pending_upload:el hipervisor empaqueta la imagen y la prepara para subirla
  3. image_uploading:el hipervisor carga la imagen en el almacén de imágenes

Mientras su servidor se encuentre en alguno de estos estados de tarea, no puede ejecutar otra acción de creación de imagen en ese servidor. Como puede ver en las descripciones del estado de la tarea, el hipervisor está involucrado en las tres fases de la acción de creación de imagen, por lo que todos los recursos de contabilidad adicionales que el hipervisor ha asignado a su servidor están en uso. Debe esperar hasta que se complete todo el proceso de la instantánea y libere estos recursos antes de poder crear otra instantánea.

Una vez completada la primera fase, ya no tendrá que preocuparse de que las operaciones en su servidor puedan interferir con la efectividad de su instantánea. Desafortunadamente, el Panel de control no expone los estados de las tareas del servidor. Sin embargo, puede verificarlos usando la API o python-novaclient .

Utilice la API para comprobar el estado de la tarea del servidor

Los estados de la tarea aparecen en la siguiente respuesta de operación detallada del servidor:

GET /v2/servers/{serverId}

Aquí hay una respuesta detallada del servidor JSON abreviada:

{
    "server": {
        "OS-EXT-STS:power_state": 1,
        "OS-EXT-STS:task_state": "image_pending_upload",
        "OS-EXT-STS:vm_state": "active",
        /* ... */
        "id": "c2d5da0a-80d7-4ca7-872c-505410ab55d0",
        /* ... */
        "name": "check-my-task-state",
        "progress": 100,
        "status": "ACTIVE",
   }
}

Busque el OS-EXT-STS:task_state elemento. Debido a que un objeto JSON no está ordenado, puede aparecer en cualquier parte de la respuesta. A partir del valor que se muestra en este ejemplo, puede ver que el hipervisor terminó de crear la imagen del disco duro virtual del servidor y ahora está empaquetando y preparando la imagen para cargarla.

Utilice python-novaclient para comprobar el estado de la tarea del servidor

python-novaclient es un programa útil que puede ejecutar desde la línea de comandos. Si no lo ha usado antes, aquí hay algunos artículos prácticos para consultar:

  • Instalación de python-openstackclient en Linux y MacOS
  • Instalando python-novaclient en Windows

Estos artículos proporcionan una descripción general de python-novaclient e instrucciones completas para instalarlo en su sistema operativo.

Para ver el estado de la tarea de un servidor usando python-novaclient ,haz un show operación en el servidor:

$ nova show {serverId}

Aquí hay una respuesta abreviada:

+------------------------+---------------------------------------+
| Property               | Value                                 |
+------------------------+---------------------------------------+
| status                 | ACTIVE                                |
| OS-EXT-STS:task_state  | None                                  |
| OS-EXT-STS:vm_state    | active                                |
| id                     | 933e803f-13b0-4698-a5c7-f74ec424fd38  |
| name                   | check-my-task-state                   |
| OS-DCF:diskConfig      | MANUAL                                |
| progress               | 100                                   |
| OS-EXT-STS:power_state | 1                                     |
| metadata               | {}                                    |
+------------------------+---------------------------------------+

En este ejemplo, puede ver que no hay un estado de tarea para el servidor, por lo que podría aceptar una image-create solicitud.

Encuesta para comprobar el estado de la tarea del servidor

Es posible que desee descubrir el estado actual de la tarea del servidor antes de realizar una de las siguientes tareas:

  1. Detenga las actividades en el servidor que afectarían la calidad de la imagen del disco, como detener un sistema de administración de base de datos.
  2. Emitir un servidor image-create comando usando la API, novaclient o Panel de control.
  3. Supervise el servidor para ver cuándo sale de image_snapshot estado de la tarea.
  4. Reinicie las actividades detenidas antes de tomar la instantánea, como volver a activar el sistema de administración de la base de datos.

Puede escribir un script Bash simple para monitorear su servidor. Aquí hay una muestra de la parte más relevante, pero siéntase libre de ampliarla. Lea y asegúrese de saber lo que está haciendo antes de usarlo. Utiliza cuatro programas (curl , egrep ,sed y date ) que están instalados de forma predeterminada en la mayoría de los sistemas Linux®. Este fragmento es bastante primitivo, por lo que debe usar control-C para detener el script.

# set these vars
#
# the API endpoint, e.g., "https://iad.servers.api.rackspacecloud.com/v2/123456"
API_ENDPOINT=
# your API username, e.g., "fredco"
API_USER=
# your API auth token, obtained from the Identity service
API_AUTH_TOKEN=
# the UUID of the server you want to monitor
API_SERVER=
# how long to pause in between requests, in seconds
SLEEP_TIME=30
# a temporary file, e.g., "/tmp/polling.json"
DETAIL_FIL=

# verify that the server exists
API_RESP_CODE=$(curl -X GET <br>
 -k -s <br>
 -H "X-Auth-User: $API_USER" <br>
 -H "X-Auth-Token: $API_AUTH_TOKEN" <br>
 -H "Accept: application/json" <br>
 -w "%{http_code}" <br>
 -o $DETAIL_FIL <br>
 "$API_ENDPOINT/servers/$API_SERVER")
if [ "$API_RESP_CODE" != "200" ] ; then
  echo "[error] can't find server $API_SERVER"
  exit 1
fi

while [ 0 ] ; do
   API_RESP_CODE=$(curl -s -k -X GET <br>
    -H "X-Auth-User: $API_USER" <br>
    -H "X-Auth-Token: $API_AUTH_TOKEN" <br>
    -H "Accept: application/json" <br>
    -w "%{http_code}" <br>
    -o $DETAIL_FIL <br>
  "$API_ENDPOINT/servers/$API_SERVER")
  if [ "$API_RESP_CODE" == "404" ] ; then
    echo "[info] server $API_SERVER has disappeared!"
    break
  fi
  RAW_STAT=$(egrep -o '"status": (".*?"|null)' $DETAIL_FIL | sed 's/"//g')
  VM_STAT=$(egrep -o '"OS-EXT-STS:vm_state": (".*?"|null)' $DETAIL_FIL | sed 's/OS-EXT-STS://;s/"//g')
  TASK_STAT=$(egrep -o '"OS-EXT-STS:task_state": (".*?"|null)' $DETAIL_FIL | sed 's/OS-EXT-STS://;s/"//g')
  POW_STAT=$(egrep -o '"OS-EXT-STS:power_state": (\d|null)' $DETAIL_FIL | sed 's/OS-EXT-STS://;s/"//g')
  TIME=$(date +"%H:%M:%S")
  echo "$TIME   $RAW_STAT   $VM_STAT   $TASK_STAT   $POW_STAT"
  sleep ${SLEEP_TIME:-45}
done

Si inicia un script que contiene el fragmento anterior y luego toma una instantánea del servidor, verá algo similar al siguiente ejemplo:

17:14:41   status: ACTIVE   vm_state: active   task_state: null   power_state: 1
17:14:44   status: ACTIVE   vm_state: active   task_state: null   power_state: 1
17:14:48   status: ACTIVE   vm_state: active   task_state: image_snapshot   power_state: 1
17:14:51   status: ACTIVE   vm_state: active   task_state: image_pending_upload   power_state: 1
17:14:55   status: ACTIVE   vm_state: active   task_state: image_pending_upload   power_state: 1
17:14:58   status: ACTIVE   vm_state: active   task_state: image_pending_upload   power_state: 1
17:15:02   status: ACTIVE   vm_state: active   task_state: image_pending_upload   power_state: 1
17:15:05   status: ACTIVE   vm_state: active   task_state: image_uploading   power_state: 1
17:15:09   status: ACTIVE   vm_state: active   task_state: image_uploading   power_state: 1
    ...
17:16:19   status: ACTIVE   vm_state: active   task_state: image_uploading   power_state: 1
17:16:23   status: ACTIVE   vm_state: active   task_state: image_uploading   power_state: 1
17:16:26   status: ACTIVE   vm_state: active   task_state: null   power_state: 1
17:16:30   status: ACTIVE   vm_state: active   task_state: null   power_state: 1

Linux
  1. Cómo uso Vagrant con libvirt

  2. Monitorear un servidor con Munin

  3. Acerca de las imágenes del servidor en la nube

  4. Reparar una imagen del sistema con DISM

  5. Usa una cámara IP con webRTC

Usar el equivalente del Administrador de tareas en Linux

Cómo usar SSH para conectarse a un servidor remoto

Inicie una granja web de Windows con Web Deploy

Utilice CloudFlare con Rackspace

Usar iptables con CentOS 7

Usar NTP para sincronizar la hora