Sinkronisasi waktu untuk VM Linux di Azure

Berlaku untuk: ✔️ Mesin Virtual Linux ✔️ Set skala fleksibel

Sinkronisasi waktu penting untuk keamanan dan korelasi peristiwa. Sinkronisasi waktu terkadang digunakan untuk implementasi transaksi terdistribusi. Akurasi waktu antar-beberapa sistem komputer dicapai melalui sinkronisasi. Sinkronisasi dapat dipengaruhi oleh beberapa hal, termasuk reboot dan lalu lintas jaringan antara sumber waktu dan komputer yang mengambil waktu.

Azure didukung oleh infrastruktur yang menjalankan Windows Server 2016. Windows Server 2016 memiliki algoritma yang ditingkatkan, yang digunakan untuk memperbaiki waktu dan mengondisikan jam lokal untuk disinkronkan dengan UTC. Fitur Waktu Akurat Windows Server 2016 sangat meningkatkan cara layanan VMICTimeSync yang mengatur VM dengan host untuk waktu yang akurat. Peningkatan mencakup waktu awal yang lebih akurat pada mulai VM atau pemulihan VM dan koreksi latensi interupsi.

Catatan

Untuk gambaran singkat tentang layanan Waktu Windows, lihat video ringkasan tingkat tinggi ini.

Untuk informasi selengkapnya, lihat Waktu yang akurat untuk Windows Server 2016.

Gambaran Umum

Akurasi untuk jam komputer diukur pada seberapa dekat jam komputer dengan standar Waktu Universal Terkoordinasi (UTC). UTC ditentukan oleh sampel jam atom akurat multinasional yang hanya dapat meleset selama satu detik dalam 300 tahun. Namun, membaca UTC secara langsung membutuhkan perangkat keras khusus. Sebaliknya, server waktu disinkronkan ke UTC dan diakses dari komputer lain untuk memberikan skalabilitas dan ketahanan. Setiap komputer memiliki layanan sinkronisasi waktu yang berjalan dan mengetahui server jam mana yang akan digunakan lalu secara berkala memeriksa apakah jam komputer perlu dikoreksi dan menyesuaikan waktu jika diperlukan.

Host Azure disinkronkan ke server waktu Microsoft internal yang mengambil waktu mereka dari perangkat Stratum 1 milik Microsoft, dengan antena GPS. Komputer virtual di Azure dapat bergantung pada host untuk meneruskan waktu yang akurat (waktu host) ke VM atau VM dapat langsung mendapatkan waktu dari server waktu, atau kombinasi keduanya.

Pada perangkat keras yang berdiri sendiri, OS Linux hanya membaca jam perangkat keras host pada boot. Setelah itu, jam dipertahankan menggunakan timer interupsi di kernel Linux. Dalam konfigurasi ini, jam akan menyimpang dari waktu ke waktu. Dalam distribusi Linux yang lebih baru di Azure, VM dapat menggunakan penyedia VMICTimeSync, termasuk dalam layanan integrasi Linux (LIS), untuk lebih sering mengkueri pembaruan jam dari host.

Interaksi komputer virtual dengan host juga dapat memengaruhi jam. Selama pemeliharaan penyimpanan memori, VM dijeda hingga 30 detik. Misalnya, sebelum pemeliharaan dimulai, jam VM menunjukkan 10:00:00 AM dan berlangsung selama 28 detik. Setelah VM dilanjutkan, jam pada VM masih akan menunjukkan 10:00:00, yang akan menjadi tidak tepat 28 detik. Untuk memperbaiki ini, layanan VMICTimeSync memantau apa yang terjadi pada host dan memperbarui jam waktu hari di VM Linux untuk mengimbangi.

Jika sinkronisasi waktu tidak bekerja, jam pada VM akan mengakumulasi kesalahan. Ketika hanya ada satu VM, efeknya mungkin tidak signifikan kecuali beban kerja memerlukan pencatatan waktu yang sangat akurat. Namun dalam kebanyakan kasus, kita memiliki beberapa VM yang saling tersambung yang menggunakan waktu untuk melacak transaksi dan waktu harus konsisten di seluruh penyebaran. Ketika waktu antar-VM berbeda, Anda bisa melihat efek berikut:

  • Autentikasi akan gagal. Protokol keamanan seperti Kerberos atau teknologi yang bergantung pada sertifikat mengandalkan waktu yang konsisten di seluruh sistem.
  • Sangat sulit untuk mencari tahu apa yang telah terjadi dalam sistem jika log (atau data lain) memiliki waktu yang berbeda. Peristiwa yang sama akan terlihat seperti terjadi pada waktu yang berbeda, sehingga mempersulit korelasi.
  • Jika jam mati, tagihan dapat dihitung dengan tidak benar.

