GNU/Linux >> Tutoriels Linux >  >> Linux

Utiliser les états de tâche avec la création d'image de serveur

L'extension OpenStack Server Extended Status a exposé certains nouveaux états de tâche qui offrent une visibilité plus fine de l'état du serveur pendant le processus de création d'image (ou "instantané"). Cet article décrit ce qu'ils sont et suggère comment vous pouvez les utiliser.

Avant la version d'OpenStack Grizzly, lorsque vous demandiez une action de création d'image sur un serveur, le serveur passait dans un état de tâche spécial deimage_snapshot , et il resterait dans cet état de tâche jusqu'à ce que l'image soit terminée. Cet état de tâche unique masquait le fait qu'une opération d'instantané comporte trois phases distinctes :

  1. L'hyperviseur crée une image du disque dur virtuel du serveur.
  2. L'hyperviseur empaquette l'image et la prépare pour le téléchargement vers le magasin d'images.
  3. L'hyperviseur télécharge l'image compressée dans le magasin d'images.

Lors de la phase 1, vous devez éviter toute opération qui modifierait les données sur le disque dur virtuel du serveur. Sinon, l'instantané enregistré pourrait inclure des incohérences à partir desquelles certains programmes d'application sur votre serveur, principalement des bases de données, pourraient ne pas être en mesure de récupérer lorsque vous démarrez à partir de l'image.

Dans les deux phases 2 et 3, l'hyperviseur travaille pour le compte de votre serveur mais ne fait rien avec votre disque dur virtuel. De loin, la troisième phase, au cours de laquelle le téléchargement a lieu, prend le plus de temps.

La version d'OpenStack Grizzly a légèrement modifié la sémantique de l'état image_snapshottask et ajouté deux nouveaux états de tâche. Alors maintenant, votre serveur passe par les états de tâche suivants lors du traitement d'une action de création d'image :

  1. image_snapshot :l'hyperviseur crée une image du disque dur virtuel du serveur
  2. image_pending_upload :l'hyperviseur conditionne l'image et la prépare pour le téléchargement
  3. image_uploading :l'hyperviseur télécharge l'image dans l'imagestore

Tant que votre serveur est dans l'un de ces états de tâche, vous ne pouvez pas émettre une autre action de création d'image sur ce serveur. Comme vous pouvez le voir à partir des descriptions de tâche indiquées, l'hyperviseur est impliqué dans les trois phases de l'action de création d'image, de sorte que toutes les ressources de comptabilité supplémentaires que l'hyperviseur a allouées à votre serveur sont utilisées. Vous devez attendre que l'ensemble du processus d'instantané se termine et libère ces ressources avant de pouvoir créer un autre instantané.

Une fois la première phase terminée, vous n'avez plus à craindre que les opérations sur votre serveur n'interfèrent avec l'efficacité de votre instantané. Malheureusement, le Panneau de configuration n'expose pas les états des tâches du serveur. Cependant, vous pouvez les vérifier en utilisant l'API ou python-novaclient .

Utiliser l'API pour vérifier l'état de la tâche du serveur

Les états de la tâche apparaissent dans la réponse d'opération détaillée du serveur suivante :

GET /v2/servers/{serverId}

Voici une réponse abrégée des détails du serveur JSON :

{
    "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",
   }
}

Recherchez le OS-EXT-STS:task_state élément. Parce qu'un objet JSON n'est pas ordonné, il peut apparaître n'importe où dans la réponse. À partir de la valeur affichée dans cet exemple, vous pouvez voir que l'hyperviseur a fini de créer l'image du disque dur virtuel du serveur et qu'il est en train de conditionner et de préparer l'image pour le téléchargement.

Utiliser python-novaclient pour vérifier l'état de la tâche serveur

python-novaclient est un programme pratique que vous pouvez exécuter à partir de la ligne de commande. Si vous ne l'avez jamais utilisé auparavant, voici quelques articles pratiques à consulter :

  • Installation de python-openstackclient sur Linux et MacOS
  • Installation de python-novaclient sous Windows

Ces articles donnent un aperçu de python-novaclient et des instructions complètes pour l'installer sur votre système d'exploitation.

Pour voir l'état de la tâche d'un serveur à l'aide de python-novaclient ,faites un show opération sur le serveur :

$ nova show {serverId}

Voici une réponse abrégée :

+------------------------+---------------------------------------+
| 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               | {}                                    |
+------------------------+---------------------------------------+

Dans cet exemple, vous pouvez voir qu'il n'y a pas d'état de tâche pour le serveur, il pourrait donc accepter un image-create demande.

Interroger pour vérifier l'état de la tâche du serveur

Vous souhaiterez peut-être découvrir l'état actuel de la tâche du serveur avant d'effectuer l'une des tâches suivantes :

  1. Arrêter les activités sur le serveur susceptibles d'affecter la qualité de l'image disque, telles que l'arrêt d'un système de gestion de base de données.
  2. Émettre un serveur image-create commande à l'aide de l'API, de novaclient ou du panneau de configuration.
  3. Surveillez le serveur pour voir quand il quitte le image_snapshot état de la tâche.
  4. Redémarrez les activités arrêtées avant la prise de l'instantané, telles que la restauration de votre système de gestion de base de données.

Vous pouvez écrire un simple script Bash pour surveiller votre serveur. Voici un échantillon de la partie la plus pertinente, mais n'hésitez pas à la développer. Lisez attentivement et assurez-vous de savoir ce qu'il fait avant de l'utiliser. Il utilise quatre programmes (curl , egrep ,sed , et date ) qui sont installés par défaut sur la plupart des systèmes Linux®. Ce fragment est assez primitif, vous devez donc utiliser control-C pour arrêter le 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 vous démarrez un script contenant le fragment précédent, puis prenez un instantané de serveur, vous voyez quelque chose de similaire à l'exemple suivant :

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. Comment j'utilise Vagrant avec libvirt

  2. Surveiller un serveur avec Munin

  3. Limitations des images de serveur cloud

  4. Aperçu des images avec ngx_http_image_filter_module

  5. Optimisation des images avec webp

Utiliser l'équivalent du gestionnaire de tâches sous Linux

Comment utiliser SSH pour se connecter à un serveur distant

Lancer une ferme Web Windows avec Web Deploy

Utiliser NTP pour synchroniser l'heure

Utiliser une caméra IP avec webRTC

Utiliser cloud-init avec VirtualBox ?