Mengapa NTP disinkronkan ke LOCAL daripada server jarak jauh?

11

Jadi, saya mencoba untuk men-debug pengaturan NTP saya saat ini, dan menemukan bahwa ia mengimbangi dari server saya yang dikonfigurasi lebih dari 3 detik, dan tidak menyesuaikan. Tanda bintang pada LOCAL (0) dalam output ntpq tampaknya menunjukkan bahwa sistem dengan senang hati menyinkronkan dirinya sendiri daripada server 10.130.33.201 (yang merupakan kotak linux lain di sistem kami yang ingin kami sinkronkan semuanya).

ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
 10.130.33.201   LOCAL(0)         9 u   49   64  377    0.242  -3742.2   1.049
*LOCAL(0)        .LOCL.          10 l    2   64  377    0.000    0.000   0.001

Dan ini adalah file ntp.conf saya. Ditulis oleh orang lain, jadi saya tidak 100% yakin bahwa semuanya benar.

server 10.130.33.201 burst iburst minpoll 4 maxpoll 11
driftfile /mnt/active/etc/ntp.drift

restrict -4 default  nomodify nopeer notrap
restrict -6 default  ignore

# Undisciplined Local Clock. This is a fake driver intended for backup
# and when no outside source of synchronized time is available.
server  127.127.1.0     # local clock
fudge   127.127.1.0 stratum 10

Saya sudah membaca tentang burst dan iburst dan minpoll / maxpoll, jadi saya menyadari bahwa itu mungkin tidak diperlukan, tetapi saya pikir itu tidak ada hubungannya dengan masalah saya saat ini.

Juga, karena cara penggunaannya, file konfigurasi itu akan membutuhkan banyak pekerjaan untuk diubah, jadi saya harap tidak ada yang benar-benar harus diubah. Saya berharap ini adalah kasus saya yang tidak memahami cara kerja NTP.


EDIT -

Jadi, sepertinya ini adalah duplikat dari pertanyaan ini , tetapi saya tidak merasa bahwa poster mendapat jawaban yang cukup, jadi saya masih ingin tahu mengapa waktu lokal lebih disukai daripada server. Juga, sesuai dengan salah satu jawaban di bawah ini, saya mencoba menggunakan preferkata kunci pada baris server dari konfigurasi dan restart, tetapi tampaknya tidak berpengaruh.

Jika saya menghapus semua baris "lokal" di konfigurasi seperti yang disarankan oleh pertanyaan lain, apa yang akan terjadi jika server tidak dapat dijangkau? Apakah NTP mati atau terus mencoba?


EDIT PENTING -

Oke, biasanya, 10.130.33.201 ("server") tidak memiliki akses ke internet, dan tidak memiliki sumber waktu GPS untuk digunakan. Bagian penting adalah bahwa semua perangkat pada sistem memiliki waktu yang sama dengan server, terlepas dari seberapa benar waktu itu sebenarnya.

Jadi, hanya untuk melihat apa yang akan terjadi, saya menambahkan salah satu server NTP pool ke file konfigurasi server sehingga akan mendapatkan waktu dari sana daripada mendapatkan waktu dari lokal. Sekarang benar mendapatkan waktu dari server waktu NTP.

Setelah saya melakukan itu, klien sekarang menyinkronkan dengan server daripada memilih LOCAL (0)

 ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*10.130.33.201   38.229.71.1      3 u   58   64  377    0.216  715621.   1.001
 LOCAL(0)        .LOCL.          10 l   18   64  377    0.000    0.000   0.001

PERTANYAAN BARU - Ketika server saya menggunakan lokal (contoh asli yang diberikan), sepertinya klien mengatakan, "Oh, 10.130.33.201 menggunakan LOCAL (0). Hmm, saya juga memiliki server LOCAL (0) - - Saya hanya akan menggunakannya secara langsung daripada mendapatkan informasi yang sama melalui 10.130.33.201 ".

Apakah itu masalahnya? Apakah mereka mencoba untuk pergi "langsung ke sumber" yang salah LOCAL (0)? Saya perlu server saya untuk mendapatkan waktu dari LOCAL (0), dan saya perlu klien untuk mendapatkan waktu dari server. Saat ini menghapus server "lokal" dari file konfigurasi klien adalah satu-satunya pilihan, tetapi saya ingin memahami mengapa ini terjadi, dan jika mungkin, hindari mengubah konfigurasi mereka (perubahan konfigurasi akan banyak pekerjaan karena lingkungan kita...).

Juga, ini terlihat seperti duplikat lain tanpa jawaban yang baik.

JPhi1618
sumber
Juga, jika Anda selalu memiliki akses jaringan ke 10.130.33.201 pertimbangkan untuk menghapus sumber jam lokal.
Aaron Copley

Jawaban:

9

