본문 바로가기
서버 인프라 실무

시계가 틀리면 장애난다: chrony로 시간 동기화 정확히 잡기(Ubuntu 24.04, NTP 실무)

by yamoojin83 2025. 10. 22.

시계가 틀리면 장애난다: chrony로 시간 동기화 정확히 잡기(Ubuntu 24.04, NTP 실무)

결제, 토큰 만료, 로그 상관관계, SSL 검증… 시계가 어긋나면 장애가 납니다. Ubuntu 24.04 LTS에서 chrony로 NTP 동기화를 안정적으로 구성하고, 클라우드/프록시/폐쇄망 등의 현실 시나리오까지 커버하는 방법을 정리합니다.


1) 왜 chrony인가?

  • 빠른 수렴: 부정확한 시간에서 목표 시간으로 신속하게 수렴합니다.
  • 일시적 네트워크 단절 내성: 연결이 불안정해도 보정 품질이 좋습니다.
  • 가벼운 자원 사용정밀한 제어(slew/step, sources 우선순위).

2) 설치 및 기본 상태 확인

sudo apt update
sudo apt install -y chrony

# 서비스 시작/부팅 자동
sudo systemctl enable --now chrony

# 전체 상태
chronyc tracking
chronyc sources -v

tracking은 현재 오차/오프셋/주파수 보정 등 핵심 정보를, sources는 동기화에 쓰는 서버들의 상태를 보여줍니다.


3) 기본 설정 파일 이해(/etc/chrony/chrony.conf)

sudo nano /etc/chrony/chrony.conf

대표 지시어:

  • pool / server : NTP 원본(여러 개 정의 권장)
  • makestep : 오차가 큰 초기 단계에서 점프(step) 허용 규칙
  • allow : 이 서버를 NTP 제공자(서버)로 쓸 클라이언트 대역 허용
  • local : 외부 NTP가 없을 때 마스터처럼 동작(폐쇄망)

4) 공용 NTP 사용(일반 서버 권장)

공용 풀을 쓰는 가장 단순한 설정입니다. 데이터센터/클라우드에서는 공급자 권장 NTP를 우선 사용하세요.

# /etc/chrony/chrony.conf (예시)
pool 0.pool.ntp.org iburst
pool 1.pool.ntp.org iburst
pool 2.pool.ntp.org iburst
pool 3.pool.ntp.org iburst

# 초기 큰 오차는 과감히 step (시작 후 3분 이내, 1초 이상 어긋나면)
makestep 1.0 3

# 로그
logdir /var/log/chrony

# 서버의 시간대를 한국 표준시로 (표시는 시스템 로컬 설정로 처리)
# sudo timedatectl set-timezone Asia/Seoul 로 별도 설정

적용 및 확인:

sudo systemctl restart chrony
chronyc tracking
chronyc sources -v

5) 클라우드/사내 NTP 서버 우선(기업 표준)

사내 표준 NTP(예: ntp.corp.local)나 클라우드 제공자 NTP(예: 169.254.169.123 등)를 server로 고정하는 패턴:

# /etc/chrony/chrony.conf
server ntp.corp.local iburst prefer
server backup-ntp.corp.local iburst
# 또는 클라우드 권장 주소를 사용

makestep 1.0 3
logdir /var/log/chrony

prefer는 우선순위 힌트입니다. 인터넷 차단 등 정책 환경에선 사내 NTP만 두는 것이 일반적입니다.


6) 이 서버를 NTP 서버로도 쓰기(지점/엣지/폐쇄망)

지점 서버가 현지 장비들의 시간 기준이 되어야 할 때:

# /etc/chrony/chrony.conf
# 외부 NTP가 불가능한 폐쇄망이라면(최후의 수단):
# local stratum 10

# 이 서버를 NTP 제공자로 허용할 클라이언트 대역
allow 10.10.0.0/16
allow 192.168.0.0/16

# 접속 로깅(선택)
cmdport 0   # 보안상 필요 없다면 명령 포트 비활성
logdir /var/log/chrony

방화벽/UFW에서 123/udp 허용(클라이언트 ↔ 서버 동기화):

sudo ufw allow 123/udp

클라이언트 측 테스트:

# 다른 서버(클라이언트)에서
sudo apt install -y chrony
sudo bash -c 'echo "server 10.10.0.1 iburst prefer" >> /etc/chrony/chrony.conf'
sudo systemctl restart chrony
chronyc tracking

7) 시간대/RTC/하드웨어 클럭 정합

# 시스템 시간대 설정(대한민국)
sudo timedatectl set-timezone Asia/Seoul

# 하드웨어 클럭(RTC)에 현재 시스템 시간을 기록
sudo hwclock --systohc
# 역방향(부팅 후 시스템을 하드웨어 시간으로)
# sudo hwclock --hctosys

컨테이너/가상화 환경에선 호스트 시간 정확도가 핵심입니다. VM이 잦은 suspend/resume을 겪으면 오프셋이 커질 수 있으니 모니터링을 붙이세요.


8) 운영 점검 루틴(명령 모음)

# 현재 동기화 품질
chronyc tracking

# 소스 목록(상태/지연/오프셋)
chronyc sources -v

# 동기화 소스 스위칭/지연 확인
chronyc sourcestats -v

# 스텝/슬루 동작 상태
chronyc activity

# 서비스 상태/로그
systemctl status chrony
sudo tail -f /var/log/chrony/chronyd.log

tracking 결과에서 특히 Reference ID, Stratum, System time(오프셋), Last offset, RMS offset을 주기적으로 기록하면 추세 파악에 좋습니다.


9) 보안/성능 팁

  • NTP 앰플리피케이션 공격 방지: 외부에 공개 NTP 서버로 쓰지 말고, 꼭 필요하면 IP 화이트리스트와 UFW로 제한.
  • 선호 소스 고정: 사내/클라우드 권장 NTP를 prefer로 지정, 공용 풀과 혼용 시 불필요한 소스 전환을 줄입니다.
  • slew vs step: 운영 중 큰 오차가 나면 makestep 윈도우 외엔 slewing으로 천천히 맞추므로, 야간 점검 시간에 chronyc makestep으로 강제 step을 검토.

10) 트러블슈팅 시나리오

10-1) 동기화가 안 된다(Unsynchronised)

  • 원인: 외부 NTP 방화벽 차단, DNS 해석 실패, 소스 품질 불량.
  • 해결:
    • UFW/보안그룹에서 123/udp 아웃바운드 허용 확인.
    • DNS가 막혔다면 server 203.248.240.140처럼 IP로 직접 지정.
    • chronyc sources -v로 상태 점검 → 품질 좋은 소스로 교체.

10-2) 시간 점프가 자주 발생

  • 원인: 가상화 호스트/하이퍼바이저 시간 불안정, 리소스 과부하.
  • 해결: 호스트에서 먼저 chrony 정확도를 보장, VM에 과도한 CPU steal이 없는지 모니터링. 컨테이너 워크로드 스로틀링.

10-3) 폐쇄망에서 기준 시간이 흔들림

  • 원인: 외부 소스 없이 local만 쓴 경우 장기적으로 drift.
  • 해결: GPS/DCF77 기반 하드웨어 타임소스 도입, 또는 주기적으로 일시적 외부 동기화 윈도우 확보.

10-4) 시스템 시간대가 틀림

  • 원인: timedatectl 미설정.
  • 해결: timedatectl set-timezone Asia/Seoul 후 서비스 재기동.

11) 자동 점검(월 1회 권장)

# /usr/local/sbin/check-ntp.sh
#!/usr/bin/env bash
set -e
NOW=$(date -Is)
TRACK=$(chronyc tracking)
OFFSET=$(echo "$TRACK" | awk -F: '/System time/{gsub(/s| +/,"",$2); print $2}')
if [[ -z "$OFFSET" ]]; then OFFSET="N/A"; fi
echo "$NOW offset=$OFFSET" >> /var/log/chrony/offset.log
sudo chmod +x /usr/local/sbin/check-ntp.sh
# 매일 새벽 3시 기록
echo "0 3 * * * root /usr/local/sbin/check-ntp.sh" | sudo tee /etc/cron.d/check-ntp

운영 대시보드(프로메테우스/노드 익스포터)에 chrony 오프셋을 함께 시각화하면 이상 징후를 조기에 발견할 수 있습니다.


12) 최종 체크리스트

  • chrony 설치 및 systemctl enable --now chrony 완료
  • chronyc tracking의 오프셋이 안정적으로 미소값(㎲~ms) 유지
  • 사내/클라우드 권장 NTP 우선(server ... prefer) 또는 공용 풀 사용
  • 폐쇄망은 allow로 NTP 제공, 외부 공개는 금지/UFW 제한
  • 시간대 Asia/Seoul, hwclock --systohc로 RTC 정합

시간 오차는 소리 없이 장애를 키웁니다. 위 설정과 점검 루틴을 적용해 서버 전반의 시간 신뢰도를 먼저 확보하세요. 다음 글에서는 top/htop/journalctl/ss로 만드는 운영 진단 루틴을 다룹니다.