สาเหตุของการไม่ซิงค์กับเซิร์ฟเวอร์ที่มีเวลาแตกต่างกันมีการบันทึกไว้ที่นี่ :
5.1.1.4 จะเกิดอะไรขึ้นถ้าเวลาอ้างอิงเปลี่ยนแปลง?
นึกคิดเวลาอ้างอิงจะเหมือนกันทุกที่ในโลก เมื่อซิงโครไนซ์แล้วไม่ควรมีการเปลี่ยนแปลงที่ไม่คาดคิดระหว่างนาฬิกาของระบบปฏิบัติการและนาฬิกาอ้างอิง ดังนั้น NTP จึงไม่มีวิธีพิเศษในการจัดการกับสถานการณ์
แต่ปฏิกิริยาของ ntpd จะขึ้นอยู่กับการชดเชยระหว่างเวลาท้องถิ่นและเวลาอ้างอิง สำหรับ offset ntpd เล็ก ๆ จะปรับนาฬิกาท้องถิ่นตามปกติ สำหรับ offsets ขนาดเล็กและขนาดใหญ่ ntpd จะปฏิเสธเวลาอ้างอิงในขณะที่ ในกรณีหลังนาฬิกาของระบบปฏิบัติการจะดำเนินการแก้ไขล่าสุดต่อไปในขณะที่เวลาอ้างอิงใหม่ถูกปฏิเสธ หลังจากเวลาผ่านไปบางครั้งการชดเชยขนาดเล็ก (น้อยกว่าหนึ่งวินาที) จะถูกฆ่า (ปรับอย่างช้าๆ) ในขณะที่การชดเชยที่มากขึ้นจะทำให้นาฬิกาถูกเหยียบ (ตั้งค่าใหม่) ออฟเซ็ตขนาดใหญ่ถูกปฏิเสธและ ntpd จะยุติตัวเองโดยเชื่อว่ามีบางสิ่งแปลก ๆ เกิดขึ้น
ในการกำหนดค่า NTP ปัจจุบันของฉันควบคุมโดยpuppet
ฉันบังคับให้ซิงโครไนซ์กับเซิร์ฟเวอร์ทั้งในntp.conf
ไฟล์การใช้tinker panic
และในการตั้งค่า daemon ( /etc/sysconfig/ntpd
) ตามที่อธิบายไว้ในntpd(8)
manpage:
-g โดยปกติแล้ว ntpd จะออกพร้อมกับข้อความไปยังบันทึกของระบบหากออฟเซ็ตเกินกว่าเกณฑ์ความตื่นตระหนกซึ่งเท่ากับ 1,000 วินาทีโดยค่าเริ่มต้น ตัวเลือกนี้ช่วยให้เวลาที่จะตั้งค่าใด ๆ โดยไม่ จำกัด ; อย่างไรก็ตามสิ่งนี้สามารถเกิดขึ้นได้เพียงครั้งเดียว หากเกินเกณฑ์หลังจากนั้น ntpd จะออกพร้อมกับข้อความไปยังบันทึกของระบบ ตัวเลือกนี้สามารถใช้กับตัวเลือก -q และ -x
ฉันทำเช่นนี้เพราะฉันสามารถเชื่อถือเซิร์ฟเวอร์ NTP ที่ฉันกำลังเชื่อมต่อ
ส่วนที่เกี่ยวข้องของโมดูลที่ใช้กับลูกค้ามีดังนี้:
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'],
}
}
และเนื้อหาของไฟล์อ้างอิงคือ:
$ 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"
และ:
$ 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
ส่วนหนึ่งจะหายไปนี่ แต่คุณได้รับความคิด
tinker panic 0