GNU/Linux >> Belajar Linux >  >> Linux

Kelola NTP dengan Chrony

"Apakah ada yang benar-benar tahu jam berapa sekarang? Apakah ada yang benar-benar peduli?"

– Chicago, 1969

Mungkin grup rock itu tidak peduli jam berapa sekarang, tetapi komputer kita perlu mengetahui waktu yang tepat. Ketepatan waktu sangat penting untuk jaringan komputer. Di perbankan, pasar saham, dan bisnis keuangan lainnya, transaksi harus dijaga dalam urutan yang benar, dan urutan waktu yang tepat sangat penting untuk itu. Untuk sysadmin dan profesional DevOps, lebih mudah untuk mengikuti jejak email melalui serangkaian server atau untuk menentukan urutan kejadian yang tepat menggunakan file log pada host yang tersebar secara geografis ketika waktu yang tepat disimpan di komputer yang bersangkutan.

Saya dulu bekerja di sebuah organisasi yang menerima lebih dari 20 juta email per hari dan memiliki empat server hanya untuk menerima dan melakukan filter dasar pada banjir email yang masuk. Dari sana, email dikirim ke salah satu dari empat server lain untuk melakukan penilaian anti-spam yang lebih kompleks, kemudian dikirim ke salah satu dari beberapa server tambahan tempat email ditempatkan di kotak masuk yang benar. Di setiap lapisan, email akan dikirim ke salah satu server tingkat berikutnya, yang dipilih hanya berdasarkan keacakan DNS round-robin. Terkadang kami harus melacak pesan baru melalui sistem sampai kami dapat menentukan di mana pesan itu "hilang", menurut bos berambut runcing itu. Kami harus melakukan ini dengan keteraturan yang menakutkan.

Sebagian besar email itu ternyata spam. Beberapa orang sebenarnya mengeluh bahwa [lelucon, foto kucing, resep, kata-kata inspirasional, atau email aneh lainnya]-hari mereka hilang dan meminta kami untuk menemukannya. Kami memang menolak peluang itu.

Email kami dan pencarian transaksional lainnya dibantu oleh entri log dengan stempel waktu yang—hari ini—dapat diselesaikan hingga nanodetik bahkan di komputer Linux modern yang paling lambat sekalipun. Dalam lingkungan transaksi dengan volume yang sangat tinggi, bahkan perbedaan beberapa mikrodetik dalam jam sistem dapat berarti menyortir ribuan transaksi untuk menemukan transaksi yang benar.

Hirarki server NTP

Komputer di seluruh dunia menggunakan Network Time Protocol (NTP) untuk menyinkronkan waktu mereka dengan jam referensi standar internet melalui hierarki server NTP. Server utama berada di strata 1, dan terhubung langsung ke berbagai layanan waktu nasional di strata 0 melalui satelit, radio, atau bahkan modem melalui saluran telepon. Layanan waktu pada strata 0 dapat berupa jam atom, penerima radio yang disetel ke sinyal yang disiarkan oleh jam atom, atau penerima GPS yang menggunakan sinyal jam yang sangat akurat yang disiarkan oleh satelit GPS.

Untuk mencegah permintaan waktu dari server waktu yang lebih rendah dalam hierarki (yaitu, dengan jumlah strata yang lebih tinggi) agar tidak membanjiri server referensi utama, ada beberapa ribu server NTP strata 2 publik yang terbuka dan tersedia untuk digunakan siapa saja. Banyak organisasi dengan sejumlah besar host yang membutuhkan server NTP akan mengatur server waktu mereka sendiri sehingga hanya satu host lokal yang mengakses server waktu strata 2, kemudian mereka mengkonfigurasi host jaringan yang tersisa untuk menggunakan server waktu lokal yang, dalam kasus saya , adalah server strata 3.

Pilihan NTP

Daemon NTP asli, ntpd , telah bergabung dengan yang lebih baru, chronyd . Keduanya menjaga waktu host lokal disinkronkan dengan server waktu. Kedua layanan tersedia, dan saya tidak melihat apa pun yang menunjukkan bahwa ini akan berubah dalam waktu dekat.

