Penyebab tidak disinkronkannya dengan server yang waktunya sangat berbeda didokumentasikan di sini :
5.1.1.4. Apa yang terjadi jika Waktu Referensi berubah?
Idealnya waktu referensi sama di mana-mana di dunia. Setelah disinkronkan, seharusnya tidak ada perubahan yang tidak terduga antara jam sistem operasi dan jam referensi. Oleh karena itu, NTP tidak memiliki metode khusus untuk menangani situasi ini.
Sebaliknya, reaksi ntpd akan bergantung pada offset antara jam lokal dan waktu referensi. Untuk offset kecil ntpd akan menyesuaikan jam lokal seperti biasa; untuk offset kecil dan besar, ntpd akan menolak waktu referensi untuk sementara waktu. Dalam kasus terakhir, jam sistem operasi akan melanjutkan dengan koreksi terakhir yang efektif sementara waktu referensi baru ditolak. Setelah beberapa waktu, offset kecil (secara signifikan kurang dari satu detik) akan mati (disesuaikan perlahan), sedangkan offset yang lebih besar akan menyebabkan jam digerakkan (atur lagi). Offset yang besar ditolak, dan ntpd akan berakhir dengan sendirinya, percaya sesuatu yang sangat aneh pasti telah terjadi.
Dalam konfigurasi NTP saya saat ini, juga dikendalikan oleh puppet
, saya memaksakan sinkronisasi dengan server, baik dalam ntp.conf
file, menggunakan tinker panic
, dan dalam pengaturan daemon ( /etc/sysconfig/ntpd
), seperti yang dijelaskan dalam halaman ntpd(8)
manual:
-g Biasanya, ntpd keluar dengan pesan ke log sistem jika offset melebihi ambang panik, yaitu 1000 detik secara default. Opsi ini memungkinkan waktu disetel ke nilai apa pun tanpa batasan; Namun, ini bisa terjadi hanya sekali. Jika ambang melebihi setelah itu, ntpd akan keluar dengan pesan ke log sistem. Opsi ini dapat digunakan dengan opsi -q dan -x.
Saya melakukan ini karena saya dapat mempercayai server NTP yang saya sambungkan.
Bagian yang relevan dari modul yang berlaku untuk klien adalah sebagai berikut:
class ntp (
$foo
$bar
...
){
$my_files = {
'ntp.conf' => {
path => '/etc/ntp.conf',
content => template("ntp/ntp.conf.$template.erb"),
selrole => 'object_r',
seltype => 'net_conf_t',
require => Package['ntp'], },
'ntp-sysconfig' => {
path => '/etc/sysconfig/ntpd',
source => 'puppet:///modules/ntp/ntp-sysconfig',
require => Package['ntp'], },
...
}
$my_files_defaults = {
ensure => file,
owner => 'root',
group => 'root',
mode => '0644',
selrange => 's0',
selrole => 'object_r',
seltype => 'etc_t',
seluser => 'system_u',
}
create_resources(file, $my_files, $my_files_defaults)
exec { 'ntp initial clock set':
command => '/usr/sbin/ntpd -g -q -u ntp:ntp',
refreshonly => true,
timeout => '-1',
subscribe => File['/etc/ntp.conf'],
}
}
Dan isi dari file yang direferensikan adalah:
$ cat devops/puppet/modules/ntp/files/ntp-sysconfig
# Drop root to id 'ntp:ntp' by default.
OPTIONS="-u ntp:ntp -p /var/run/ntpd.pid -g -a"
dan:
$ cat devops/puppet/modules/ntp/templates/ntp.conf.RedHat.erb
# HEADER: This file was autogenerated by puppet.
# HEADER: While it can still be managed manually, it
# HEADER: is definitely not recommended.
tinker panic 0
<% server.each do |ntpserver| -%>
server <%= ntpserver %> autokey
<% end -%>
server 127.127.1.0 # local clock
fudge 127.127.1.0 stratum 10
driftfile /var/lib/ntp/drift
crypto pw hunter2
crypto randfile /dev/urandom
keysdir /etc/ntp
Bagian hiera
itu hilang di sini, tetapi Anda mendapatkan idenya.
tinker panic 0