Dengan hanya satu server NTP yang dikonfigurasi, algoritme tidak sepenuhnya yakin siapa yang harus dipercaya. Meskipun, strata lebih rendah dengan host jarak jauh, saya yakin algoritma menganggap waktu lokal lebih dapat dipercaya.

Coba gunakan preferkata kunci dengan serverpernyataan Anda untuk menetapkannya sebagai sumber waktu preferensial.


EDIT -

Jadi, sepertinya ini adalah duplikat dari pertanyaan ini, tetapi saya tidak merasa bahwa poster mendapat jawaban yang cukup, jadi saya masih ingin tahu mengapa waktu lokal lebih disukai daripada server.

Untuk jawaban yang benar-benar mencukupi, Anda akan menggali bagian dalam dari algoritma yang sangat kompleks. Dokumentasinya bahkan tidak terlalu spesifik tetapi saya yakin ada kertas putih atau spesifikasi di luar sana.

Jika saya menghapus semua baris "lokal" di konfigurasi seperti yang disarankan oleh pertanyaan lain, apa yang akan terjadi jika server tidak dapat dijangkau? Apakah NTP mati atau terus mencoba?

Daemon NTP tidak mati atau berhenti, tetapi tidak berhenti menyinkronkan waktu setelah gagal mencapai server jauh. Inilah sebabnya mengapa praktik terbaik akan menyarankan minimal tiga server jarak jauh dan tidak menggunakan LCL kecuali Anda terputus dari jaringan. Tiga server disarankan karena ketika hanya ada dua, dan mereka tidak setuju, mana yang akan dipilih? Server ketiga harus membantu algoritma menghilangkan server palsu.

Terakhir, saya hanya memperhatikan bahwa Anda tidak mendefinisikan a driftfile. Ini mungkin membantu?

Aaron Copley
sumber
Apakah membuat perbedaan antara kedua strata (ums?) Mempengaruhi ini sama sekali? Apakah memiliki server lebih rendah dari 9 membantu?
JPhi1618
Itu mungkin. Memang, saya tidak tahu banyak tentang internal algoritma itu sendiri. Namun, satu-satunya kasus di mana Anda harus fudge stratum adalah dengan jam lokal. Saya tidak bisa merekomendasikan bahwa Anda memalsukan server jauh sebagai perbaikan. NTP harus dipercaya untuk menentukan sumber terbaik dengan gangguan minimal. Anda hanya memiliki kasus di mana Anda perlu memberikan sedikit dorongan.
Aaron Copley
Terima kasih atas sarannya. Ada driftfile, tetapi tidak dibuat jadi saya dihapus untuk melihat apa yang akan terjadi. Menghapus saluran lokal membuatnya disinkronkan dengan server, jadi itu sesuatu. Anda mengatakan bahwa ntpd akan "berhenti menyinkronkan waktu setelah gagal mencapai server jauh", tetapi apakah itu akan mulai lagi setelah server tercapai? Saya hanya ingin aman jika terjadi gangguan jaringan sementara.
JPhi1618
Tidak, itu tidak akan mulai lagi. Itu hanya menyerah. Ini menyebalkan dan telah menjadi tangkapan bagi saya juga. Kami tahu sekarang untuk me-restart NTP jika konektivitas jaringan telah hilang. File drift Anda kemungkinan besar tidak dibuat karena ntp tidak memiliki izin untuk path. Periksa itu.
Aaron Copley
7

Bagi saya sepertinya interval offset (perbedaan antara waktu sistem Anda dan waktu host NTP) terlalu jauh berbeda untuk NTP untuk mengaturnya dengan benar.

Saran saya,

 1. Stop the NTP service
 2. As root ntpdate -bs 10.130.33.201 to reset your time to something close
 3. Start the NTP service

Anda seharusnya tidak memiliki masalah setelah itu.

mdpc
sumber
2
Jika mesin tersebut merupakan VM atau memiliki kondisi lain yang menyebabkannya muncul dengan waktu yang rusak parah, Anda dapat mengatur tinker panic 0opsi ntp untuk memaksa NTP untuk menerima offset. Tetapi hanya gunakan ini dengan server NTP Anda yakin tidak akan pernah mengembalikan waktu yang buruk.
Zoredache
Ok, saya pikir itu harus lebih dari 1000 sebelum itu masalah, dan kemudian saya berpikir bahwa server akan terdaftar dengan tanda #? Apakah bukan ini masalahnya? Apakah "offset" dalam detik atau milidetik?
JPhi1618
Itu tidak akan disinkronkan ke 10.130.33.201 sekarang karena offset terlalu tinggi, tetapi ini tidak akan memperbaiki fakta bahwa itu cukup melayang di tempat pertama sehingga LCL menjadi lebih diinginkan. Saya pikir ini, driftfile yang berfungsi, dan preferakan melakukan trik.
Aaron Copley
Bisakah Anda menjelaskan mengapa offset terlalu tinggi? Kurang dari 1000-an (kurang dari itu) dan tidak ada tanda #. Juga, saya telah memverifikasi waktu aktual pada kedua sistem, dan mereka berjarak sekitar 4 detik.
JPhi1618
+/- 1000 ms ... bukan +/- 1000 dtk . Ini di -3742 ms .
Aaron Copley
2

