Thursday, November 21, 2024

Đồng bộ hóa thời gian bằng ứng dụng Chrony trên hệ thống Linux

-

1. Tổng quan.

Bài viết này giới thiệu cách cấu hình NTP (Network Time Protocol) bằng ứng dụng Chrony trên hệ thống Linux.

Chrony là một ứng dụng đồng bộ hóa thời gian được sử dụng trên các hệ thống Linux để đảm bảo rằng thời gian hệ thống được duy trì chính xác. Điểm mạnh của Chrony là khả năng hoạt động tốt trên các hệ thống thường xuyên bị tắt hoặc mất kết nối mạng.

Dưới đây là một số điểm quan trọng về Chrony:

  • Cài đặt Chrony: Để cài đặt Chrony, bạn có thể sử dụng gói cài đặt của hệ thống (ví dụ: yum install chrony trên CentOS/RHEL hoặc apt install chrony -y với hệ thống Debian, Ubuntu). Sau đó, bạn khởi động dịch vụ Chrony và đảm bảo nó khởi động cùng với hệ thống.
  • Cấu hình Chrony: File cấu hình của Chrony nằm trong /etc/chrony/chrony.conf. Bạn có thể xác định máy chủ NTP bạn muốn sử dụng và cấu hình khác trong file này. Chrony cung cấp nhiều tùy chọn để điều chỉnh việc đồng bộ hóa thời gian.
  • Kiểm tra đồng bộ hóa: Bạn có thể sử dụng các lệnh chronyc để kiểm tra tình trạng đồng bộ hóa của Chrony. Các lệnh như chronyc tracking, chronyc sources, và chronyc sourcestats giúp bạn kiểm tra xem Chrony đã đồng bộ hóa với source thời gian nào, tình trạng của source thời gian và thông tin chi tiết về quá trình đồng bộ hóa.
  • Dừng Chrony: Nếu cần, bạn có thể dừng dịch vụ Chrony bằng lệnh systemctl stop chronyd. Sau khi dừng, bạn không thể tương tác với daemon Chrony nữa.
  • Chrony là một cài đặt khác của NTP: Chrony là một phần mềm cung cấp dịch vụ đồng bộ hóa thời gian trên hệ thống Linux bằng NTP.
  • Chrony được thiết kế cho các hệ thống thường xuyên tắt hoặc mất kết nối mạng: Điều này nghĩa là Chrony hoạt động tốt trên các máy tính mà thường xuyên bị tắt hoặc không kết nối với mạng.
  • File cấu hình chính của Chrony: File cấu hình chính của Chrony nằm trong /etc/chrony/chrony.conf. Bạn có thể chỉnh sửa file này để cấu hình Chrony theo cách bạn muốn.
  • Các tham số trong file cấu hình: File cấu hình Chrony sử dụng các tham số tương tự như file /etc/ntp.conf, nơi bạn xác định máy chủ NTP bạn muốn sử dụng.

2. Cài đặt Chrony.

Về việc cài đặt Chrony, bạn cần sử dụng lệnh sau để cài đặt gói Chrony trên CentOS/RHEL.

yum install chrony

Hoặc apt install chrony -yvới hệ thống Debian, Ubuntu.

apt install chrony -y

Sau đó, bạn cần khởi động chronyd và đảm bảo rằng nó khởi động cùng với hệ thống bằng cách sử dụng các lệnh sau:

systemctl start chronyd
systemctl enable chronyd

3. Cấu hình NTP Server.

Bước 1 – Cấu hình.

Mình ví dụ để biến máy chủ 192.168.100.111 thành một máy chủ NTP, bạn cần chỉnh sửa file cấu hình Chrony (/etc/chrony/chrony.conf) như sau:

keyfile /etc/chrony/chrony.keys
driftfile /var/lib/chrony/chrony.drift
logdir /var/log/chrony
maxupdateskew 100.0
rtcsync
makestep 1 3

# Sử dụng máy chủ NTP môi trường internet
server 0.ubuntu.pool.ntp.org iburst
server 1.ubuntu.pool.ntp.org iburst
server 2.ubuntu.pool.ntp.org iburst