Opsi konfigurasi

Sinkronisasi waktu mengharuskan layanan sinkronisasi waktu berjalan di VM Linux, ditambah sumber informasi waktu yang akurat untuk penyinkronan. Biasanya ntpd atau chronyd digunakan sebagai layanan sinkronisasi waktu, meskipun ada layanan sinkronisasi waktu sumber terbuka lainnya yang juga dapat digunakan. Sumber informasi waktu yang akurat dapat menjadi host Azure atau layanan waktu eksternal yang diakses melalui internet publik. Saat sendirian, layanan VMICTimeSync tidak menyediakan sinkronisasi waktu yang berkelanjutan antara host Azure dan VM Linux kecuali setelah jeda untuk pemeliharaan host seperti yang dijelaskan di atas.

Secara historis, sebagian besar citra Marketplace Azure dengan Linux telah dikonfigurasi dengan salah satu dari dua cara ini:

  • Tidak ada layanan sinkronisasi waktu yang berjalan secara default
  • ntpd berjalan sebagai layanan sinkronisasi waktu, dan menyinkronkan terhadap sumber waktu NTP eksternal yang diakses melalui jaringan. Misalnya, citra Ubuntu 18.04 LTS Marketplace menggunakan ntp.ubuntu.com.

Untuk mengonfirmasi bahwa ntpd disinkronkan dengan benar, jalankan perintah ntpq -p.

Beberapa citra Marketplace Azure terbaru dengan Linux sedang diubah untuk menggunakan chronyd sebagai layanan sinkronisasi waktu, dan chronyd dikonfigurasi agar tersinkron dengan host Azure, bukan dengan sumber waktu NTP eksternal. Waktu host Azure biasanya merupakan sumber waktu terbaik untuk disinkronkan, karena dipertahankan dengan sangat akurat dan andal, dan dapat diakses tanpa penundaan jaringan variabel yang inheren dalam pengaksesan sumber waktu NTP eksternal melalui internet publik.

VMICTimeSync digunakan secara paralel dan menyediakan dua fungsi:

  • Segera memperbarui waktu VM Linux setelah peristiwa pemeliharaan host
  • Menginstansiasi sumber jam perangkat keras Precision Time Protocol (PTP) IEEE 1588 sebagai perangkat /dev/ptp yang menyediakan waktu akurat dari host Azure. Chronyd dapat dikonfigurasi untuk disinkronkan terhadap sumber waktu ini (yang merupakan konfigurasi default dalam citra Linux terbaru). Distribusi Linux dengan kernel versi 4.11 atau yang lebih baru (atau versi 3.10.0-693 atau yang lebih baru untuk RHEL / CentOS 7) mendukung perangkat /dev/ptp. Untuk versi kernel yang kebih lama yang tidak mendukung /dev/ptp untuk waktu host Azure, hanya sinkronisasi terhadap sumber waktu eksternal yang dimungkinkan.

Konfigurasi default tentu dapat diubah. Citra lama yang dikonfigurasi untuk menggunakan ntpd dan sumber waktu eksternal dapat diubah agar menggunakan chronyd dan perangkat /dev/ptp untuk waktu host Azure. Demikian pula, citra yang menggunakan waktu host Azure melalui perangkat /dev/ptp dapat dikonfigurasi agar menggunakan sumber waktu NTP eksternal jika diperlukan oleh aplikasi atau beban kerja Anda.

Alat dan sumber daya

Ada beberapa perintah dasar untuk memeriksa konfigurasi sinkronisasi waktu Anda. Dokumentasi untuk distribusi Linux memiliki detail lebih lanjut tentang cara terbaik untuk mengonfigurasi sinkronisasi waktu untuk distribusi tersebut.

Layanan integrasi

Periksa untuk melihat apakah layanan integrasi (hv_utils) dimuat.

lsmod | grep hv_utils

Anda akan melihat yang mirip dengan ini:

hv_utils               24418  0
hv_vmbus              397185  7 hv_balloon,hyperv_keyboard,hv_netvsc,hid_hyperv,hv_utils,hyperv_fb,hv_storvsc

Memeriksa Sumber Jam PTP