Strata 10.130.33.201 sebagai server LOCAL adalah 9, yang membuat strata lokal dihitung dari ini (9 + 1 = 10) bersaing dengan server LOCAL lokal di strata 10. Karena strata LOCAL lokal tidak memiliki penundaan jaringan atau jitter, maka mungkin terlihat sedikit lebih baik untuk ntpd daripada yang jauh.

Jika Anda ingin konfigurasi ini berfungsi, atur server LOCAL 'master' ke strata lebih rendah dari 9. Tidak terlalu rendah jika Anda ingin waktu yang dapat dilacak ke server strata 1 lebih disukai.

Koos van den Hout
sumber
Terima kasih. Saya akan memeriksanya secepat mungkin. Terlihat menjanjikan.
JPhi1618
Yah, sepertinya saya sebelumnya mencoba untuk menurunkan strata server 10.130.33.201 LOCAL. Saat ini, diatur ke 5, klien melihatnya sebagai 6, tetapi masih lebih suka LOKAL itu sendiri yang memiliki strata 10. Konfigurasi ini telah berlangsung selama berhari-hari.
JPhi1618
2

Saya tahu ini sudah tua, tetapi saya pikir Anda benar. Tidak ada yang menunjukkan cara untuk men-debug masalah ntpd. Ternyata itu bisa dilakukan.

Saya pikir Anda berada di jalur yang benar ketika Anda mencurigai bahwa penggunaan LOCAL (0) secara lokal dan di server hulu mungkin menjadi masalah.

Itu pasti di pulau waktu 4 server saya punya masalah serupa dengan. Ini semua diatur untuk menjadi rekan satu sama lain, jadi mungkin masalah yang berbeda dengan Anda.

Pertama, ada cara yang lebih baik untuk menangani pulau waktu yang disebut mode yatim yang didukung dengan versi ntpd beberapa tahun terakhir:

Mode anak yatim di doc.ntp.org

Awalnya semua 4 server memiliki strata 10 yang sama dan lebih suka jam lokal mereka. Saya memperbaikinya dan masih mereka lebih suka jam lokal mereka (strata sepertinya penting).

Saya menggunakan perintah ntpq pe (peer), seperti, rv untuk menangani apa yang terjadi. Anda perlu menggunakan rv (readvar) pada nomor asosiasi untuk server untuk membuang informasi. dan sepertinya disortir oleh indeks yang sama sehingga Anda bisa mendapatkan nomor seperti itu. seperti memiliki bidang bernama kondisi yang dapat menunjukkan nilai tolak jika tidak suka server.

Dalam output rv adalah bidang yang disebut flash. Jika semuanya baik-baik saja, ini akan menjadi nol. Jika tidak, bitmask (ditampilkan dalam hex) dari masalah. Mereka dapat dilihat di sini:

decode internal ntpd

Masalah yang saya miliki adalah 0800 peer_loop. Ternyata refid jam itu penting. Melihat LOCAL (0) pada jam lokal dan dari server jauh ntpd berpikir ada loop. David Mills mengonfirmasi bahwa dalam posting di comp.protocols.time 'Bagaimana cara menghindari loop di NTP' (Saya telah mencapai batas 2 tautan saya, maaf!)

Menggunakan argumen refid untuk menipu untuk menetapkan refid unik tidak berhasil - itu masih muncul sebagai LOCAL (0) pada penerima.

Apa yang tampaknya berhasil adalah menggunakan nomor instance unik untuk driver lokal. 127.127.1. [0-3]. Gunakan ID yang sama di kedua server dan jalur fudge. Ketika saya melakukan ini, server umumnya disinkronkan ke server strata terendah yang biasanya menggunakan jam lokal. Namun kadang-kadang mencoba menggunakan salah satu server lain yang menggunakannya sebagai sumber. Namun kali sinkron dan tampaknya tetap seperti itu.

Mungkin terlalu terlambat untuk membantu, tetapi saya menawarkannya untuk menunjukkan NTP setuju dengan logika dan pemecahan masalah. Saya membutuhkan waktu berjam-jam untuk mencapai jawabannya melalui coba-coba dan kemudian menemukan dokumen nanti.

klw14
sumber
-1

Gunakan iburst untuk memaksa server untuk mengirim permintaan NTP ke NTS yang diinginkan bahkan jika satu permintaan gagal

Tempteh
sumber
Ini perlu penjelasan yang lebih baik.
Sven