chrony vs systemd-timesyncd - Apa perbedaan dan kasus penggunaan sebagai klien NTP?

18

Entah bagaimana tetapi tidak cukup membangun pada pertanyaan lama "ntpd vs systemd-timesyncd - Bagaimana cara mencapai sinkronisasi NTP yang andal?" , Saya ingin bertanya tentang perbedaan antara chrony dan systemd-timesyncd dalam hal klien NTP .

Saya tahu bahwa systemd-timesyncd adalah implementasi klien ntp yang kurang lebih minimal sedangkan chrony adalah solusi daemon NTP yang lengkap yang kebetulan menyertakan klien NTP.

Catatan rilis Bionic Beaver ubuntu menyatakan sebagai berikut:

Untuk sinkronisasi waktu sederhana, sistem dasar sudah dilengkapi dengan systemd-timesyncd. Chrony hanya diperlukan untuk bertindak sebagai server waktu atau jika Anda ingin sinkronisasi yang diiklankan lebih akurat dan efisien.

Saya suka ide menggunakan alat minimal yang sudah diinstal sebelumnya untuk melakukan pekerjaan dan saya cukup yakin systemd-timesyncd akan melakukan pekerjaan untuk kasus penggunaan saya, masih saya ingin tahu:

  • Apa perbedaan dunia nyata antara keduanya dalam hal akurasi?
  • Apa perbedaan dalam efisiensi?
  • Apa itu kebutuhan sinkronisasi waktu "tidak sederhana" alias kasus penggunaan untuk kroni sebagai klien NTP?
wedi
sumber

Jawaban:

13

The pengumuman systemd-timesyncd di file NEWS systemd melakukan pekerjaan yang baik menjelaskan perbedaan dari alat ini dibandingkan dengan Chrony dan alat-alat seperti itu. (penekanan milikku):

Sebuah baru "systemd-timesyncd" daemon telah ditambahkan untuk sinkronisasi jam sistem di seluruh jaringan. Ini mengimplementasikan klien SNTP . Berbeda dengan implementasi NTP seperti chrony atau server referensi NTP ini hanya mengimplementasikan sisi klien, dan tidak repot dengan kompleksitas NTP penuh, hanya berfokus pada permintaan waktu dari satu server jauh dan menyinkronkan jam lokal untuk itu . Kecuali Anda bermaksud untuk melayani NTP ke klien jaringan atau ingin terhubung ke jam perangkat keras lokal, klien NTP sederhana ini akan lebih dari cukup untuk sebagian besar instalasi. [...]

Pengaturan ini adalah kasus penggunaan umum untuk sebagian besar host di armada server. Mereka biasanya akan disinkronkan dari server NTP lokal, yang dengan sendirinya disinkronkan dari berbagai sumber, mungkin termasuk perangkat keras. systemd-timesyncd mencoba untuk memberikan solusi yang mudah digunakan untuk kasus penggunaan umum.


Mencoba menjawab pertanyaan spesifik Anda:

Apa perbedaan dunia nyata antara keduanya dalam hal akurasi?

Saya percaya Anda bisa mendapatkan akurasi yang lebih tinggi dengan mendapatkan data sinkronisasi dari berbagai sumber, yang secara khusus bukan kasus penggunaan yang didukung untuk systemd-timesyncd. Tetapi ketika Anda menggunakannya untuk mendapatkan data sinkronisasi dari server NTP pusat yang terhubung ke jaringan internal andal Anda, menggunakan beberapa sumber tidak terlalu relevan dan Anda mendapatkan akurasi yang baik dari satu sumber.

Jika Anda menyinkronkan server Anda dari server tepercaya di jaringan lokal dan di pusat data yang sama , perbedaan akurasi antara NTP dan SNTP akan hampir tidak ada. NTP dapat memperhitungkan RTT dan melakukan penghitungan waktu, tetapi itu tidak menguntungkan ketika RTT Anda sangat kecil, yang merupakan kasus jaringan lokal cepat dan mesin di dekatnya. Anda juga tidak memerlukan banyak sumber jika dapat mempercayai sumber yang Anda gunakan.

Apa perbedaan dalam efisiensi?

Mendapatkan sinkronisasi dari satu sumber jauh lebih sederhana daripada mendapatkannya dari berbagai sumber, karena Anda tidak harus membuat keputusan tentang sumber mana yang lebih baik daripada yang lain dan mungkin menggabungkan informasi dari berbagai sumber. Algoritma lebih sederhana dan akan membutuhkan lebih sedikit beban CPU untuk kasing sederhana.

Apa itu kebutuhan sinkronisasi waktu "tidak sederhana" alias kasus penggunaan untuk kroni sebagai klien NTP?

