Sinkronisasi waktu untuk VM Linux di Azure

Perhatian

Artikel ini mereferensikan CentOS, distribusi Linux yang mendekati status End Of Life (EOL). Harap pertimbangkan penggunaan dan rencanakan yang sesuai. Untuk informasi selengkapnya, lihat panduan Akhir Masa Pakai CentOS.

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

Sinkronisasi waktu penting untuk keamanan dan korelasi peristiwa. 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 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 umum singkat tentang layanan Waktu Windows, lihat video gambaran umum 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 mengandalkan 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 AM, yang akan menjadi tidak tepat selama 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 membutuhkan timekeeping yang sangat akurat. Tetapi dalam kebanyakan kasus, kami memiliki beberapa VM yang saling terhubung yang menggunakan waktu untuk melacak transaksi dan waktunya 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.
  • Sulit untuk mencari tahu apa yang telah terjadi dalam sistem jika log (atau data lain) tidak setuju tepat waktu. Peristiwa yang sama akan terlihat seperti terjadi pada waktu yang berbeda, sehingga mempersulit korelasi.
  • Jika jam mati, kemungkinan akan terjadi kesalahan dalam penghitungan tagihan.

Opsi konfigurasi

Sinkronisasi waktu mengharuskan layanan sinkronisasi waktu berjalan di VM Linux, ditambah sumber informasi waktu yang akurat untuk disinkronkan. 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. Dengan sendirinya, layanan VMICTimeSync tidak menyediakan sinkronisasi waktu yang sedang berlangsung 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 secara akurat dan andal, dan dapat diakses tanpa penundaan jaringan variabel yang melekat dalam mengakses 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 sebelumnya 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.

$ sudo lsmod | grep hv_utils

Anda akan melihat sesuatu yang mirip dengan berikut 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.

$ sudo cat /sys/class/ptp/ptp0/clock_name

Ini akan mengembalikan hyperv, yang berarti host Azure.

Di beberapa VM Linux Anda mungkin melihat beberapa perangkat PTP tercantum. Salah satu contohnya adalah untuk Accelerated Networking 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 selalu dikonfigurasi untuk menggunakan /dev/ptp_hyperv symlink alih-alih /dev/ptp0 atau /dev/ptp1.

Jika Anda mengalami masalah dengan perangkat yang /dev/ptp_hyperv tidak dibuat, Anda dapat menggunakan aturan dan langkah-langkah udev di bawah ini untuk mengonfigurasinya:

CATATAN: Sebagian besar distribusi Linux seharusnya tidak memerlukan aturan udev ini karena telah diterapkan dalam versi systemd yang lebih baru

udev Buat file aturan:

$ sudo cat > /etc/udev/rules.d/99-ptp_hyperv.rules << EOF
ACTION!="add", GOTO="ptp_hyperv"
SUBSYSTEM=="ptp", ATTR{clock_name}=="hyperv", SYMLINK += "ptp_hyperv"
LABEL="ptp_hyperv"
EOF

Reboot Komputer Virtual ATAU muat udev ulang aturan dengan:

$ sudo udevadm control --reload
$ sudo udevadm trigger --subsystem-match=ptp --action=add

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, kroni gagal memperbaiki penyimpangan. 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:

$ sudo systemctl restart chronyd && sudo systemctl restart chrony

Dalam beberapa kasus, layanan systemd-timesyncd mungkin masih diaktifkan dan mencoba melakukan sinkronisasi pada boot ulang, jika Anda masih melihat pesan dalam syslog yang terlihat mirip dengan:

systemd-timesyncd[945]: Network configuration changed, trying to establish connection.
Aug  1 12:59:45 vm-name systemd-timesyncd[945]: Network configuration changed, trying to establish connection.
Aug  1 12:59:45 vm-name systemd-timesyncd[945]: Network configuration changed, trying to establish connection.
Aug  1 12:59:45 vm-name systemd-timesyncd[945]: Network configuration changed, trying to establish connection.
Aug  1 12:59:45 vm-name systemd-timesyncd[945]: Network configuration changed, trying to establish connection.
Aug  1 12:59:45 vm-name systemd-timesyncd[945]: Synchronized to time server 185.125.190.56:123 (ntp.ubuntu.com)

Anda dapat menonaktifkannya dengan menggunakan:

$ sudo systemctl disable systemd-timesyncd

Dalam kebanyakan kasus, systemd-timesyncd akan mencoba selama boot tetapi setelah chrony dimulai, itu akan menimpa dan menjadi sumber sinkronisasi waktu default.

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.

cloud-init

Gambar yang menggunakan cloud-init untuk menyediakan VM dapat menggunakan bagian ntp untuk menyiapkan layanan sinkronisasi waktu. Contoh cloud-init menginstal kroni dan mengonfigurasinya untuk menggunakan sumber jam PTP untuk VM Ubuntu:

#cloud-config
ntp:
  enabled: true
  ntp_client: chrony
  config:
    confpath: /etc/chrony/chrony.conf
    packages:
     - chrony
    service_name: chrony
    template: |
       ## template:jinja
       driftfile /var/lib/chrony/chrony.drift
       logdir /var/log/chrony
       maxupdateskew 100.0
       refclock PHC /dev/ptp_hyperv poll 3 dpoll -2 offset 0 stratum 2
       makestep 1.0 -1

Anda kemudian dapat base64 cloud-config di atas untuk digunakan di osProfile bagian dalam templat ARM:

[Convert]::ToBase64String((Get-Content -Path ./cloud-config.txt -Encoding Byte))
"osProfile": {
  "customData": "I2Nsb3VkLWNvbmZpZwpudHA6CiAgZW5hYmxlZDogdHJ1ZQogIG50cF9jbGllbnQ6IGNocm9ueQogIGNvbmZpZzoKICAgIGNvbmZwYXRoOiAvZXRjL2Nocm9ueS9jaHJvbnkuY29uZgogICAgcGFja2FnZXM6CiAgICAgLSBjaHJvbnkKICAgIHNlcnZpY2VfbmFtZTogY2hyb255CiAgICB0ZW1wbGF0ZTogfAogICAgICAgIyMgdGVtcGxhdGU6amluamEKICAgICAgIGRyaWZ0ZmlsZSAvdmFyL2xpYi9jaHJvbnkvY2hyb255LmRyaWZ0CiAgICAgICBsb2dkaXIgL3Zhci9sb2cvY2hyb255CiAgICAgICBtYXh1cGRhdGVza2V5IDEwMC4wCiAgICAgICByZWZjbG9jayBQSEMgL2Rldi9wdHBfaHlwZXJ2IHBvbGwgMyBkcG9sbCAtMgogICAgICAgbWFrZXN0ZXAgMS4wIC0x"
}

Untuk informasi selengkapnya tentang cloud-init di Azure, lihat Gambaran umum dukungan cloud-init untuk VM Linux di Azure.

Langkah berikutnya

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