GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Verwenden Sie Aufgabenzustände mit Server-Imaging

Die OpenStack Server Extended Status Extension hat einige neue Task-Zustände verfügbar gemacht, die eine genauere Sichtbarkeit des Serverstatus während des Image-Erstellungs- (oder „Snapshot-“) Prozesses bieten. Dieser Artikel beschreibt, was sie sind, und schlägt vor, wie Sie sie verwenden können.

Vor der Veröffentlichung von OpenStack Grizzly ging der Server in einen speziellen Aufgabenstatus, wenn Sie eine Image-Erstellungsaktion auf einem Server anforderten vonimage_snapshot , und es würde in diesem Aufgabenzustand bleiben, bis das Image abgeschlossen wurde. Dieser Einzeltask-Zustand verbarg die Tatsache, dass ein Snapshot-Vorgang aus drei verschiedenen Phasen besteht:

  1. Der Hypervisor erstellt ein Image der virtuellen Festplatte des Servers.
  2. Der Hypervisor packt das Bild und bereitet es für den Upload in den Bildspeicher vor.
  3. Der Hypervisor lädt das gepackte Bild in den Bildspeicher hoch.

Während Phase 1 sollten Sie alle Vorgänge vermeiden, die Daten auf der virtuellen Festplatte des Servers ändern würden. Andernfalls kann der aufgezeichnete Snapshot Inkonsistenzen enthalten, die bestimmte Anwendungsprogramme auf Ihrem Server, hauptsächlich Datenbanken, möglicherweise nicht wiederherstellen können, wenn Sie vom Image booten.

In beiden Phasen 2 und 3 arbeitet der Hypervisor im Namen Ihres Servers, macht aber nichts mit Ihrer virtuellen Festplatte. Die dritte Phase, in der der Upload erfolgt, dauert bei weitem am längsten.

Die OpenStack Grizzly-Version hat die Semantik des image_snapshottask-Zustands leicht modifiziert und zwei neue Task-Zustände hinzugefügt. Jetzt durchläuft Ihr Server also die folgenden Aufgabenzustände, während er eine Image-Erstellungsaktion verarbeitet:

  1. image_snapshot:Der Hypervisor erstellt ein Image der virtuellen Festplatte des Servers
  2. image_pending_upload:Der Hypervisor verpackt das Bild und bereitet es für den Upload vor
  3. image_uploading:Der Hypervisor lädt das Bild in den Imagestore hoch

Während sich Ihr Server in einem dieser Aufgabenzustände befindet, können Sie auf diesem Server keine weitere Bild erstellen-Aktion ausführen. Wie Sie den Aufgabenbeschreibungen entnehmen können, ist der Hypervisor an allen drei Phasen der Image-Erstellungsaktion beteiligt, sodass alle zusätzlichen Buchhaltungsressourcen, die der Hypervisor Ihrem Server zugewiesen hat, verwendet werden. Sie müssen warten, bis der gesamte Snapshot-Vorgang abgeschlossen ist und diese Ressourcen freigibt, bevor Sie einen weiteren Snapshot erstellen können.

Nachdem die erste Phase abgeschlossen ist, müssen Sie sich keine Sorgen mehr darüber machen, dass Vorgänge auf Ihrem Server die Effektivität Ihres Snapshots beeinträchtigen könnten. Leider zeigt die Systemsteuerung keine Server-Taskstates an. Sie können sie jedoch mit der API oder python-novaclient überprüfen .

Verwenden Sie die API, um den Status der Serveraufgabe zu überprüfen

Die Aufgabenzustände erscheinen in der folgenden Serverdetailoperationsantwort:

GET /v2/servers/{serverId}

Hier ist eine abgekürzte JSON-Serverdetailantwort:

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

Suchen Sie nach OS-EXT-STS:task_state Element. Da ein JSON-Objekt unsortiert ist, kann es irgendwo in der Antwort erscheinen. Aus dem in diesem Beispiel angezeigten Wert können Sie ersehen, dass der Hypervisor die Erstellung des Images der virtuellen Festplatte des Servers abgeschlossen hat und nun das Image verpackt und für den Upload vorbereitet.

Verwenden Sie python-novaclient, um den Status der Serveraufgabe zu prüfen

python-novaclient ist ein praktisches Programm, das Sie über die Befehlszeile ausführen können. Wenn Sie es noch nie verwendet haben, finden Sie hier einige How-To-Artikel, die Sie sich ansehen sollten:

  • Python-openstackclient unter Linux und MacOS installieren
  • Python-novaclient unter Windows installieren

Diese Artikel geben einen Überblick über python-novaclient und vollständige Anweisungen zur Installation auf Ihrem Betriebssystem.

Um den Aufgabenstatus für einen Server mit python-novaclient anzuzeigen , mach eine show Betrieb auf dem Server:

$ nova show {serverId}

Hier ist eine abgekürzte Antwort:

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

In diesem Beispiel können Sie sehen, dass es keinen Aufgabenstatus für den Server gibt, sodass er ein image-create akzeptieren könnte Anfrage.

Abfragen, um den Status der Serveraufgabe zu prüfen

Möglicherweise möchten Sie den aktuellen Status der Serveraufgabe ermitteln, bevor Sie eine der folgenden Aufgaben ausführen:

  1. Beenden Sie Aktivitäten auf dem Server, die die Qualität des Disk-Images beeinträchtigen würden, wie z. B. das Beenden eines Datenbankverwaltungssystems.
  2. Geben Sie einen Server image-create aus Befehl, indem Sie die API, novaclient oder das Control Panel verwenden.
  3. Überwachen Sie den Server, um zu sehen, wann er den image_snapshot verlässt Aufgabenstatus.
  4. Starten Sie die vor dem Erstellen des Snapshots angehaltenen Aktivitäten neu, z. B. das Wiederherstellen Ihres Datenbankverwaltungssystems.

Sie können ein einfaches Bash-Skript schreiben, um Ihren Server zu überwachen. Hier ist ein Beispiel für den relevantesten Teil, aber Sie können ihn gerne erweitern. Lesen Sie es durch und stellen Sie sicher, dass Sie wissen, was es tut, bevor Sie es verwenden. Es verwendet vier Programme (curl , egrep ,sed , und date ), die standardmäßig auf den meisten Linux®-Systemen installiert sind. Dieses Fragment ist ziemlich primitiv, daher müssen Sie Strg-C verwenden, um das Skript zu stoppen.

# 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

Wenn Sie ein Skript starten, das das vorhergehende Fragment enthält, und dann einen Server-Snapshot erstellen, sehen Sie etwas Ähnliches wie im folgenden Beispiel:

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. Überwachen Sie einen Server mit Munin

  2. Informationen zu Cloud Server-Images

  3. Migrieren Sie zwischen Server-Varianten

  4. Reparieren Sie ein Systemabbild mit DISM

  5. Bildvorschau mit ngx_http_image_filter_module

Verwenden Sie das Task-Manager-Äquivalent in Linux

So verwenden Sie SSH, um eine Verbindung zu einem Remote-Server herzustellen

Einschränkungen für Cloud-Server-Images

Starten Sie eine Windows-Webfarm mit Web Deploy

Verwenden Sie NTP, um die Zeit zu synchronisieren

Cloud-Init mit VirtualBox verwenden?