Itu dibahas dalam kutipan di atas, tetapi bagaimanapun juga ini adalah kasus penggunaan untuk Chrony yang tidak dicakup oleh systemd-timesyncd:

  • menjalankan server NTP (sehingga host lain dapat menggunakan host ini sebagai sumber untuk sinkronisasi);
  • mendapatkan informasi sinkronisasi NTP dari berbagai sumber (yang penting bagi penghuni yang mendapatkan informasi itu dari server publik di Internet); dan
  • mendapatkan informasi sinkronisasi dari jam lokal, yang biasanya melibatkan perangkat keras khusus seperti perangkat GPS yang dapat memperoleh informasi waktu yang akurat dari satelit.

Kasus penggunaan ini membutuhkan Chrony atau ntpd atau serupa.

filbranden
sumber
1
Terima kasih banyak atas jawaban rumit Anda dan acungan jempol untuk secara khusus menangani pertanyaan saya. Untuk menguraikan itu: - - 1. Apa urutan besarnya delta akurasi. Mengetahui hal ini pasti akan menambah substansi dalam pengambilan keputusan. Apakah kita berbicara sekitar 10 ^ -9 atau 10 ^ -1 detik? - - 2. Jawaban Anda mengenai efisiensi membuat saya lebih berani: Apakah - berbicara secara menghina - beberapa rata-rata beberapa angka menambah begitu banyak beban CPU sehingga Anda perlu menyebutkannya dalam catatan rilis Ubuntu?
wedi
3
@wedi: Keakuratan timesyncd akan tergantung terutama pada server dan jaringan. Hanya dengan satu server, tidak ada cara untuk mengetahui apakah server mengembalikan data palsu, jadi Anda hanya harus memercayainya sepenuhnya. (Kesalahan maksimum dari ini tidak terbatas). Akurasi maksimum yang dapat Anda capai akan ditentukan oleh jitter jaringan antara Anda dan server (bisa beberapa milidetik atau lebih).
TooTea
1
Terima kasih, @TooTea! Baik. Saya melihat. Jadi peningkatan akurasi berasal dari menggunakan lebih dari satu sumber dan setiap kroni sihir khusus yang dilakukan dengan satu sumber tunggal dapat diabaikan. Pemahaman saya: - - 1. Menggunakan metadata.google.internal penghemat waktu tunggal pada instance GCE => tidak ada perbedaan yang terukur dalam keakuratan (mari kita kecualikan penetapan waktu et.al.) - - 2. Menggunakan tiga server waktu dengan reputasi besar pada vm di beberapa perusahaan hosting menetap => Anda melihat perbedaan tetapi tidak "banyak" (apa pun ini) - - 3. Menggunakan pool.ntp.org pada raspi yang terhubung melalui beberapa ISP => Anda sama senangnya dengan yang didapat oleh larry.
wedi
Saya akan mengatakan yang benar pada ketiga @wedi. Khususnya (1), jika Anda menggunakan penghemat waktu pada "jaringan lokal" yang sama dengan mesin Anda dan pada dasarnya di pusat data yang sama (rtt sangat rendah dan jitter sangat rendah) manfaat NTP dan penentuan waktu vs SNTP, terkait akurasi, akan sangat rendah. Jadi ada sedikit alasan untuk menjalankan NTP (dan bukan SNTP) dalam kasus penggunaan tersebut!
filbranden
@wed Memperbarui jawaban untuk menyebutkan secara eksplisit menggunakan server tepercaya di jaringan lokal.
filbranden
14

Saat jawaban yang lain menyatakan dengan benar, chronymengimplementasikan NTP dan systemd-timesyncdSNTP.

Dari sudut pandang klien layanan waktu:

SNTP adalah protokol yang jauh lebih sederhana untuk diimplementasikan;
NTP memungkinkan untuk peningkatan bertahap / koreksi tepat waktu. Satu keuntungan utama NTP adalah bahwa ia juga memperhitungkan RTT dari jawaban untuk mendapatkan waktu yang lebih tepat.

Dari https://www.meinbergglobal.com/english/faq/faq_37.htm

Sementara server NTP berfitur lengkap atau klien mencapai tingkat akurasi yang sangat tinggi dan menghindari langkah waktu mendadak sebanyak mungkin dengan menggunakan metode matematika dan statistik yang berbeda dan penyesuaian kecepatan clock yang halus, SNTP hanya dapat direkomendasikan untuk aplikasi sederhana, di mana persyaratan untuk akurasi dan reliabilitas tidak terlalu menuntut. Dengan mengabaikan nilai drift dan menggunakan cara-cara yang disederhanakan dari metode penyesuaian jam sistem (sering kali loncatan waktu sederhana), SNTP hanya mencapai sinkronisasi waktu berkualitas rendah bila dibandingkan dengan implementasi NTP penuh.

SNTP mengadopsi pendekatan yang jauh lebih sederhana. Banyak kompleksitas dari algoritma NTP dihilangkan. Alih-alih mengurangi waktu, banyak klien SNTP mengambil waktu. Ini bagus untuk banyak aplikasi di mana cap waktu yang sederhana diperlukan. Selain itu, SNTP tidak memiliki kemampuan untuk memantau dan memfilter beberapa server NTP. Seringkali pendekatan round-robin sederhana digunakan, di mana jika satu server gagal, yang berikutnya dalam daftar digunakan

