Layanan Metadata Azure: Peristiwa Terjadwal untuk VM Linux

Berlaku untuk: ✔️ VM Linux ✔️Set skala fleksibel ✔️ Set skala seragam

Acara Terjadwal adalah Metadata Service Azure yang memberikan waktu bagi aplikasi Anda untuk mempersiapkan pemeliharaan komputer virtual (VM). Acara terjadwal memberikan informasi tentang acara pemeliharaan yang akan datang (misalnya, reboot) sehingga aplikasi Anda dapat mempersiapkannya dan membatasi gangguan. Peristiwa Terjadwal tersedia untuk semua jenis Azure Virtual Machines, termasuk PaaS dan IaaS di Windows dan Linux.

Untuk informasi tentang Peristiwa Terjadwal di Windows, lihat Peristiwa Terjadwal untuk komputer virtual Windows.

Catatan

Peristiwa Terjadwal umumnya tersedia di semua Wilayah Azure. Lihat Ketersediaan Versi dan Wilayah untuk informasi rilis terbaru.

Mengapa menggunakan Peristiwa Terjadwal?

Banyak aplikasi dapat mengambil manfaat dari waktu untuk mempersiapkan pemeliharaan komputer virtual. Waktu ini dapat digunakan untuk melakukan tugas khusus aplikasi yang meningkatkan ketersediaan, keandalan, dan kemampuan layanan, termasuk:

  • Titik pemeriksaan dan pemulihan.
  • Pengosongan koneksi.
  • Kegagalan replika utama.
  • Penghapusan dari kumpulan penyeimbang muatan.
  • Pengelogan peristiwa.
  • Pematian ringan.

Dengan Peristiwa Terjadwal, aplikasi Anda dapat menemukan kapan pemeliharaan akan terjadi dan memicu tugas untuk membatasi dampaknya.

Peristiwa Terjadwal memberikan peristiwa dalam kasus penggunaan berikut:

Dasar-dasarnya

Metadata Service memaparkan informasi tentang menjalankan komputer virtual menggunakan titik akhir REST yang dapat diakses dari dalam komputer virtual. Informasi tersedia melalui IP yang tidak dapat dirutekan sehingga tidak diekspos di luar komputer virtual.

Lingkup

Peristiwa terjadwal dikirimkan ke:

  • Virtual Machines Mandiri.
  • Semua komputer virtual dalam layanan awan.
  • Semua komputer virtual dalam set ketersediaan.
  • Semua komputer virtual di zona ketersediaan.
  • Semua komputer virtual di grup penempatan set skala.

Catatan

Peristiwa Terjadwal untuk semua komputer virtual (VM) dalam penyewa Fabric Controller (FC) dikirimkan ke semua VM di penyewa FC. Penyewa FC setara dengan VM mandiri, seluruh Layanan Cloud, seluruh Rangkaian Ketersediaan, dan Grup Penempatan untuk Set Skala VM (VMSS) terlepas dari penggunaan Zona Ketersediaan. Misalnya, jika Anda memiliki 100 komputer virtual dalam set ketersediaan dan ada pembaruan untuk salah satunya, peristiwa terjadwal akan masuk ke 100 komputer virtual, sedangkan jika ada 100 komputer virtual tunggal di zona, maka peristiwa hanya akan masuk ke komputer virtual yang terdampak.

Akibatnya, periksa bidang Resources di peristiwa untuk mengidentifikasi komputer virtual mana yang terpengaruh.

Penemuan titik akhir

Untuk komputer virtual dengan dukungan VNET, Metadata Service tersedia dari IP statis yang tidak dapat dirutekan, 169.254.169.254. Titik akhir lengkap untuk versi terbaru Peristiwa Terjadwal adalah:

http://169.254.169.254/metadata/scheduledevents?api-version=2020-07-01

Jika komputer virtual tidak dibuat dalam Virtual Network, kasus default untuk layanan awan dan komputer virtual klasik, logika tambahan diperlukan untuk menemukan alamat IP yang akan digunakan. Untuk mempelajari cara menemukan titik akhir host, lihat sampel ini.

Versi dan Ketersediaan Wilayah

Layanan Peristiwa Terjadwal berversi. Versi adalah wajib; versi saat ini adalah 2020-07-01.