# Cho phép các máy trong mạng LAN sử dụng máy chủ NTP này
allow 192.168.100.0/24

Các dòng trong file cấu hình Chrony dưới đây có ý nghĩa như sau:

  • keyfile /etc/chrony/chrony.keys: Dòng này chỉ định vị trí của file chứa các khóa bí mật được sử dụng bởi Chrony. Khóa này thường được sử dụng để xác thực và bảo mật giao tiếp giữa chronycchronyd, đảm bảo rằng chỉ các máy tính được ủy quyền mới có thể tương tác với Chrony.
  • driftfile /var/lib/chrony/chrony.drift: Dòng này chỉ định vị trí và tên file chứa dữ liệu sai số thời gian. File này lưu trữ thông tin về sai số thời gian trên hệ thống, giúp Chrony điều chỉnh thời gian của hệ thống một cách chính xác.
  • logdir /var/log/chrony: Dòng này chỉ định thư mục để lưu trữ các file nhật ký của Chrony. Các file nhật ký này chứa thông tin về hoạt động của Chrony và sự kiện liên quan đến đồng bộ hóa thời gian.
  • maxupdateskew 100.0: Dòng này xác định giới hạn sai số tối đa mà Chrony sẽ chấp nhận khi cập nhật thời gian từ source NTP. Nếu sai số vượt quá giới hạn này, Chrony có thể từ chối cập nhật. Trong trường hợp này, giới hạn là 100.0 milliseconds.
  • rtcsync: Dòng này bật tính năng đồng bộ hóa thời gian với hệ thống thời gian thực (Real-Time Clock – RTC) trên máy tính. Điều này giúp cải thiện độ chính xác của thời gian trên hệ thống.
  • makestep 1 3: Dòng này xác định rằng Chrony sẽ thực hiện bước lại hệ thống nếu sai số lớn hơn 1 giây, nhưng chỉ trong 3 lần cập nhật đồng hồ đầu tiên. Việc bước lại đồng hồ là cách Chrony sử dụng để điều chỉnh thời gian một cách đột ngột nếu sai số lớn, nhằm đảm bảo đồng bộ hóa nhanh chóng.
  • allow 192.168.100.0/24: Dòng này chỉ định rằng Chrony chỉ cho phép các máy tính có địa chỉ IP trong dải 192.168.100.0/24 được phép sử dụng dịch vụ Chrony để đồng bộ hóa thời gian. Các máy tính không thuộc dải này sẽ không được ủy quyền sử dụng Chrony.
  • server 0.ubuntu.pool.ntp.org iburst: Dòng này xác định máy chủ NTP mà Chrony sẽ sử dụng để đồng bộ hóa thời gian. Trong trường hợp này, máy chủ NTP có địa chỉ IP là 0.ubuntu.pool.ntp.org,1.ubuntu.pool.ntp.org,2.ubuntu.pool.ntp.org. Từ khóa iburst cho biết Chrony sẽ thực hiện một loạt các yêu cầu NTP ban đầu nhanh chóng để đồng bộ nhanh hơn.

Như vậy đã thêm các máy chủ NTP của Ubuntu và cấu hình cho phép máy khách trong mạng LAN sử dụng máy chủ này.

Bước 2 – Khởi động Chrony.

Bạn sử dụng lệnh systemctl để khởi động lại dịch vụ Chrony:

systemctl restart chronyd

Bước 3 – Kiểm tra đồng bộ hóa thời gian.

Sau khi bạn đã cấu hình máy chủ NTP và máy khách trong mạng LAN, bạn nên kiểm tra xem máy khách có đồng bộ hóa thời gian với máy chủ Chrony của bạn không bằng cách chạy lệnh chronyc tracking trên máy khách. Lệnh này hiển thị thông tin về việc đồng bộ hóa thời gian của Chrony.

Ví dụ:

$ chronyc tracking
Reference ID    : E76029C0 (2001:f74:81a0:2700::123)
Stratum         : 3
Ref time (UTC)  : Thu Nov 02 03:30:19 2023
System time     : 0.001335581 seconds slow of NTP time
Last offset     : -0.006357120 seconds
RMS offset      : 0.006357120 seconds
Frequency       : 6.649 ppm slow
Residual freq   : +318.862 ppm
Skew            : 2.957 ppm
Root delay      : 0.104267158 seconds
Root dispersion : 0.001055210 seconds
Update interval : 0.0 seconds
Leap status     : Normal