Dari https://www.masterclock.com/company/masterclock-inc-blog/ntp-vs-sntp

NTP jauh lebih akurat dan tepat daripada SNTP, dan ini membuatnya menjadi pemenang de facto di sebagian besar aplikasi perusahaan. Di sisi lain, kesederhanaan SNTP membuatnya lebih sesuai untuk hal-hal seperti kamera IP, DVR dan beberapa switch jaringan. Jenis perangkat keras ini tidak memiliki sumber daya pemrosesan untuk menangani protokol yang lebih kompleks, tetapi karena perangkat yang terhubung menjadi semakin kuat, itu dapat berubah.

Satu kelemahan utama dari SNTP adalah Anda tidak dapat membuatnya lebih akurat dengan mengambil waktu dari berbagai sumber seperti Network Time Protocol lakukan secara default.

Satu poin utama lainnya yang saya bisa lihat implementasi SNTP memberikan lebih banyak masalah daripada NTP adalah dalam virtualisasi, ketika Anda memiliki daemon hypervisor dan NTP yang mencoba mengubah waktu VM. Khususnya dengan mereka yang tidak setuju tepat waktu dengan beberapa kesalahan konfigurasi menyebabkan keduanya aktif, ini dapat menyebabkan masalah besar. (Sementara administrator sistem yang kompeten hanya akan tetap aktif satu metode untuk sinkronisasi dengan waktu, itu bisa terjadi mereka berdua aktif oleh kesalahan konfigurasi).

PS systemd-timesyncdtidak boleh menjadi alternatif yang disarankan saat tidak digunakan systemd.

Rui F Ribeiro
sumber
1
Tidak sepenuhnya jelas. Secara teori seseorang dapat menjalankan systemd-timesyncdprogram di bawah manajer layanan lain. Saya telah menyediakan bundel layanan untuk menjalankannya di bawah nosh toolkit service-managersejak 2018. Yang Anda lewatkan adalah bahwa orang-orang systemd (per bug Debian # 812522) mendorong layanan tamu VirtualBox dan yang lainnya untuk secara eksplisit bertentangan dengan systemd-timesyncdlayanan untuk mencegah penggunaannya. di mesin virtual.
JdeBP
@JdeBP Komentar menarik. Saya menggunakan Debian tanpa systemd.... Namun demikian, vmtools timesync dapat dan akan dinonaktifkan, dan harus dinonaktifkan di server yang melakukan layanan NTP (misalnya server NTP VMs), dan beberapa sysadmin tetap disinkronkan oleh vmtools, yang lain mengikuti makalah VmWare yang menonaktifkan vmtools timesync (yang seharusnya hanya digunakan ketika Anda tahu apa yang Anda lakukan). Bug itu tidak linier untuk dipecahkan, dan itu akan menjadi titik konfigurasi tambahan yang mudah dilewatkan oleh orang-orang yang mengikuti rekomendasi VmWare untuk tidak menggunakan vmtools timesync.
Rui F Ribeiro
(edit jawaban saya berdasarkan komentar Anda, ada satu kesalahan pada teks tentang mengelola vmtools vs (S) NTP, dan membuatnya lebih eksplisit)
Rui F Ribeiro
1
@wedi Dalam kasus VmWare timesync dengan hypervisor dapat dinonaktifkan baik di Vcenter, konfigurasi gambar VM atau di sisi Linux. lihat terkait unix.stackexchange.com/questions/492487/... Saya selalu melakukannya vmware-toolbox-cmd timesync disabledi server NTP saya, apakah VmWare guys telah menonaktifkan timesync untuk VM tersebut. (Saya juga biasanya lebih suka menggunakan chrony sebagai klien NTP)
Rui F Ribeiro
1
Saya senang Anda menunjukkan kemungkinan balapan sinkronisasi waktu! Senang mengingat hal ini!
wedi
0

chronybukan bentuk garpu ntpdtetapi diimplementasikan dari awal. Ini mengimplementasikan mode klien dan server protokol NTPv4 penuh ( RFC5905 ). Pada pengguna kelas perusahaan, kami melihat tren beralih dari tradisional ntpdke chronyseperti Red Hat (RHEL 7 dan seterusnya) dan SuSE (dari SLES 15).

systemd-timesyncdhanya menerapkan mode klien protokol SNTP ( RFC4330 ) . Karenanya kasus penggunaan yang rumit tidak dicakup oleh . Sebagai contoh, SNTP tidak dapat membuatnya lebih akurat dengan mengambil waktu dari berbagai sumber seperti NTP tidak secara default. Akibatnya tidak dapat memberikan waktu presisi setinggi .systemd-timesyncdsystemd-timesyncdchrony

PT Huynh
sumber
1
Mmmh Saya belum melihat ada yang mengaku chrony adalah garpu dan saya sebutkan dalam pertanyaan saya bahwa chrony mengimplementasikan server dan klien sedangkan systemd-timesyncd adalah klien saja. Terima kasih telah menyebutkan RFC yang relevan.
wedi