网络组同学通知我有一批虚拟机的ntp配置是错的,时间不能同步,需要修改ntp服务器配置用来同步时间,使用ansible处理完了,现在做个总结。
ntp同步的方式
ntp同步时间有多种方式,一种是直接向ntp服务器同步,另一种是启动本机的ntp服务,定时向上级ntp服务器同步。
使用ntpdate配合crontab向服务器同步
[root@clientlinux ~]# ntpdate [-dv] [NTP IP/hostname]
选项与参数:
-d :进入除错模式 (debug) ,可以显示出更多的有效信息。
-v :有较多讯息的显示。
[root@clientlinux ~]# ntpdate 192.168.100.254
28 Jul 17:19:33 ntpdate[3432]: step time server 192.168.100.254 offset -2428.396146 sec
# 最后面会显示微调的时间有多少 (offset),因为鸟哥这部主机时间差很多,所以秒数...
[root@clientlinux ~]# date; hwclock -r
四 7月 28 17:20:27 CST 2011
公元2011年07月28日 (周四) 18时19分26秒 -0.752303 seconds
# 知道鸟哥想要表达什么吗?对啊!还得 hwclock -w 写入 BIOS 时间才行啊!
[root@clientlinux ~]# vim /etc/crontab
# 加入这一行去!
10 5 * * * root (/usr/sbin/ntpdate tock.stdtime.gov.tw && /sbin/hwclock -w) &> /dev/null
使用 crontab 之后,每天 5:10 Linux 系统就会自动的进行网络校时啰!这个方式的特点是简单,但是仅适合不要启动 NTP服务器的情况。因为 NTP 服务器本来就会与上层时间服务器进行时间的同步化, 所以在预设的情况下,NTP 服务器不可以使用 ntpdate !也就是说 ntpdate 与 ntpd 不能同时启用的。
启动ntp服务器,向上层服务器同步本地时钟
本文使用的就是这种方法
restrict 10.10.255.1
restrict 10.10.255.2
server 10.10.255.1 iburst minpoll 3 maxpoll 4 prefer
server 10.10.255.2 iburst minpoll 3 maxpoll 4 prefer
其中10.10.255.1, 10.10.255.2就是公司提供的上级ntp服务器。
解释一下,server 10.10.255.1 iburst minpoll 3 maxpoll 4 prefer 是为了配置本机ntp服务器的上级服务器;
restrict 10.10.255.1 是为了放行服务器到本机的权限。
相比crontab方式,明显这种方式会更好,因为经过配置几秒就会进行一次同步,而且有更高级的配置可以用,比如可以配置多个上层服务器等。
修改之后重启ntp服务,
service ntpd restart
centos7也可以使用
systemctl restart ntpd
解决方案
当然不能一个个改,当然使用ansible大杀器了。
ntp_conf.yml
---
- hosts: xct9
become: yes
gather_facts: false
max_fail_percentage: 50
serial: "100%"
vars:
ntp_server_all: {
'bj2b': {
"server1": "10.9.255.1",
"server2": "10.9.255.2"
},
'bj2c': {
"server1": "10.10.255.1",
"server2": "10.10.255.2"
},
'bj2d': {
"server1": "10.19.255.1",
"server2": "10.19.255.2"
}
}
ntp_server1: "{{ ntp_server_all.bj2b.server1 }}"
ntp_server2: "{{ ntp_server_all.bj2b.server2 }}"
tasks:
- name: set ntp restrict 1
lineinfile:
dest: /etc/ntp.conf
regexp: '^restrict 10\.[0-9]{1,3}\.255\.1'
line: restrict {{ ntp_server1}}
#create: yes
owner: root
group: root
- name: set ntp restrict 2
lineinfile:
dest: /etc/ntp.conf
regexp: '^restrict 10\.[0-9]{1,3}\.255\.2'
line: restrict {{ ntp_server2}}
#create: yes
owner: root
group: root
- name: set ntp server 1
lineinfile:
dest: /etc/ntp.conf
#regexp: '^restrict 10\.[0-9]{1,3}\.255\.1'
regexp: '^server 10\.[0-9]{1,3}\.255\.1 iburst minpoll 3 maxpoll 4 prefer'
line: 'server {{ ntp_server1}} iburst minpoll 3 maxpoll 4 prefer'
#create: yes
owner: root
group: root
- name: set ntp server 2
lineinfile:
dest: /etc/ntp.conf
#regexp: '^restrict 10\.[0-9]{1,3}\.255\.2'
regexp: '^server 10\.[0-9]{1,3}\.255\.2 iburst minpoll 3 maxpoll 4 prefer'
line: 'server {{ ntp_server2}} iburst minpoll 3 maxpoll 4 prefer'
#create: yes
owner: root
group: root
- name: restart ntpd
command: service ntpd restart
只要修改服务器所在的hosts,和region就可以了
ntp服务器配置
利用 server 设定上层 NTP 服务器
上层 NTP 服务器的设定方式为:
server [IP or hostname] [prefer]
在 server 后端可以接 IP 或主机名,鸟哥个人比较喜欢使用 IP 来设定说!至于那个 perfer 表示『优先使用』的服务器啰~有够简单吧!
利用 restrict 来管理权限控制
在 ntp.conf 档案内可以利用『 restrict 』来控管权限,这个参数的设定方式为:
restrict [你的IP] mask [netmask_IP] [parameter]
其中 parameter 的参数主要有底下这些:
ignore: 拒绝所有类型的 NTP 联机;
nomodify: 客户端不能使用 ntpc 与 ntpq 这两支程序来修改服务器的时间参数, 但客户端仍可透过这部主机来进行网络校时的;
noquery: 客户端不能够使用 ntpq, ntpc 等指令来查询时间服务器,等于不提供 NTP 的网络校时啰;
notrap: 不提供 trap 这个远程事件登录 (remote event logging) 的功能。
notrust: 拒绝没有认证的客户端。
那如果你没有在 parameter 的地方加上任何参数的话,这表示『该 IP 或网段不受任何限制』的意思喔!一般来说,我们可以先关闭 NTP 的权限,然后再一个一个的启用允许登入的网段。
使用ntpq查看时钟同步状态
[root@www ~]# ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
*tock.stdtime.go 59.124.196.87 2 u 19 128 377 12.092 -0.953 0.942
+59-124-196-83.H 59.124.196.86 2 u 8 128 377 14.154 7.616 1.533
+59-124-196-84.H 59.124.196.86 2 u 2 128 377 14.524 4.354 1.079
这个 ntpq -p 可以列出目前我们的 NTP 与相关的上层 NTP 的状态,上头的几个字段的意义为:
remote:亦即是 NTP 主机的 IP 或主机名啰~注意最左边的符号如果有『 * 』代表目前正在作用当中的上层 NTP
如果是『 + 』代表也有连上线,而且可作为下一个提供时间更新的候选者。
refid:参考的上一层 NTP 主机的地址
st:就是 stratum 阶层啰!
when:几秒钟前曾经做过时间同步化更新的动作;
poll:下一次更新在几秒钟之后;
reach:已经向上层 NTP 服务器要求更新的次数
delay:网络传输过程当中延迟的时间,单位为 10^(-6) 秒
offset:时间补偿的结果,单位与 10^(-3) 秒
jitter:Linux 系统时间与 BIOS 硬件时间的差异时间, 单位为 10^(-6) 秒。
事实上这个输出的结果告诉我们,时间真的很准了啦!因为差异都在 0.001 秒以内, 可以符合我们的一般使用了。另外,你也可以检查一下你的 BIOS 时间与 Linux 系统时间的差异, 就是 /var/lib/ntp/drift 这个档案的内容,就能了解到咱们的 Linux 系统时间与 BIOS 硬件时钟到底差多久?单位为 10^(-6) 秒啦!
找到了一台快4分钟左右的机器,同步之后发现时间不是直接同步后一丝不差的,而是每次同步offset时间差减少几毫秒,这应该是为了防止正在运行的程序出问题,否则计时之类的程序肯定要出问题了。
参考: