GNU/Linux >> Belajar Linux >  >> Linux

Gunakan status tugas dengan pencitraan server

Ekstensi Status Diperpanjang OpenStack Server telah mengekspos beberapa status tugas baru yang memberikan visibilitas lebih halus ke status server selama proses pembuatan gambar (atau "snapshot"). Artikel ini menjelaskan apa itu dan menyarankan bagaimana Anda dapat menggunakannya.

Sebelum rilis OpenStack Grizzly, saat Anda meminta tindakan pembuatan gambar di server, server akan masuk ke status tugas khusus dariimage_snapshot , dan itu akan tetap dalam status tugas ini sampai gambar selesai. Status tugas tunggal ini menyembunyikan fakta bahwa ada tiga fase berbeda untuk operasi snapshot:

  1. Hypervisor membuat gambar hard disk virtual server.
  2. Hypervisor mengemas gambar dan menyiapkannya untuk diunggah ke penyimpanan gambar.
  3. Hypervisor mengunggah gambar yang dikemas ke penyimpanan gambar.

Selama fase 1, Anda harus menghindari operasi apa pun yang akan mengubah data pada hard disk virtual server. Jika tidak, snapshot yang direkam mungkin menyertakan inkonsistensi dari program aplikasi tertentu di server Anda, terutama database, yang mungkin tidak dapat dipulihkan saat Anda melakukan booting dari image.

Pada fase 2 dan 3, hypervisor bekerja atas nama server Anda tetapi tidak melakukan apa pun dengan hard disk virtual Anda. Sejauh ini, fase ketiga, di mana unggahan terjadi, membutuhkan waktu paling lama untuk diselesaikan.

Rilis OpenStack Grizzly memodifikasi semantik status image_snapshottask sedikit dan menambahkan dua status tugas baru. Jadi sekarang, server Anda menjalani status tugas berikut saat memproses tindakan pembuatan gambar:

  1. image_snapshot:hypervisor membuat gambar dari hard disk virtual server
  2. image_pending_upload:hypervisor mengemas gambar dan menyiapkannya untuk diunggah
  3. image_uploading:hypervisor mengunggah gambar ke imagestore

Meskipun server Anda adalah salah satu dari status tugas ini, Anda tidak dapat mengeluarkan tindakan pembuatan gambar lain di server itu. Seperti yang dapat Anda lihat dari deskripsi tugas yang dinyatakan, hypervisor terlibat dalam ketiga fase tindakan pembuatan gambar, sehingga semua sumber daya pembukuan tambahan yang telah dialokasikan oleh hypervisor ke server Anda sedang digunakan. Anda harus menunggu hingga seluruh proses snapshot selesai dan melepaskan sumber daya ini sebelum Anda dapat membuat snapshot lain.

Setelah tahap pertama selesai, Anda tidak perlu lagi khawatir bahwa operasi di server Anda dapat mengganggu efektivitas snapshot Anda. Sayangnya, Panel Kontrol tidak mengekspos status tugas server. Namun, Anda dapat memeriksanya dengan menggunakan API atau python-novaclient .

Gunakan API untuk memeriksa status tugas server

Status tugas muncul dalam respons operasi detail server berikut:

GET /v2/servers/{serverId}

Berikut respons detail server JSON yang disingkat:

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

Cari OS-EXT-STS:task_state elemen. Karena objek JSON tidak berurutan, objek tersebut mungkin muncul di mana saja dalam respons. Dari nilai yang ditampilkan dalam contoh ini, Anda dapat melihat bahwa hypervisor telah selesai membuat gambar dari hard disk virtual server dan sekarang mengemas dan menyiapkan gambar untuk diunggah.

Gunakan python-novaclient untuk memeriksa status tugas server

python-novaclient adalah program praktis yang dapat Anda jalankan dari baris perintah. Jika Anda belum pernah menggunakannya, berikut adalah beberapa Artikel Petunjuk untuk dibaca:

  • Menginstal python-openstackclient di Linux dan MacOS
  • Menginstal python-novaclient diWindows

Artikel ini memberikan gambaran umum tentang python-novaclient dan petunjuk lengkap untuk menginstalnya di sistem operasi Anda.

Untuk melihat status tugas untuk server dengan menggunakan python-novaclient , lakukan show operasi di server:

$ nova show {serverId}

Berikut tanggapan singkatnya:

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

Dalam contoh ini, Anda dapat melihat bahwa tidak ada status tugas untuk server, sehingga server dapat menerima image-create permintaan.

Poll untuk memeriksa status tugas server

Anda mungkin ingin menemukan status tugas server saat ini sebelum melakukan salah satu tugas berikut:

  1. Menghentikan aktivitas di server yang akan memengaruhi kualitas citra disk, seperti menghentikan sistem manajemen basis data.
  2. Menerbitkan server image-create perintah dengan menggunakan API, novaclient, atau Control Panel.
  3. Pantau server untuk melihat kapan server keluar dari image_snapshot status tugas.
  4. Mulai ulang aktivitas yang dihentikan sebelum Anda mengambil snapshot, seperti mengembalikan sistem manajemen database Anda.

Anda dapat menulis skrip Bash sederhana untuk memantau server Anda. Berikut adalah contoh bagian yang paling relevan, tetapi jangan ragu untuk mengembangkannya. Bacalah dan pastikan Anda tahu apa yang dilakukannya sebelum menggunakannya. Ini menggunakan empat program (curl , egrep ,sed , dan date ) yang diinstal secara default di sebagian besar sistem Linux®. Fragmen ini cukup primitif, jadi Anda harus menggunakan control-C untuk menghentikan skrip.

# 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

Jika Anda memulai skrip yang berisi fragmen sebelumnya dan kemudian mengambil snapshot server, Anda akan melihat sesuatu yang mirip dengan contoh berikut:

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. Tentang gambar Cloud Server

  2. Batasan gambar server cloud

  3. Gunakan petunjuk penjadwal untuk membuat server

  1. Bagaimana saya menggunakan Vagrant dengan libvirt

  2. Gunakan cloud-init dengan VirtualBox?

  3. Mengapa kami menggunakan Gambar Dasar OS dengan Docker jika wadah tidak memiliki OS Tamu?

  1. Pantau server dengan Munin

  2. Gunakan CloudFlare dengan Rackspace

  3. Gunakan iptables dengan CentOS 7