Die Ursache dafür, dass keine Synchronisierung mit einem Server durchgeführt wird, dessen Zeit so unterschiedlich ist, wird hier dokumentiert :
5.1.1.4. Was passiert, wenn sich die Referenzzeit ändert?
Im Idealfall ist die Referenzzeit überall auf der Welt gleich. Nach der Synchronisierung sollten keine unerwarteten Änderungen zwischen der Uhr des Betriebssystems und der Referenzuhr auftreten. Daher verfügt NTP über keine speziellen Methoden, um mit der Situation umzugehen.
Stattdessen hängt die Reaktion von ntpd vom Versatz zwischen der lokalen Uhr und der Referenzzeit ab. Für einen winzigen Versatz stellt ntpd die lokale Uhr wie gewohnt ein; Bei kleinen und größeren Offsets lehnt ntpd die Referenzzeit für eine Weile ab. Im letzteren Fall wird die Uhr des Betriebssystems mit den letzten wirksamen Korrekturen fortgesetzt, während die neue Referenzzeit abgelehnt wird. Nach einiger Zeit werden kleine Offsets (deutlich weniger als eine Sekunde) gedreht (langsam eingestellt), während größere Offsets dazu führen, dass die Uhr gestuft wird (neu eingestellt). Riesige Offsets werden abgelehnt, und ntpd wird sich selbst beenden, da er glaubt, dass etwas sehr Seltsames passiert sein muss.
In meiner aktuellen NTP-Konfiguration, die ebenfalls von gesteuert wird puppet
, erzwinge ich die Synchronisierung mit dem Server sowohl in der ntp.conf
Datei tinker panic
als auch in den Daemon-Einstellungen ( /etc/sysconfig/ntpd
), wie in der ntpd(8)
Manpage beschrieben:
-g Normalerweise wird ntpd mit einer Meldung an das Systemprotokoll beendet, wenn der Offset den Panikschwellenwert überschreitet, der standardmäßig 1000 s beträgt. Mit dieser Option kann die Zeit ohne Einschränkung auf einen beliebigen Wert eingestellt werden. Dies kann jedoch nur einmal vorkommen. Wenn der Schwellenwert danach überschritten wird, wird ntpd mit einer Nachricht an das Systemprotokoll beendet. Diese Option kann mit den Optionen -q und -x verwendet werden.
Ich mache das, weil ich dem NTP-Server vertrauen kann, zu dem ich eine Verbindung herstelle.
Der relevante Teil des Moduls, der für die Clients gilt, lautet wie folgt:
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'],
}
}
Und der Inhalt der Dateien, auf die verwiesen wird, ist:
$ 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"
und:
$ 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
Das hiera
Teil fehlt hier, aber Sie bekommen die Idee.
tinker panic 0