GNU/Linux >> Znalost Linux >  >> Linux

Používejte stavy úloh se zobrazováním serveru

Rozšíření OpenStack Server Extended Status Extension odhalilo některé stavy nových úloh, které poskytují jemnější viditelnost stavu serveru během procesu vytváření obrazu (nebo „snímku“). Tento článek popisuje, co to je, a navrhuje, jak je můžete využít.

Před vydáním OpenStack Grizzly, když jste požadovali vytvoření imageaction na serveru, server přešel do speciálního stavu úlohy z image_snapshot a zůstane v tomto stavu úlohy, dokud nebude obraz dokončen. Tento stav jediné úlohy skryl skutečnost, že operace snímku má tři různé fáze:

  1. Hypervizor vytvoří obraz virtuálního pevného disku serveru.
  2. Hypervizor zabalí obrázek a připraví jej k odeslání do úložiště obrázků.
  3. Hypervizor odešle zabalený obrázek do úložiště obrázků.

Během fáze 1 byste se měli vyvarovat jakýchkoli operací, které by změnily data na virtuálním pevném disku serveru. V opačném případě by zaznamenaný snímek mohl obsahovat nekonzistence, ze kterých některé aplikační programy na vašem serveru, především databáze, nemusí být schopny se při spuštění z bitové kopie obnovit.

V obou fázích 2 a 3 pracuje hypervizor jménem vašeho serveru, ale nedělá nic s vaším virtuálním pevným diskem. Zdaleka nejdéle trvá dokončení třetí fáze, ve které probíhá nahrávání.

Vydání OpenStack Grizzly mírně upravilo sémantiku stavu image_snapshottask a přidalo dva nové stavy úloh. Nyní tedy váš server při zpracování akce vytvoření obrazu prochází následujícími stavy úloh:

  1. image_snapshot:hypervizor vytvoří obraz virtuálního pevného disku serveru
  2. image_pending_upload:hypervizor zabalí obrázek a připraví jej k nahrání
  3. image_uploading:hypervizor nahraje obrázek do úložiště obrázků

Zatímco váš server je v některém z těchto stavů úlohy, nemůžete na tomto serveru zadat další akci vytvoření obrazu. Jak můžete vidět z popisu úkolu, hypervizor je zapojen do všech tří fází akce vytváření obrazu, takže všechny dodatečné účetní prostředky, které hypervizor alokoval vašemu serveru, se používají. Než budete moci vytvořit další snímek, musíte počkat, dokud se celý proces snímku nedokončí a neuvolní tyto prostředky.

Po dokončení první fáze se již nemusíte obávat, že operace na vašem serveru mohou narušit efektivitu vašeho snímku. Ovládací panely bohužel nezobrazují stavy úloh serveru. Můžete je však zkontrolovat pomocí rozhraní API nebo python-novaclient .

Použití rozhraní API ke kontrole stavu úlohy serveru

Stavy úkolu se zobrazí v následující odpovědi na podrobnou operaci serveru:

GET /v2/servers/{serverId}

Zde je zkrácená odpověď s podrobnostmi o serveru 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",
   }
}

Vyhledejte OS-EXT-STS:task_state živel. Protože objekt JSON není uspořádaný, může se objevit kdekoli v odpovědi. Z hodnoty zobrazené v tomto příkladu můžete vidět, že hypervizor dokončil vytváření obrazu virtuálního pevného disku serveru a nyní balí a připravuje obraz k nahrání.

Použijte python-novaclient ke kontrole stavu úlohy serveru

python-novaclient je praktický program, který můžete spustit z příkazového řádku. Pokud jste jej dosud nepoužili, zde je několik článků, které si můžete prohlédnout:

  • Instalace python-openstackclient v systémech Linux a MacOS
  • Instalace python-novaclient v systému Windows

Tyto články poskytují přehled python-novaclient a úplné pokyny pro instalaci do vašeho operačního systému.

Chcete-li zobrazit stav úlohy pro server pomocí python-novaclient ,udělejte show operace na serveru:

$ nova show {serverId}

Zde je zkrácená odpověď:

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

V tomto příkladu můžete vidět, že server nemá žádný stav úlohy, takže by mohl přijmout image-create žádost.

Dotaz ke kontrole stavu úlohy serveru

Možná budete chtít zjistit aktuální stav úlohy serveru před provedením jedné z následujících úloh:

  1. Zastavte aktivity na serveru, které by ovlivnily kvalitu obrazu disku, jako je zastavení systému správy databází.
  2. Vydejte server image-create pomocí rozhraní API, novaclient nebo Control Panel.
  3. Sledujte server, abyste viděli, kdy opustí image_snapshot stav úkolu.
  4. Restartujte aktivity zastavené před pořízením snímku, jako je obnovení systému správy databází.

Můžete napsat jednoduchý Bash skript pro monitorování vašeho serveru. Zde je ukázka nejdůležitější části, ale neváhejte ji rozšířit. Před použitím si přečtěte a ujistěte se, že víte, co dělá. Používá čtyři programy (curl , egrep ,sed a date ), které jsou standardně nainstalovány na většině systémů Linux®. Tento fragment je dosti primitivní, takže k zastavení skriptu musíte použít Ctrl-C.

# 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

Pokud spustíte skript, který obsahuje předchozí fragment, a poté pořídíte snímek serveru, uvidíte něco podobného jako v následujícím příkladu:

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. O obrázcích cloudového serveru

  2. Opravte bitovou kopii systému pomocí DISM

  3. Náhled obrázků pomocí modulu ngx_http_image_filter_module

  1. Jak používám Vagrant s libvirt

  2. Optimalizace obrázků pomocí webp

  3. Kdy použít dedikovaný server

  1. Monitorujte server pomocí Munina

  2. Použijte CloudFlare s Rackspace

  3. Použijte iptables s CentOS 7