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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,280评论 19 139
  • 本文章仅作为个人笔记 CDH官网地址:https://www.cloudera.com/ CDH镜像地址: c...
    草丛里的黄盖阅读 6,416评论 2 2
  • 1 概述 linux服务器在提供服务时,要和其他机器进行请求的交互,实际生产环境中,可能因为时间不同步,导致了服务...
    ghbsunny阅读 5,261评论 0 1
  • 当本机时间不准确时,我们需要对时间进行校准,那么我们就需要在互联网上找到一个可以提供我们准确时间的服务器然后通过一...
    经纶先生阅读 12,647评论 1 7
  • 1.CDH简单介绍? CDH是什么?hadoop是一个开源项目,所以很多公司在这个基础进行商业化,不收费的Hado...
    StoneHeart阅读 13,350评论 1 8

友情链接更多精彩内容