Dengan versi Linux yang lebih baru, sumber jam Precision Time Protocol (PTP) yang terkait dengan host Azure tersedia sebagai bagian dari penyedia VMICTimeSync. Pada versi lama Red Hat Enterprise Linux atau CentOS 7.x, SSIS Linux dapat diunduh dan digunakan untuk memasang driver yang diperbarui. Ketika sumber jam PTP tersedia, perangkat Linux akan dalam bentuk /dev/ptpx.

Lihat sumber jam PTP mana yang tersedia.

ls /sys/class/ptp

Dalam contoh ini, nilai yang dikembalikan adalah ptp0, jadi kita menggunakannya untuk memeriksa nama jam. Untuk memverifikasi perangkat, periksa nama jam.

cat /sys/class/ptp/ptp0/clock_name

Ini akan mengembalikan hyperv, yang berarti host Azure.

Di VM Linux yang mengaktifkan Jaringan Terakselerasi, Anda mungkin melihat beberapa perangkat PTP terdaftar karena driver Mellanox mlx5 juga membuat perangkat /dev/ptp. Karena urutan inisialisasi bisa berbeda setiap kali Linux di-boot, perangkat PTP yang terkait dengan host Azure mungkin berupa /dev/ptp0 atau /dev/ptp1, yang mempersulit konfigurasi chronyd dengan sumber jam yang benar. Untuk mengatasi masalah ini, citra Linux terbaru memiliki aturan udev yang membuat symlink /dev/ptp_hyperv ke entri /dev/ptp mana pun terkait dengan host Azure. Chrony harus dikonfigurasi untuk menggunakan symlink ini, bukan /dev/ptp0 atau /dev/ptp1.

chrony

Pada Ubuntu 19.10 dan versi yang lebih baru, Red Hat Enterprise Linux, dan CentOS 8.x, chronyd dikonfigurasi untuk menggunakan jam sumber PTP. Alih-alih chronyd, rilis Linux yang lebih lama menggunakan daemon Network Time Protocol (ntpd), yang tidak mendukung sumber PTP. Untuk mengaktifkan PTP dalam rilis tersebut, chrony harus dipasang dan dikonfigurasi secara manual (di chrony.conf) menggunakan pernyataan berikut:

refclock PHC /dev/ptp_hyperv poll 3 dpoll -2 offset 0 stratum 2

Jika symlink /dev/ptp_hyperv tersedia, gunakan hal tersebut sebagai ganti dari /dev/ptp0 untuk menghindari kebingungan dengan perangkat /dev/ptp yang dibuat oleh driver Mellanox mlx5.

Informasi strata tidak secara otomatis disampaikan dari host Azure ke tamu Linux. Baris konfigurasi sebelumnya menetapkan bahwa sumber waktu host Azure diperlakukan sebagai Stratum 2, yang pada gilirannya menyebabkan tamu Linux melaporkan dirinya sebagai Stratum 3. Anda dapat mengubah pengaturan strata di baris konfigurasi jika Anda ingin tamu Linux melaporkan dirinya sendiri secara berbeda.

Secara default, chronyd mempercepat atau memperlambat jam sistem untuk memperbaiki penyimpangan waktu apa pun. Jika penyimpangan menjadi terlalu besar, chrony gagal memperbaiki penyimpangan tersebut. Untuk mengatasinya, parameter makestep dalam /etc/chrony.conf dapat diubah untuk memaksa sinkronisasi waktu jika penyimpangan melebihi ambang yang ditentukan.

makestep 1.0 -1

Di sini, chrony akan memaksa pembaruan waktu jika penyimpangan lebih besar dari 1 detik. Untuk menerapkan perubahan, mulai ulang layanan chronyd:

systemctl restart chronyd

Untuk informasi selengkapnya tentang Ubuntu dan NTP, lihat Sinkronisasi Waktu.

Untuk informasi selengkapnya tentang Red Hat dan NTP, lihat Mengonfigurasi NTP.

Untuk informasi selengkapnya tentang chronyd, lihat Menggunakan chrony.

systemd

Pada rilis SUSE dan Ubuntu sebelum 19.10, sinkronisasi waktu dikonfigurasi menggunakan systemd. Untuk informasi selengkapnya tentang Ubuntu, lihat Sinkronisasi Waktu. Untuk informasi selengkapnya tentang SUSE, lihat Bagian 4.5.8 di Catatan Rilis SUSE Linux Enterprise Server 12 SP3.

Langkah berikutnya

Untuk informasi selengkapnya, lihat Waktu yang akurat untuk Windows Server 2016.