ตั้งเวลาเครื่องให้ตรงมาตรฐานด้วย NTP

จากบทความ เปลี่ยนวันเวลาบนลีนุกซ์ด้วยคำสั่ง 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

 

ข้อมูลอ้างอิง

Leave a Reply

Your email address will not be published.