[Infra] NTP란? with chronyd

김건호·2023년 9월 14일
0

개요

환경

Prolinux 8.5
kubernetes v1.21.14

현상

마스터 노드 1번으로 모든 노드의 시간을 동기화 해놨는데 talk 서비스에서 3분정도 시간이 빠르게 나오는 현상 발견.

원인

마스터 1번을 내부 NTP 서버로 동기화 하였지만 동기화가 정상적으로 이루어지지 않음.

해결

마스터 노드1번에서 chronyd 서비스를 사용해 시간동기화를 하였는데 ( Redhat 8 이후는 ntpd 대신 chronyd ) 설정 자체는 문제가 아니였음. 인프라 방화벽이나 NTP 서버쪽 설정을 의심
--> NTP 서버 로그, L4로그 확인 시, 마스터 1번으로 패킷이 전달되는 로그 확인
--> 마스터 1번 tcpdump에서는 들어오는 패킷이 없음
--> 원인 파악하지 못 하고, 고객이 해결을 원해서 다른 zone에 있는 서버에 방화벽 오픈 후, 다른 zone에 있는 서버를 바라보게 하여 동기화 완료

그럼 이 글은 왜..❓

이 현상 생기기 전에 사실 NTP가 뭔지도 몰랐다.. 그래서 정리~

NTP란?

NTP(Network Time Protocol)의 약자로 네트워크에서 컴퓨터의 시간을 동기화하는 데 사용되는 프로토콜입니다.

  • 트리구조로 이루어지며, 최상위로부터 시간을 받아 오는 것이 아닌 2,3,4 단계의 서버에서 시간을 가져옵니다.
    각 레벨은 stratum 로 구분 됩니다.
  • 포트는 UDP 123번을 사용합니다.

동기화 방법

chrony

chrony는 ntpd를 대체, RedHat 8 이후부터는 기본 NTP로 채택

chrnoyd를 제외한 ntpd관련 데몬이 실행중이면 안 됩니다.
--> ntpd와 chronyd 동시에 실행 불가

/etc/chrony.conf

conf 파일 수정 후에는 데몬 재기동

systemctl restart chronyd

ntp 서버 연결

# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
#pool 2.pl.pool.ntp.org iburst
server time.bora.net iburst

server [연결하려는 서버IP] iburst로 설정

iburst는 동기화 시간을 단축시키는 옵션

동기화 확인

timedatectl, chronyc sources -v

 ⚡ root@pps-26  ~  timedatectl
               Local time: Thu 2023-09-14 11:22:54 KST
           Universal time: Thu 2023-09-14 02:22:54 UTC
                 RTC time: Thu 2023-09-14 02:22:53
                Time zone: Asia/Seoul (KST, +0900)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no
 ⚡ root@pps-26  ~  chronyc sources -v

  .-- Source mode  '^' = server, '=' = peer, '#' = local clock.
 / .- Source state '*' = current best, '+' = combined, '-' = not combined,
| /             'x' = may be in error, '~' = too variable, '?' = unusable.
||                                                 .- xxxx [ yyyy ] +/- zzzz
||      Reachability register (octal) -.           |  xxxx = adjusted offset,
||      Log2(Polling interval) --.      |          |  yyyy = measured offset,
||                                \     |          |  zzzz = estimated error.
||                                 |    |           \
MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^* time.bora.net                 3   6     7     0    +12us[  +44ms] +/-   51ms

동기화가 정상적으로 되었다면 timedatectl 결과의 System clock synchronized의 값이 yes입니다.

동기화가 정상적으로 되었다면 chronyc sources -v의 결과의 MS 값이 ^*입니다.
^?, ^~ : 동기화 되지 않은 상태

서버로 만들고 싶을때

# Allow NTP client access from local network.
allow 192.168.0.0/16

# Serve time even if not synchronized to a time source.
#local stratum 3

allow : 해당 노드의 시간 동기화를 허용할 노드의 대역
local stratum : 노드의 stratum을 수동으로 지정, 보통 3으로 설정

profile
네.. 뭐.. 김건호입니다...

0개의 댓글