จากบทความ เปลี่ยนวันเวลาบนลีนุกซ์ด้วยคำสั่ง date นั้น เวลาที่ตั้งอาจคลาดเคลื่อนกับเวลามาตรฐานไปพอสมควร อาจผิดเป็นหน่วยนาที หรือวินาที ซึ่งบางระบบอาจไม่สามารถยอมรับความคลาดเคลื่อนขนาดนี้ได้
วิธีที่ดีที่สุดที่จะตั้งเวลาให้ตรงกับมาตรฐานจริงๆ คือต้องใช้ NTP
NTP ย่อมาจาก Network Time Protocol ใช้ในการปรับเวลาของเครื่องต่างๆ ที่อยู่บนเครือข่ายให้มีเวลาตรงกันตลอดเวลา
โดยเครื่องจะรัน ntpd เพื่อใช้เทียบเวลากับเซิร์ฟเวอร์ที่คอนฟิกไว้อยู่เรื่อยๆ ตลอดเวลา ซึ่งถ้าเวลาไม่ตรง โปรแกรม ntpd จะค่อยๆ ปรับเวลาของเครื่อง client ให้ใกล้เคียงเรื่อยๆ จนตรงกับ server ในที่สุด
ในการใช้งาน จะมีวิธีการอ้างอิงเวลาเป็นลำดับขั้นที่เรียกว่า stratum โดยบนเครื่องคอมพิวเตอร์ค่าเริ่มต้นจะตั้งแต่ 1 ซึ่งถือเป็นเวลามาตรฐานกลาง เครื่องที่ทำหน้าที่เป็น stratum 1 นั้น จะมีกระบวนการเทียบเวลาจากอุปกรณ์ชนิดอื่นๆ ที่ไม่ใช่คอมพิวเตอร์ เช่น GPS เป็นต้น อุปกรณ์จำพวกนี้ ถือว่าเป็น stratum 0
ตอนคอนฟิก ถ้าเราไม่มีอุปกรณ์ที่เป็น stratum 0 แล้ว เราก็ต้องต่ออินเตอร์เน็ต เพื่ออ้างอิง (sync) เวลามาจากเครื่องที่เป็น stratum 1 และเมื่อเวลาตรงกันแล้ว เครื่องของเราก็ จะถือว่าเป็น stratum 2 แล้วถ้าเครื่องที่มาอ้างอิงเวลาจากเครื่องนี้อีกที ก็จัดเป็น stratum 3, 4 เรื่อยๆ
ประโยชน์ในการจัดเป็น stratum คือจะลดโหลดที่เกิดขึ้น คือแทนที่ทุกเครื่องจะไปอ้างอิง (sync) เวลามาจาก stratum 1 ก็กระจายโหลดไป ทั้งลดโหลดบน stratum 1 เอง แล้วก็ประหยัด bandwidth อินเตอร์เน็ตด้วย
คำแนะนำ : ในทางปฎิบัติ แนะนำให้คอนฟิก NTP บนเครื่องเดียวหรือสองเครื่อง ที่ต่ออินเตอร์เน็ตได้ ให้ไปเทียบเวลาจาก stratum 1 ส่วนเครื่องอื่นๆ ในสำนักงานของเรา ก็คอนฟิกเพื่อมาเทียบเวลาจากเครื่องนี้แทน หรืออาจจะมี ลำดับ 3, 4 ต่อไปอีกก็ได้ แล้วแต่จำนวนเครื่องที่มีอยู่ เช่น มีเครื่องที่ทำหน้าที่ stratum 2 ที่ต่ออินเตอร์เน็ตอยู่ 2 เครื่อง แล้วมี stratum 3 อีกจำนวนหนึ่งของแต่ละฝ่าย ส่วนเครื่อง client ที่อยู่ในฝ่ายก็คอนฟิกให้เทียบเวลาจาก stratum 3 อีกที ก็จะเป็น statum 4
โดยดีฟอลต์แล้ว NTP จะติดตั้งมาพร้อมกับ CentOS 6 และจะมีคอนฟิกไฟล์หลักคือ /etc/ntp.conf ในคอนฟิกจะอ้างอิงเวลากับเซิร์ฟเวอร์จำนวน 3 ตัว พร้อมใช้งานได้เลย หากเครื่องเราต่ออินเตอร์เน็ตได้
ตัวอย่างคอนฟิก NTP ที่ติดตั้งมากับ CentOS 6.2
[root@cent6 ~]# cat /etc/ntp.conf # For more information about this file, see the man pages # ntp.conf(5), ntp_acc(5), ntp_auth(5), ntp_clock(5), ntp_misc(5), ntp_mon(5). ... # Use public servers from the pool.ntp.org project. # Please consider joining the pool (http://www.pool.ntp.org/join.html). server 0.centos.pool.ntp.org server 1.centos.pool.ntp.org server 2.centos.pool.ntp.org ...
หากเครื่องที่เราจะคอนฟิกไม่สามารถเชื่อมต่ออินเตอร์เน็ตได้ หรือต้องการแก้ไข NTP server ให้ชี้ไปยัง IP อื่น ก็สามารถทำได้โดยลบคอนฟิก server ทั้งสามบรรทัดนี้ (อาจใส่เป็นเครื่องหมาย # นำหน้าคอนฟิก) แล้วเพิ่มคอนฟิก server ตามด้วย IP ของเซิร์ฟเวอร์ที่เราต้องการไป sync ด้วย เช่น
#server 0.centos.pool.ntp.org #server 1.centos.pool.ntp.org #server 2.centos.pool.ntp.org server 192.168.1.1
รันเซอร์วิส ntpdate, ntp
หลังจากแก้ไขคอนฟิก ขั้นต่อไปคือการรัน service โดยจะมี ntpdate และ ntpd ที่ต้องรัน
ntpdate จะเป็นเซอร์วิสที่รันเพื่อปรับเวลาของเครื่องให้ใกล้เคียงกับเซิร์ฟเวอร์ที่เราคอนฟิกไว้ มากที่สุด จะทำให้เวลาของเครื่องเปลี่ยนไปทันที เหมือนกับคำสั่ง date
รันเซอร์วิส ntpdate
[root@cent6 ~]# service ntpdate start ntpdate: Synchronizing with time server: [ OK ]
ส่วนการปรับโดยละเอียดจะเป็นหน้าที่ของ ntpd ซึ่งจะรันเป็น daemon อยู่ตลอดเวลา ค่อยๆ ปรับเวลาให้ตรงกับ server ซึ่งบางครั้งต้องใช้เวลานานพอสมควร
รันเซอร์วิส ntpd เพื่อสตาร์ต ntpd
[root@cent6 ~]# service ntpd start Starting ntpd: [ OK ]
ตรวจสอบสถานะการ sync
เราสามารถใช้คำสั่ง ntpstat เพื่อตรวจสอบสถานะการ ลำดับ stratum เท่าไร
[root@cent6 ~]# ntpstat unsynchronised time server re-starting polling server every 64 s
ถ้าขึ้น “unsynchronised” แปลว่าเวลาของเครื่องเรายังไม่ตรง
เมื่อเวลาผ่านไปซักพัก เครื่องก็น่าจะสามารถปรับเวลาให้ตรงได้แล้ว อาจใช้ tail -f ดูไฟล์ /var/log/messages
เมื่อ sync ได้แล้วจะมีข้อความ “synchronized to …” พร้อมรายงาน IP และ stratum ของเซิร์ฟเวอร์ที่ sync ได้ ตัวอย่างเช่น
[root@cent6 ~]# tail -f /var/log/messages May 7 21:14:14 cent6 ntpd[1813]: synchronized to 203.158.118.2, stratum 2 May 7 21:14:14 cent6 ntpd[1813]: kernel time sync status change 2001
ลองใช้สั่ง ntpstat ดูสถานะอีกครั้ง
[root@cent6 ~]# ntpstat synchronised to NTP server (203.158.118.2) at stratum 3 time correct to within 655 ms polling server every 64 s
ผลลัพธ์ที่ได้ หมายความว่าเครื่องเซิร์ฟเวอร์ของเรา มีเวลาตรง (sync) กับเซิร์ฟเวอร์ 203.158.118.2 ที่มี stratum 3 แล้ว
เปิดเซอร์วิสตอนบู๊ตเครื่อง
หลังจากทดสอบเรียบร้อยแล้ว ใช้คำสั่ง chkconfig เพื่อเปิดเซอร์วิส ntpdate และ ntpd ตอนบู๊ตเครื่องด้วย
[root@cent6 ~]# chkconfig ntpdate on [root@cent6 ~]# chkconfig ntpd on [root@cent6 ~]# chkconfig --list | grep ntp ntpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off ntpdate 0:off 1:off 2:on 3:on 4:on 5:on 6:off