Versi Jenis Rilis Wilayah Catatan Rilis
2020-07-01 Ketersediaan Umum Semua
  • Dukungan tambahan untuk Durasi Peristiwa
  • 2019-08-01 Ketersediaan Umum Semua
  • Penambahan dukungan untuk EventSource
  • 2019-04-01 Ketersediaan Umum Semua
  • Dukungan tambahan untuk Deskripsi Peristiwa
  • 2019-01-01 Ketersediaan Umum Semua
  • Dukungan tambahan untuk set skala komputer virtual EventType 'Terminate'
  • 2017-11-01 Ketersediaan Umum Semua
  • Dukungan tambahan untuk pembersihan komputer virtual Spot EventType 'Preempt'
  • 2017-08-01 Ketersediaan Umum Semua
  • Garis bawah yang ditambahkan sebelumnya dihapus dari nama sumber daya untuk komputer virtual infrastruktur sebagai layanan
  • Persyaratan header metadata diberlakukan untuk semua permintaan
  • 2017-03-01 Pratinjau Semua
  • Rilis awal
  • Catatan

    Rilis pratinjau sebelumnya dari Peristiwa Terjadwal didukung {terbaru} sebagai versi api. Format ini tidak lagi didukung dan tidak akan digunakan lagi di masa mendatang.

    Mengaktifkan dan Menonaktifkan Peristiwa Terjadwal

    Peristiwa Terjadwal diaktifkan untuk layanan Anda saat pertama kali mengajukan permintaan untuk peristiwa. Anda harus menunggu respons yang tertunda dalam panggilan pertama hingga dua menit.

    Peristiwa Terjadwal dinonaktifkan untuk layanan Anda jika tidak mengajukan permintaan selama 24 jam.

    Pemeliharaan yang Dimulai Pengguna

    Pemeliharaan komputer virtual yang dimulai pengguna melalui portal Microsoft Azure, API, CLI, atau PowerShell menghasilkan peristiwa terjadwal. Anda kemudian dapat menguji logika persiapan pemeliharaan di aplikasi Anda dan aplikasi Anda dapat mempersiapkan pemeliharaan yang dimulai pengguna.

    Jika Anda memulai ulang komputer virtual, peristiwa dengan jenis Reboot akan dijadwalkan. Jika Anda menyebarkan ulang komputer virtual, peristiwa dengan jenis Redeploy akan dijadwalkan. Biasanya peristiwa dengan sumber peristiwa pengguna dapat segera disetujui untuk menghindari keterlambatan pada tindakan yang dimulai pengguna.

    Gunakan API

    Header

    Saat meminta Metadata Service, Anda harus memberikan header Metadata:true untuk memastikan permintaan tidak dialihkan secara tidak sengaja. Header Metadata:true diperlukan untuk semua permintaan peristiwa terjadwal. Kegagalan untuk menyertakan header dalam permintaan menghasilkan respons "Bad Request" dari Metadata Service.

    Permintaan untuk peristiwa

    Anda bisa meminta peristiwa terjadwal dengan melakukan panggilan berikut:

    Sampel Bash

    curl -H Metadata:true http://169.254.169.254/metadata/scheduledevents?api-version=2020-07-01
    

    Sampel Python

    import json
    import requests
    
    metadata_url ="http://169.254.169.254/metadata/scheduledevents"
    header = {'Metadata' : 'true'}
    query_params = {'api-version':'2020-07-01'}
    
    def get_scheduled_events():           
        resp = requests.get(metadata_url, headers = header, params = query_params)
        data = resp.json()
        return data
    
    

    Respons berisi array aktivitas terjadwal. Array yang kosong berarti saat ini tidak ada peristiwa yang dijadwalkan. Dalam kasus di mana ada aktivitas terjadwal, respons berisi array aktivitas.

    {
        "DocumentIncarnation": {IncarnationID},
        "Events": [
            {
                "EventId": {eventID},
                "EventType": "Reboot" | "Redeploy" | "Freeze" | "Preempt" | "Terminate",
                "ResourceType": "VirtualMachine",
                "Resources": [{resourceName}],
                "EventStatus": "Scheduled" | "Started",
                "NotBefore": {timeInUTC},       
                "Description": {eventDescription},
                "EventSource" : "Platform" | "User",
                "DurationInSeconds" : {timeInSeconds},
            }
        ]
    }
    

    Properti Peristiwa

    Properti Deskripsi
    Inkarnasi Dokumen Bilangan bulat yang meningkat saat array peristiwa berubah. Dokumen dengan inkarnasi yang sama berisi informasi peristiwa yang sama, dan inkarnasi akan bertambah bertahap saat peristiwa berubah.
    EventId Pengidentifikasi unik global untuk peristiwa ini.

    Contoh:
    • 602d9444-d2cd-49c7-8624-8643e7171297
    EventType Dampak yang ditimbulkan oleh peristiwa ini.

    Nilai:
    • Freeze: Komputer Virtual dijadwalkan untuk berhenti selama beberapa detik. Konektivitas CPU dan jaringan dapat ditangguhkan, tetapi tidak ada dampak pada memori atau file terbuka.
    • Reboot: Komputer Virtual dijadwalkan untuk reboot (memori non-persisten hilang). Event ini tersedia dengan basis upaya terbaik
    • Redeploy: Komputer Virtual dijadwalkan untuk pindah ke simpul lain (disk sementara hilang).
    • Preempt: Spot Komputer Virtual sedang dihapus (disk sementara hilang).
    • Terminate: Komputer virtual dijadwalkan untuk dihapus.
    ResourceType Jenis sumber daya yang dipengaruhi peristiwa ini.

    Nilai:
    • VirtualMachine
    Sumber Daftar sumber daya yang dipengaruhi peristiwa ini.

    Contoh:
    • ["FrontEnd_IN_0", "BackEnd_IN_0"]
    EventStatus Status peristiwa ini.

    Nilai:
    • Scheduled: Peristiwa ini dijadwalkan untuk dimulai setelah waktu yang ditentukan dalam properti NotBefore.
    • Started: Peristiwa ini telah dimulai.
    Tidak ada Completed atau status serupa yang pernah diberikan. Peristiwa tidak lagi dikembalikan saat peristiwa selesai.
    NotBefore Waktu di mana peristiwa ini dapat dimulai. Peristiwa dijamin tidak dimulai sebelum waktu ini. Akan kosong jika peristiwa telah dimulai

    Contoh:
    • Senin, 19 Sep 2016 18:29:47 GMT
    Deskripsi Deskripsi peristiwa ini.

    Contoh:
    • Server host sedang menjalani pemeliharaan.
    EventSource Inisiator peristiwa.

    Contoh:
    • Platform: Peristiwa ini dimulai oleh platform.
    • User: Peristiwa ini dimulai oleh pengguna.
    DurationInSeconds Durasi yang diharapkan dari gangguan yang disebabkan oleh peristiwa tersebut.

    Contoh:
    • 9: Interupsi yang disebabkan oleh peristiwa akan berlangsung selama 9 detik.
    • -1: Nilai default yang digunakan jika durasi dampak tidak diketahui atau tidak berlaku.

    Penjadwalan Peristiwa

    Setiap peristiwa dijadwalkan dengan jumlah waktu minimum di masa mendatang berdasarkan jenis peristiwa. Waktu ini tercermin dalam properti NotBefore peristiwa.

    EventType Pemberitahuan minimum
    Bekukan 15 menit
    Reboot 15 menit
    Sebar ulang 10 menit
    Preempt 30 detik
    Hentikan Pengguna Dapat Dikonfigurasi :5 hingga 15 menit

    Catatan

    Dalam beberapa kasus, Azure dapat memprediksi kegagalan host karena perangkat keras yang terdegradasi dan akan mencoba mengurangi gangguan pada layanan Anda dengan menjadwalkan migrasi. Komputer virtual yang terpengaruh akan menerima peristiwa terjadwal dengan NotBefore yang biasanya beberapa hari di masa mendatang. Waktu aktual bervariasi tergantung pada prediksi penilaian risiko kegagalan. Azure mencoba memberikan pemberitahuan 7 hari sebelumnya jika memungkinkan, tetapi waktu aktual bervariasi dan mungkin lebih kecil jika prediksinya adalah bahwa ada kemungkinan besar perangkat keras akan segera mengalami kegagalan. Untuk meminimalkan risiko pada layanan Anda jika perangkat keras gagal sebelum migrasi yang dimulai oleh sistem, sebaiknya menyebarkan ulang komputer virtual Anda sendiri sesegera mungkin.

    Catatan

    Jika simpul host mengalami kegagalan perangkat keras, Azure akan melewati periode pemberitahuan minimum dan segera memulai proses pemulihan untuk mesin virtual yang terpengaruh. Ini mengurangi waktu pemulihan jika VM yang terpengaruh tidak dapat merespons. Selama proses pemulihan, peristiwa akan dibuat untuk semua VM yang terkena dampak dengan EventType = Reboot dan EventStatus = Started.

    Frekuensi polling

    Anda dapat melakukan polling titik akhir untuk pembaruan sesering atau jarang seperti yang Anda suka. Namun, semakin lama waktu antar permintaan, semakin banyak waktu yang berpotensi hilang untuk bereaksi terhadap peristiwa yang akan datang. Sebagian besar peristiwa memiliki pemberitahuan 5 hingga 15 menit sebelumnya, meskipun dalam beberapa kasus pemberitahuan sebelumnya mungkin hanya 30 detik. Untuk memastikan bahwa Anda memiliki waktu sebanyak mungkin untuk mengambil tindakan mitigasi, sebaiknya lakukan polling layanan sekali per detik.

    Memulai peristiwa

    Setelah mempelajari peristiwa yang akan datang dan menyelesaikan logika Anda untuk pematian yang lancar, Anda dapat menyetujui peristiwa yang menakjubkan dengan membuat panggilan POST ke Metadata Service dengan EventId. Panggilan ini menunjukkan kepada Azure bahwa panggilan tersebut dapat mempersingkat waktu pemberitahuan minimum (jika memungkinkan). Peristiwa mungkin tidak segera dimulai setelah disetujui, dan dalam beberapa kasus, Azure akan memerlukan persetujuan semua VM yang dihosting pada simpul sebelum melanjutkan acara.

    Sampel JSON berikut diharapkan dalam isi permintaan POST. Permintaan harus berisi daftar StartRequests. Masing-masing StartRequest berisi EventId untuk peristiwa yang ingin Anda percepat:

    {
    	"StartRequests" : [
    		{
    			"EventId": {EventId}
    		}
    	]
    }
    

    Layanan akan selalu mengembalikan kode keberhasilan 200 dalam kasus ID peristiwa yang valid, meskipun sudah disetujui oleh VM yang berbeda. Kode kesalahan 400 menunjukkan bahwa header permintaan atau payload salah format.

    Sampel Bash

    curl -H Metadata:true -X POST -d '{"StartRequests": [{"EventId": "f020ba2e-3bc0-4c40-a10b-86575a9eabd5"}]}' http://169.254.169.254/metadata/scheduledevents?api-version=2020-07-01
    

    Sampel Python

    import json
    import requests
    
    def confirm_scheduled_event(event_id):  
       # This payload confirms a single event with id event_id
       payload = json.dumps({"StartRequests": [{"EventId": event_id }]})
       response = requests.post("http://169.254.169.254/metadata/scheduledevents", 
                                headers =  {'Metadata' : 'true'}, 
                                params = {'api-version':'2020-07-01'}, 
                                data = payload)    
       return response.status_code
    

    Catatan

    Mengakui suatu peristiwa memungkinkan peristiwa untuk melanjutkan semua Resources dalam peristiwa, bukan hanya komputer virtual yang mengakui peristiwa tersebut. Oleh karena itu, Anda dapat memutuskan untuk memilih seorang pemimpin untuk mengoordinasikan pengakuan, yang mungkin sesederhana komputer pertama di bidang Resources.

    Contoh Respons

    Berikut ini adalah contoh serangkaian peristiwa yang dilihat oleh dua VM yang dimigrasikan langsung ke node lain.

    DocumentIncarnation berubah setiap kali ada informasi baru di Events. Persetujuan peristiwa akan memungkinkan pembekuan untuk melanjutkan WestNO_0 dan WestNO_1. DurationInSeconds dari -1 menunjukkan bahwa platform tidak tahu berapa lama operasi akan berlangsung.

    {
        "DocumentIncarnation":  1,
        "Events":  [
                   ]
    }
    
    {
        "DocumentIncarnation":  2,
        "Events":  [
                       {
                           "EventId":  "C7061BAC-AFDC-4513-B24B-AA5F13A16123",
                           "EventStatus":  "Scheduled",
                           "EventType":  "Freeze",
                           "ResourceType":  "VirtualMachine",
                           "Resources":  [
                                             "WestNO_0",
                                             "WestNO_1"
                                         ],
                           "NotBefore":  "Mon, 11 Apr 2022 22:26:58 GMT",
                           "Description":  "Virtual machine is being paused because of a memory-preserving Live Migration operation.",
                           "EventSource":  "Platform",
                           "DurationInSeconds":  -1
                       }
                   ]
    }
    
    {
        "DocumentIncarnation":  3,
        "Events":  [
                       {
                           "EventId":  "C7061BAC-AFDC-4513-B24B-AA5F13A16123",
                           "EventStatus":  "Started",
                           "EventType":  "Freeze",
                           "ResourceType":  "VirtualMachine",
                           "Resources":  [
                                             "WestNO_0",
                                             "WestNO_1"
                                         ],
                           "NotBefore":  "",
                           "Description":  "Virtual machine is being paused because of a memory-preserving Live Migration operation.",
                           "EventSource":  "Platform",
                           "DurationInSeconds":  -1
                       }
                   ]
    }
    
    {
        "DocumentIncarnation":  4,
        "Events":  [
                   ]
    }
    
    

    Sampel Python

    Sampel berikut meminta Metadata Service untuk peristiwa terjadwal dan menyetujui setiap peristiwa yang menakjubkan:

    #!/usr/bin/python
    import json
    import requests
    from time import sleep
    
    # The URL to access the metadata service
    metadata_url ="http://169.254.169.254/metadata/scheduledevents"
    # This must be sent otherwise the request will be ignored
    header = {'Metadata' : 'true'}
    # Current version of the API
    query_params = {'api-version':'2020-07-01'}
    
    def get_scheduled_events():           
        resp = requests.get(metadata_url, headers = header, params = query_params)
        data = resp.json()
        return data
    
    def confirm_scheduled_event(event_id):  
        # This payload confirms a single event with id event_id
        # You can confirm multiple events in a single request if needed      
        payload = json.dumps({"StartRequests": [{"EventId": event_id }]})
        response = requests.post(metadata_url, 
                                headers= header,
                                params = query_params, 
                                data = payload)    
        return response.status_code
    
    def log(event): 
        # This is an optional placeholder for logging events to your system 
        print(event["Description"])
        return
    
    def advanced_sample(last_document_incarnation): 
        # Poll every second to see if there are new scheduled events to process
        # Since some events may have necessarily short warning periods, it is 
        # recommended to poll frequently
        found_document_incarnation = last_document_incarnation
        while (last_document_incarnation == found_document_incarnation):
            sleep(1)
            payload = get_scheduled_events()    
            found_document_incarnation = payload["DocumentIncarnation"]        
            
        # We recommend processing all events in a document together, 
        # even if you won't be actioning on them right away
        for event in payload["Events"]:
    
            # Events that have already started, logged for tracking
            if (event["EventStatus"] == "Started"):
                log(event)
                
            # Approve all user initiated events. These are typically created by an 
            # administrator and approving them immediately can help to avoid delays 
            # in admin actions
            elif (event["EventSource"] == "User"):
                confirm_scheduled_event(event["EventId"])            
                
            # For this application, freeze events less that 9 seconds are considered
            # no impact. This will immediately approve them
            elif (event["EventType"] == "Freeze" and 
                int(event["DurationInSeconds"]) >= 0  and 
                int(event["DurationInSeconds"]) < 9):
                confirm_scheduled_event(event["EventId"])
                
            # Events that may be impactful (eg. Reboot or redeploy) may need custom 
            # handling for your application
            else: 
                #TODO Custom handling for impactful events
                log(event)
        print("Processed events from document: " + str(found_document_incarnation))
        return found_document_incarnation
    
    def main():
        # This will track the last set of events seen 
        last_document_incarnation = "-1"
    
        input_text = "\
            Press 1 to poll for new events \n\
            Press 2 to exit \n "
        program_exit = False 
    
        while program_exit == False:
            user_input = input(input_text)    
            if (user_input == "1"):                        
                last_document_incarnation = advanced_sample(last_document_incarnation)
            elif (user_input == "2"):
                program_exit = True       
    
    if __name__ == '__main__':
        main()
    

    Langkah berikutnya