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:
- Hypervisor membuat gambar hard disk virtual server.
- Hypervisor mengemas gambar dan menyiapkannya untuk diunggah ke penyimpanan gambar.
- 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:
- image_snapshot:hypervisor membuat gambar dari hard disk virtual server
- image_pending_upload:hypervisor mengemas gambar dan menyiapkannya untuk diunggah
- 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:
- Menghentikan aktivitas di server yang akan memengaruhi kualitas citra disk, seperti menghentikan sistem manajemen basis data.
- Menerbitkan server
image-create
perintah dengan menggunakan API, novaclient, atau Control Panel. - Pantau server untuk melihat kapan server keluar dari
image_snapshot
status tugas. - 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