Lưu ý rằng để máy chủ Chrony của bạn trở thành một máy chủ NTP chính, bạn cũng cần đảm bảo rằng cổng 123 (cổng mặc định của NTP) đã được mở và máy chủ này có kết nối Internet để có thể liên lạc với các máy chủ NTP công cộng.

Bạn sẽ thấy các thông tin quan trọng như Reference ID, Stratum, Ref time, System time, và nhiều thông số khác. Chúng giúp bạn biết Chrony đã đồng bộ với máy chủ NTP nào và tình trạng đồng bộ hóa.

Bước 4 – Xem thông tin source thời gian.

Bạn có thể sử dụng lệnh chronyc sources để xem thông tin về các source thời gian hiện tại mà Chrony đang sử dụng:

$ chronyc sources
210 Number of sources = 3
MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^- 203.113.174.44                3   6    17    12  +6201us[+6201us] +/-  175ms
^- ntp1.tino.org                 2   6    17    12    +11ms[  +11ms] +/-  107ms
^* 2001:f74:81a0:2700::123       2   6    17    12  -1273us[-5793us] +/-   54ms

Trong ví dụ này, bạn sẽ thấy thông tin về số lượng source (Number of sources), tên hoặc địa chỉ IP của source (Name/IP address), Stratum, Poll, và nhiều thông số khác. Ký tự * ở đầu dòng chỉ ra rằng Chrony đang đồng bộ với source thời gian có dấu *.

Bước 5 – Xem thông tin drift rate và offset estimation.

Lệnh chronyc sourcestats cho bạn thông tin về tốc độ drift và ước tính offset cho mỗi source thời gian mà Chrony đang xem xét:

$ chronyc sourcestats
210 Number of sources = 3
Name/IP Address            NP  NR  Span  Frequency  Freq Skew  Offset  Std Dev
==============================================================================
203.113.174.44              4   3     6   -160.232   3589.752  +2448us   440us
ntp1.tino.org               4   3     6    +25.607   1874.268    +12ms   198us
2001:f74:81a0:2700::123     4   3     6    +63.172   9062.797  +1536us  1151us

Thông tin bao gồm tên hoặc địa chỉ IP của source (Name/IP Address), NP (số lần polling thành công), NR (số lần nhận được phản hồi), Span, Frequency, Freq Skew, Offset, và nhiều thông số khác.

Dưới đây là một số giải thích cho các thông số quan trọng trong kết quả hiển thị của các lệnh trên:

  • Stratum: Xác định số bước (hops) từ máy tính hiện tại đến máy tính có đồng hồ tham chiếu gắn kết.
  • Ref time (UTC): Thời gian gần đây nhất mà Chrony nhận được dữ liệu từ source thời gian tham chiếu.
  • System time: Thời gian của hệ thống, đo lường bằng giây so với thời gian NTP.
  • Name/IP address: Tên hoặc địa chỉ IP của source thời gian.
  • NPNR: Số lần polling thành công (NP) và số lần nhận được phản hồi (NR).
  • Frequency: Tần số hiện tại của source thời gian.
  • Offset: Sự chênh lệch giữa thời gian hệ thống và thời gian của source thời gian.

4. Cấu hình máy chủ NTP trên mạng LAN.

Trên các máy khách trong mạng LAN, bạn cần cài đặt Chrony như hướng dẫn trên và chỉnh sửa file cấu hình Chrony để sử dụng máy chủ NTP 192.168.100.111 này làm source thời gian. Thêm dòng sau vào file cấu hình Chrony của máy khách.

server IP_CUA_MAY_CHU iburst

Ví dụ mình thêm đoạn config này ở cuối file /etc/chrony/chrony.conf.

# Welcome to the chrony configuration file. See chrony.conf(5) for more
# information about usable directives.

# Include configuration files found in /etc/chrony/conf.d.
confdir /etc/chrony/conf.d

# Use Debian vendor zone.
pool 2.debian.pool.ntp.org iburst

# Use time sources from DHCP.
sourcedir /run/chrony-dhcp

# Use NTP sources found in /etc/chrony/sources.d.
sourcedir /etc/chrony/sources.d

# This directive specify the location of the file containing ID/key pairs for
# NTP authentication.
keyfile /etc/chrony/chrony.keys

# This directive specify the file into which chronyd will store the rate
# information.
driftfile /var/lib/chrony/chrony.drift

# Save NTS keys and cookies.
ntsdumpdir /var/lib/chrony

# Uncomment the following line to turn logging on.
#log tracking measurements statistics

# Log files location.
logdir /var/log/chrony

# Stop bad estimates upsetting machine clock.
maxupdateskew 100.0

# This directive enables kernel synchronisation (every 11 minutes) of the
# real-time clock. Note that it can't be used along with the 'rtcfile' directive.
rtcsync

# Step the system clock instead of slewing it if the adjustment is larger than
# one second, but only in the first three clock updates.
makestep 1 3

# Get TAI-UTC offset and leap seconds from the system tz database.
# This directive must be commented out when using time sources serving
# leap-smeared time.
leapsectz right/UTC

server 192.168.100.111 iburst
  • Thay thế IP_CUA_MAY_CHU bằng địa chỉ IP của máy chủ Chrony trên máy chủ của bạn.
  • Sau đó, bạn có thể khởi động lại dịch vụ Chrony trên máy khách để bắt đầu sử dụng máy chủ NTP của bạn.

Trên máy client nếu bạn cũng sử dụng lệnh systemctl để khởi động lại dịch vụ Chrony để áp dụng thay đổi.

systemctl restart chronyd

Thực hiện một loạt cú pháp kiểm tra tương tự như trên Local NTP đang chạy Chrony Server (192.168.100.111) nhé bạn sẽ thấy kết quả.

$ chronyc tracking
Reference ID    : C0A8646F (192.168.100.111)
Stratum         : 4
Ref time (UTC)  : Thu Nov 02 03:32:36 2023
System time     : 0.000899113 seconds fast of NTP time
Last offset     : +0.001014520 seconds
RMS offset      : 0.002838354 seconds
Frequency       : 9.003 ppm fast
Residual freq   : -32.263 ppm
Skew            : 1.213 ppm
Root delay      : 0.109471090 seconds
Root dispersion : 0.003613854 seconds
Update interval : 64.1 seconds
Leap status     : Normal

$ chronyc sources
MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^* 192.168.100.111               3   6   377    28  +3031us[+4046us] +/-   55ms

$ chronyc sourcestats
Name/IP Address            NP  NR  Span  Frequency  Freq Skew  Offset  Std Dev
==============================================================================
192.168.100.111             7   4   388    -32.263     89.823  -1053us  3753us

5. Để dừng dịch vụ Chrony.

Để dừng dịch vụ Chrony, bạn có thể sử dụng lệnh systemctl như sau:

systemctl stop chronyd

Sau khi bạn đã dừng Chrony, bạn không thể sử dụng lệnh chronyc để tương tác với daemon Chrony nữa. Khi bạn chạy chronyc tracking sau khi đã tắt Chrony, bạn sẽ thấy thông báo lỗi “Cannot talk to daemon.” Điều này chỉ ra rằng không thể kết nối với daemon Chrony vì nó đã bị tắt.

6. Kết luận.

Chrony là một ứng dụng quan trọng để đảm bảo rằng thời gian hệ thống được đồng bộ hóa một cách chính xác trên các hệ thống Linux. Qua bài viết này, bạn đã học cách cài đặt, cấu hình và kiểm tra đồng bộ hóa của Chrony, cũng như cách dừng dịch vụ nếu cần thiết. Điều này giúp bạn duy trì đồng bộ thời gian trên hệ thống của mình, quan trọng cho các ứng dụng và dịch vụ liên quan đến thời gian.

Tài liệu tham khảo https://www.thegeekdiary.com/centos-rhel-7-configuring-ntp-using-chrony/.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories