시계가 틀리면 장애난다: 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로 만드는 운영 진단 루틴을 다룹니다.
'서버 인프라 실무' 카테고리의 다른 글
| 백업은 존재할 때만 복구된다: rsync/cron으로 무중단 증분 백업(로컬·원격·보안·검증 루틴) (0) | 2025.10.23 |
|---|---|
| 시스템 모니터링 첫걸음: top/htop/journalctl/ss로 원인 추적(근거 있는 장애 대응 루틴) (0) | 2025.10.23 |
| 사용자·그룹·sudoers 운영 표준: 최소 권한과 감사 로그(Ubuntu 24.04) (0) | 2025.10.22 |
| 리눅스 파일 권한 이해: chmod/chown/umask 한 번에 끝내기(실무 예제·함정·점검 루틴) (0) | 2025.10.21 |
| Docker 설치부터 Compose v2로 서비스 올리기(Nginx+PostgreSQL, Ubuntu 24.04) (0) | 2025.10.21 |