Chrony memiliki fitur yang menjadikannya pilihan yang lebih baik untuk sebagian besar lingkungan karena alasan berikut:

  • Chrony dapat menyinkronkan ke server waktu jauh lebih cepat daripada NTP. Ini bagus untuk laptop atau desktop yang tidak berjalan terus-menerus.

  • Ini dapat mengimbangi frekuensi clock yang berfluktuasi, seperti saat host hibernasi atau memasuki mode tidur, atau saat kecepatan clock bervariasi karena loncatan frekuensi yang memperlambat kecepatan clock saat beban rendah.

  • Ini menangani koneksi jaringan intermiten dan saturasi bandwidth.

  • Ini menyesuaikan penundaan dan latensi jaringan.

  • Setelah sinkronisasi waktu awal, Chrony tidak pernah menginjak waktu. Ini memastikan interval waktu yang stabil dan konsisten untuk layanan dan aplikasi sistem.

  • Chrony dapat bekerja bahkan tanpa koneksi jaringan. Dalam hal ini, host atau server lokal dapat diperbarui secara manual.

Paket NTP dan Chrony RPM tersedia dari repositori Fedora standar. Anda dapat menginstal keduanya dan beralih di antara keduanya, tetapi rilis Fedora, CentOS, dan RHEL modern telah dipindahkan dari NTP ke Chrony sebagai implementasi pengaturan waktu default. Saya telah menemukan bahwa Chrony bekerja dengan baik, menyediakan antarmuka yang lebih baik untuk sysadmin, menyajikan lebih banyak informasi, dan meningkatkan kontrol.

Untuk memperjelas, NTP adalah protokol yang diimplementasikan dengan NTP atau Chrony. Jika Anda ingin tahu lebih banyak, baca perbandingan antara NTP dan Chrony ini sebagai implementasi dari protokol NTP.

Artikel ini menjelaskan cara mengonfigurasi klien dan server Chrony di host Fedora, tetapi konfigurasi untuk rilis CentOS dan RHEL saat ini berfungsi sama.

Struktur kroni

Daemon Chrony, kronyd , berjalan di latar belakang dan memantau waktu dan status server waktu yang ditentukan di chrony.conf mengajukan. Jika waktu setempat perlu disesuaikan, chronyd melakukannya dengan lancar tanpa trauma terprogram yang akan terjadi jika jam langsung disetel ulang ke waktu baru.

kronis Chrony alat ini memungkinkan seseorang untuk memantau status Chrony saat ini dan membuat perubahan jika perlu. kronis utilitas dapat digunakan sebagai perintah yang menerima subperintah, atau dapat digunakan sebagai program mode teks interaktif. Artikel ini akan menjelaskan kedua kegunaan tersebut.

Konfigurasi klien

Konfigurasi klien NTP sederhana dan memerlukan sedikit atau tanpa intervensi. Server NTP dapat ditentukan selama instalasi Linux atau disediakan oleh server DHCP pada saat boot. Default /etc/chrony.conf file (ditampilkan di bawah secara keseluruhan) tidak memerlukan intervensi untuk bekerja dengan baik sebagai klien. Untuk Fedora, Chrony menggunakan kumpulan Fedora NTP, dan CentOS dan RHEL memiliki kumpulan server NTP mereka sendiri. Seperti banyak distribusi berbasis Red Hat, file konfigurasi dikomentari dengan baik.

# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
pool 2.fedora.pool.ntp.org iburst

# Record the rate at which the system clock gains/losses time.
driftfile /var/lib/chrony/drift

# Allow the system clock to be stepped in the first three updates
# if its offset is larger than 1 second.
makestep 1.0 3

# Enable kernel synchronization of the real-time clock (RTC).


# Enable hardware timestamping on all interfaces that support it.
#hwtimestamp *

# Increase the minimum number of selectable sources required to adjust
# the system clock.
#minsources 2

# Allow NTP client access from local network.
#allow 192.168.0.0/16

# Serve time even if not synchronized to a time source.
#local stratum 10

# Specify file containing keys for NTP authentication.
keyfile /etc/chrony.keys

# Get TAI-UTC offset and leap seconds from the system tz database.
leapsectz right/UTC

