Nguyên nhân không đồng bộ hóa với máy chủ có thời gian quá khác nhau được ghi lại ở đây :
5.1.1.4. Điều gì xảy ra nếu Thời gian tham chiếu thay đổi?
Lý tưởng nhất là thời gian tham khảo là giống nhau ở mọi nơi trên thế giới. Sau khi được đồng bộ hóa, không nên có bất kỳ thay đổi bất ngờ nào giữa đồng hồ của hệ điều hành và đồng hồ tham chiếu. Do đó, NTP không có phương pháp đặc biệt để xử lý tình huống.
Thay vào đó, phản ứng của ntpd sẽ phụ thuộc vào độ lệch giữa đồng hồ cục bộ và thời gian tham chiếu. Đối với một offset nhỏ ntpd sẽ điều chỉnh đồng hồ cục bộ như bình thường; đối với các offset nhỏ và lớn hơn, ntpd sẽ từ chối thời gian tham chiếu trong một thời gian. Trong trường hợp sau, đồng hồ của hệ điều hành sẽ tiếp tục với các hiệu chỉnh cuối cùng có hiệu lực trong khi thời gian tham chiếu mới đang bị từ chối. Sau một thời gian, các độ lệch nhỏ (ít hơn đáng kể một giây) sẽ được xoay (điều chỉnh chậm), trong khi các độ lệch lớn hơn sẽ khiến đồng hồ bị bước (thiết lập lại). Sự bù đắp khổng lồ bị từ chối, và ntpd sẽ tự chấm dứt, tin rằng một điều gì đó rất kỳ lạ phải xảy ra.
Trong cấu hình NTP hiện tại của tôi, cũng được kiểm soát bởi puppet
, tôi buộc đồng bộ hóa với máy chủ, cả trong ntp.conf
tệp, sử dụng tinker panic
và trong cài đặt daemon ( /etc/sysconfig/ntpd
), như được mô tả trong ntpd(8)
trang:
-g Thông thường, ntpd thoát với thông báo tới nhật ký hệ thống nếu phần bù vượt quá ngưỡng hoảng loạn, mặc định là 1000 giây. Tùy chọn này cho phép thời gian được đặt thành bất kỳ giá trị nào mà không hạn chế; tuy nhiên, điều này chỉ có thể xảy ra một lần. Nếu vượt quá ngưỡng sau đó, ntpd sẽ thoát với thông báo tới nhật ký hệ thống. Tùy chọn này có thể được sử dụng với các tùy chọn -q và -x.
Tôi làm điều này bởi vì tôi có thể tin tưởng máy chủ NTP mà tôi đang kết nối.
Phần có liên quan của mô-đun áp dụng cho khách hàng như sau:
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'],
}
}
Và nội dung của các tệp được tham chiếu là:
$ 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"
và:
$ 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
Phần hiera
còn thiếu ở đây, nhưng bạn có được ý tưởng.
tinker panic 0