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 系統(tǒng)就會自動的進行網絡校時啰!這個方式的特點是簡單,但是僅適合不要啟動 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 表示『優(yōu)先使用』的服務器啰~有夠簡單吧!

利用 restrict 來管理權限控制

在 ntp.conf 檔案內可以利用『 restrict 』來控管權限,這個參數的設定方式為:

restrict [你的IP] mask [netmask_IP] [parameter]
其中 parameter 的參數主要有底下這些:

ignore: 拒絕所有類型的 NTP 聯(lián)機;
nomodify: 客戶端不能使用 ntpc 與 ntpq 這兩支程序來修改服務器的時間參數, 但客戶端仍可透過這部主機來進行網絡校時的;
noquery: 客戶端不能夠使用 ntpq, ntpc 等指令來查詢時間服務器,等于不提供 NTP 的網絡校時啰;
notrap: 不提供 trap 這個遠程事件登錄 (remote event logging) 的功能。
notrust: 拒絕沒有認證的客戶端。
那如果你沒有在 parameter 的地方加上任何參數的話,這表示『該 IP 或網段不受任何限制』的意思喔!一般來說,我們可以先關閉 NTP 的權限,然后再一個一個的啟用允許登入的網段。

使用ntpq查看時鐘同步狀態(tài)

[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 的狀態(tài),上頭的幾個字段的意義為:
remote:亦即是 NTP 主機的 IP 或主機名啰~注意最左邊的符號如果有『 * 』代表目前正在作用當中的上層 NTP
如果是『 + 』代表也有連上線,而且可作為下一個提供時間更新的候選者。

refid:參考的上一層 NTP 主機的地址
st:就是 stratum 階層啰!
when:幾秒鐘前曾經做過時間同步化更新的動作;
poll:下一次更新在幾秒鐘之后;
reach:已經向上層 NTP 服務器要求更新的次數
delay:網絡傳輸過程當中延遲的時間,單位為 10^(-6) 秒
offset:時間補償的結果,單位與 10^(-3) 秒
jitter:Linux 系統(tǒng)時間與 BIOS 硬件時間的差異時間, 單位為 10^(-6) 秒。

事實上這個輸出的結果告訴我們,時間真的很準了啦!因為差異都在 0.001 秒以內, 可以符合我們的一般使用了。另外,你也可以檢查一下你的 BIOS 時間與 Linux 系統(tǒng)時間的差異, 就是 /var/lib/ntp/drift 這個檔案的內容,就能了解到咱們的 Linux 系統(tǒng)時間與 BIOS 硬件時鐘到底差多久?單位為 10^(-6) 秒啦!
找到了一臺快4分鐘左右的機器,同步之后發(fā)現時間不是直接同步后一絲不差的,而是每次同步offset時間差減少幾毫秒,這應該是為了防止正在運行的程序出問題,否則計時之類的程序肯定要出問題了。

參考:

  1. http://cn.linux.vbird.org/linux_server/0440ntp.php#server
  2. http://blog.csdn.net/iloli/article/details/6431757
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現,斷路器,智...
    卡卡羅2017閱讀 136,697評論 19 139
  • 本文章僅作為個人筆記 CDH官網地址:https://www.cloudera.com/ CDH鏡像地址: c...
    草叢里的黃蓋閱讀 2,231評論 2 2
  • 1 概述 linux服務器在提供服務時,要和其他機器進行請求的交互,實際生產環(huán)境中,可能因為時間不同步,導致了服務...
    ghbsunny閱讀 1,483評論 0 1
  • 當本機時間不準確時,我們需要對時間進行校準,那么我們就需要在互聯(lián)網上找到一個可以提供我們準確時間的服務器然后通過一...
    經綸先生閱讀 8,518評論 1 7
  • 1.CDH簡單介紹? CDH是什么?hadoop是一個開源項目,所以很多公司在這個基礎進行商業(yè)化,不收費的Hado...
    StoneHeart閱讀 10,063評論 1 8

友情鏈接更多精彩內容