# Specify directory for log files.
logdir /var/log/chrony

# Select which information is logged.
#log measurements statistics tracking

Mari kita lihat status NTP saat ini pada mesin virtual yang saya gunakan untuk pengujian. kronis perintah, bila digunakan dengan pelacakan subcommand, menyediakan statistik yang melaporkan seberapa jauh sistem lokal dari server referensi.

[root@studentvm1 ~]# chronyc tracking 
Reference ID    : 23ABED4D (ec2-35-171-237-77.compute-1.amazonaws.com)
Stratum         : 3
Ref time (UTC)  : Fri Nov 16 16:21:30 2018
System time     : 0.000645622 seconds slow of NTP time
Last offset     : -0.000308577 seconds
RMS offset      : 0.000786140 seconds
Frequency       : 0.147 ppm slow
Residual freq   : -0.073 ppm
Skew            : 0.062 ppm
Root delay      : 0.041452706 seconds
Root dispersion : 0.022665167 seconds
Update interval : 1044.2 seconds
Leap status     : Normal
[root@studentvm1 ~]#

ID Referensi di baris pertama hasil adalah server tempat host disinkronkan—dalam hal ini, server referensi strata 3 yang terakhir dihubungi oleh host pada 16:21:30 2018. Baris lainnya dijelaskan dalam chronyc(1) halaman manual.

Sumber subcommand juga berguna karena memberikan informasi tentang sumber waktu yang dikonfigurasi di chrony.conf .

[root@studentvm1 ~]# chronyc sources
210 Number of sources = 5
MS Name/IP address         Stratum Poll Reach LastRx Last sample              
===============================================================================
^+ 192.168.0.51                  3   6   377     0  -2613us[-2613us] +/-   63ms
^+ dev.smatwebdesign.com         3  10   377   28m  -2961us[-3534us] +/-  113ms
^+ propjet.latt.net              2  10   377   465  -1097us[-1085us] +/-   77ms
^* ec2-35-171-237-77.comput>     2  10   377    83  +2388us[+2395us] +/-   95ms
^+ PBX.cytranet.net              3  10   377   507  -1602us[-1589us] +/-   96ms
[root@studentvm1 ~]#

Sumber pertama dalam daftar adalah server waktu yang saya atur untuk jaringan pribadi saya. Yang lainnya disediakan di tepi kolam renang. Meskipun server NTP saya tidak muncul di file konfigurasi Chrony di atas, server DHCP saya memberikan alamat IP-nya untuk server NTP. Kolom "S"—Status Sumber—ditunjukkan dengan tanda bintang (* ) server tempat host kami disinkronkan. Ini konsisten dengan data dari pelacakan sub-perintah.

-v option memberikan deskripsi yang bagus tentang bidang dalam output ini.

[root@studentvm1 ~]# chronyc sources -v
210 Number of sources = 5

  .-- Source mode  '^' = server, '=' = peer, '#' = local clock.
 / .- Source state '*' = current synced, '+' = combined , '-' = not combined,
| /   '?' = unreachable, 'x' = time may be in error, '~' = time too variable.
||                                                 .- xxxx [ yyyy ] +/- zzzz
||      Reachability register (octal) -.           |  xxxx = adjusted offset,
||      Log2(Polling interval) --.      |          |  yyyy = measured offset,
||                                \     |          |  zzzz = estimated error.
||                                 |    |           \
MS Name/IP address         Stratum Poll Reach LastRx Last sample              
===============================================================================
^+ 192.168.0.51                  3   7   377    28  -2156us[-2156us] +/-   63ms
^+ triton.ellipse.net            2  10   377    24  +5716us[+5716us] +/-   62ms
^+ lithium.constant.com          2  10   377   351   -820us[ -820us] +/-   64ms
^* t2.time.bf1.yahoo.com         2  10   377   453   -992us[ -965us] +/-   46ms
^- ntp.idealab.com               2  10   377   799  +3653us[+3674us] +/-   87ms
[root@studentvm1 ~]#

Jika saya ingin server saya menjadi sumber waktu referensi pilihan untuk host ini, saya akan menambahkan baris di bawah ini ke /etc/chrony.conf berkas.

