Przyczyna braku synchronizacji z serwerem, którego czas jest tak inny, jest udokumentowana tutaj :
5.1.1.4. Co się stanie, jeśli zmieni się czas odniesienia?
Idealnie czas odniesienia jest taki sam na całym świecie. Po zsynchronizowaniu nie powinno być żadnych nieoczekiwanych zmian między zegarem systemu operacyjnego a zegarem odniesienia. Dlatego NTP nie ma specjalnych metod radzenia sobie z sytuacją.
Zamiast tego reakcja ntpd będzie zależeć od przesunięcia między zegarem lokalnym a czasem odniesienia. Dla niewielkiego przesunięcia ntpd jak zwykle dostosuje lokalny zegar; w przypadku małych i większych przesunięć ntpd na chwilę odrzuci czas odniesienia. W tym drugim przypadku zegar systemu operacyjnego będzie kontynuował z ostatnimi obowiązującymi korektami, gdy nowy czas odniesienia zostanie odrzucony. Po pewnym czasie zostaną przesunięte małe przesunięcia (znacznie krótsze niż sekunda) (powoli wyregulowane), a większe przesunięcia spowodują przesunięcie zegara (ustawienie na nowo). Ogromne przesunięcia są odrzucane, a ntpd zakończy się, wierząc, że musiało się wydarzyć coś bardzo dziwnego.
W mojej bieżącej konfiguracji NTP, również kontrolowanej przez puppet
, wymuszam synchronizację z serwerem, zarówno w ntp.conf
pliku, używając tinker panic
, jak i w ustawieniach demona ( /etc/sysconfig/ntpd
), jak opisano na stronie ntpd(8)
podręcznika:
-g Zwykle ntpd kończy działanie z komunikatem do dziennika systemowego, jeśli przesunięcie przekracza próg paniki, który domyślnie wynosi 1000 s. Ta opcja pozwala ustawić czas na dowolną wartość bez ograniczeń; może się to jednak zdarzyć tylko raz. Jeśli próg zostanie przekroczony, ntpd zakończy pracę z komunikatem do dziennika systemu. Tej opcji można używać z opcjami -q i -x.
Robię to, ponieważ mogę zaufać serwerowi NTP, z którym się łączę.
Odpowiednia część modułu, która dotyczy klientów, jest następująca:
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'],
}
}
A zawartość odnośników to:
$ 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"
i:
$ 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
hiera
Część brakuje tutaj, ale masz pomysł.
tinker panic 0