ansible批量修改NTP配置

网络组同学通知我有一批虚拟机的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时间差减少几毫秒,这应该是为了防止正在运行的程序出问题,否则计时之类的程序肯定要出问题了。

参考:

  1. http://cn.linux.vbird.org/linux_server/0440ntp.php#server
  2. http://blog.csdn.net/iloli/article/details/6431757
    原文作者:miltonsun
    原文地址: https://www.jianshu.com/p/b4f27fef7502
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