server 192.168.0.51 iburst prefer

Saya biasanya menempatkan baris ini tepat di atas pernyataan server kumpulan pertama di dekat bagian atas file. Tidak ada alasan khusus untuk ini, kecuali saya ingin menyimpan pernyataan server bersama-sama. Ini akan bekerja dengan baik di bagian bawah file, dan saya telah melakukannya di beberapa host. File konfigurasi ini tidak peka terhadap urutan.

Pilihan opsi menandai ini sebagai sumber referensi pilihan. Dengan demikian, host ini akan selalu disinkronkan dengan sumber referensi ini (selama tersedia). Kami juga dapat menggunakan nama host yang sepenuhnya memenuhi syarat untuk server referensi jarak jauh atau nama host saja (tanpa nama domain) untuk sumber waktu referensi lokal selama pernyataan pencarian diatur di /etc/resolv.conf mengajukan. Saya lebih suka alamat IP untuk memastikan bahwa sumber waktu dapat diakses meskipun DNS tidak berfungsi. Di sebagian besar lingkungan, nama server mungkin merupakan opsi yang lebih baik, karena NTP akan terus bekerja meskipun alamat IP server berubah.

Jika Anda tidak memiliki sumber referensi khusus yang ingin Anda sinkronkan, tidak masalah untuk menggunakan default.

Mengonfigurasi server NTP dengan Chrony

Hal yang menyenangkan tentang file konfigurasi Chrony adalah bahwa file tunggal ini mengonfigurasi Host sebagai klien dan server. Untuk menambahkan fungsi server ke host kita—itu akan selalu menjadi klien, mendapatkan waktunya dari server referensi—kita hanya perlu membuat beberapa perubahan pada konfigurasi Chrony, lalu mengonfigurasi firewall host untuk menerima permintaan NTP.

Buka /etc/kroni .conf file di editor teks favorit Anda dan batalkan komentar stratum lokal 10 garis. Ini memungkinkan server Chrony NTP untuk terus bertindak seolah-olah terhubung ke server referensi jarak jauh jika koneksi internet gagal; ini memungkinkan host untuk terus menjadi server NTP bagi host lain di jaringan lokal.

Mari kita mulai ulang chronyd dan lacak cara kerja layanan selama beberapa menit. Sebelum kami mengaktifkan host kami sebagai server NTP, kami ingin menguji sedikit.

[root@studentvm1 ~]# systemctl restart chronyd ; watch chronyc tracking

Hasilnya akan terlihat seperti ini. Jam perintah menjalankan pelacakan kroni perintah setiap dua detik sehingga kami dapat melihat perubahan yang terjadi dari waktu ke waktu.

Every 2.0s: chronyc tracking                                           studentvm1: Fri Nov 16 20:59:31 2018

Reference ID    : C0A80033 (192.168.0.51)
Stratum         : 4
Ref time (UTC)  : Sat Nov 17 01:58:51 2018
System time     : 0.001598277 seconds fast of NTP time
Last offset     : +0.001791533 seconds
RMS offset      : 0.001791533 seconds
Frequency       : 0.546 ppm slow
Residual freq   : -0.175 ppm
Skew            : 0.168 ppm
Root delay      : 0.094823152 seconds
Root dispersion : 0.021242738 seconds
Update interval : 65.0 seconds
Leap status     : Normal

Perhatikan bahwa server NTP saya, studentvm1 host, menyinkronkan ke host di 192.168.0.51, yang merupakan server NTP jaringan internal saya, pada stratum 4. Sinkronisasi langsung ke mesin pool Fedora akan menghasilkan sinkronisasi pada strata 3. Perhatikan juga bahwa jumlah kesalahan berkurang seiring waktu. Akhirnya, itu harus stabil dengan variasi kecil di sekitar rentang kesalahan yang cukup kecil. Besar kecilnya kesalahan tergantung pada strata dan faktor jaringan lainnya. Setelah beberapa menit, gunakan Ctrl+C untuk keluar dari lingkaran jam.

Untuk mengubah host kita menjadi server NTP, kita perlu mengizinkannya untuk mendengarkan di jaringan lokal. Batalkan komentar pada baris berikut untuk mengizinkan host di jaringan lokal mengakses server NTP kami.

# Allow NTP client access from local network.
allow 192.168.0.0/16

Perhatikan bahwa server dapat mendengarkan permintaan di jaringan lokal mana pun yang terhubung dengannya. Alamat IP di baris "izinkan" hanya dimaksudkan untuk tujuan ilustrasi. Pastikan untuk mengubah jaringan IP dan subnet mask di baris tersebut agar sesuai dengan jaringan lokal Anda.

Mulai ulang chronyd .

[root@studentvm1 ~]# systemctl restart chronyd

Untuk mengizinkan host lain di jaringan Anda mengakses server ini, konfigurasikan firewall untuk mengizinkan paket UDP masuk pada port 123. Periksa dokumentasi firewall Anda untuk mengetahui cara melakukannya.

Pengujian

Host Anda sekarang menjadi server NTP. Anda dapat mengujinya dengan host lain atau VM yang memiliki akses ke jaringan tempat server NTP mendengarkan. Konfigurasikan klien untuk menggunakan server NTP baru sebagai server pilihan di /etc/chrony.conf file, lalu pantau klien tersebut menggunakan chronyc alat yang kami gunakan di atas.

Chronyc sebagai alat interaktif

Seperti yang saya sebutkan sebelumnya, kronis dapat digunakan sebagai alat perintah interaktif. Cukup jalankan perintah tanpa subperintah dan Anda mendapatkan kronis prompt perintah.

[root@studentvm1 ~]# chronyc
chrony version 3.4
Copyright (C) 1997-2003, 2007, 2009-2018 Richard P. Curnow and others
chrony comes with ABSOLUTELY NO WARRANTY.  This is free software, and
you are welcome to redistribute it under certain conditions.  See the
GNU General Public License version 2 for details.

chronyc>

Anda dapat memasukkan hanya sub-perintah pada prompt ini. Coba gunakan pelacakan , ntpdata , dan sumber perintah. kronis baris perintah memungkinkan pemanggilan kembali dan pengeditan perintah untuk chronyc sub-perintah. Anda dapat menggunakan bantuan subcommand untuk mendapatkan daftar kemungkinan perintah dan sintaksnya.

Kesimpulan

Chrony adalah alat yang ampuh untuk menyinkronkan waktu host klien, apakah semuanya ada di jaringan lokal atau tersebar di seluruh dunia. Sangat mudah untuk mengonfigurasi karena, meskipun ada banyak pilihan yang tersedia, hanya sedikit konfigurasi yang diperlukan untuk sebagian besar keadaan.

Setelah komputer klien saya disinkronkan dengan server NTP, saya ingin mengatur jam perangkat keras sistem dari waktu sistem (OS) dengan menggunakan perintah berikut:

/sbin/hwclock --systohc

Perintah ini dapat ditambahkan sebagai tugas cron atau skrip di cron.daily untuk menjaga agar jam perangkat keras tetap sinkron dengan waktu sistem.

Chrony dan NTP (layanan) keduanya menggunakan konfigurasi yang sama, dan konten file dapat dipertukarkan. Halaman manual untuk chronyd, chronyc, dan chrony.conf berisi sejumlah besar informasi yang dapat membantu Anda memulai atau mempelajari tentang opsi konfigurasi esoterik.

Apakah Anda menjalankan server NTP Anda sendiri? Beri tahu kami di komentar dan pastikan untuk memberi tahu kami implementasi mana yang Anda gunakan, NTP atau Chrony.


Linux
  1. Sinkronkan Waktu Server Linux dengan Server Waktu Jaringan

  2. Gunakan CloudFlare dengan Rackspace

  3. arsitektur server NTP

  1. Sinkronisasi Waktu Linux

  2. Sinkronisasi Waktu Linux

  3. Cara Mengatur Zona Waktu dan Menyinkronkan Waktu Server dengan NTP di Linux

  1. Proses Waktu Mulai Dengan Zona Waktu?

  2. Mulai dengan Server Cloud

  3. Kelola Pasangan Kunci SSH untuk server cloud dengan python-novaclient