NTP 및 Chrony 개요
Linux 서버에서 정확한 시스템 시간 유지는 Cron 스케줄러, 로그 수집, 분산 환경에서의 데이터 정합성 보장 등 다양한 시간 기반 작업에 필수적입니다. 네트워크 시간 프로토콜(NTP)은 이러한 시간 동기화를 위해 널리 사용되는 표준 프로토콜입니다.
CentOS 8과 RHEL 8부터는 기존의 ntpd 패키지가 더 이상 기본 지원되지 않으며, 대신 chrony가 기본 NTP 구현체로 채택되었습니다. chrony는 네트워크 지연이 심하거나 연결이 간헐적인 환경, 그리고 가상화 환경에서도 시스템 클럭을 빠르고 정확하게 동기화하도록 설계되었습니다.
chrony는 크게 두 가지 구성 요소로 나뉩니다:
- chronyd: 백그라운드에서 실행되며 시간 동기화를 처리하는 데몬 프로세스입니다.
- chronyc:
chronyd의 상태를 모니터링하고 설정을 변경하는 명령줄 인터페이스(CLI) 도구입니다.
실습 환경 구성
본 가이드에서는 내부 네트워크에 NTP 서버를 구축하고, 이를 참조하는 클라이언트를 구성합니다.
| 구분 | NTP 서버 (Stratum 2/3) | NTP 클라이언트 |
|---|---|---|
| 호스트명 | time-server | app-node-01 |
| IP 주소 | 10.20.30.10 | 10.20.30.20 |
| OS | CentOS 8.2 | CentOS 8.2 |
Chrony 패키지 설치 및 서비스 활성화
NTP 서버와 클라이언트 역할을 수행할 모든 노드에서 chrony 패키지를 설치하고 서비스를 활성화합니다.
# chrony 패키지 설치
sudo dnf install -y chrony
# chronyd 데몬 시작 및 부팅 시 자동 실행 등록
sudo systemctl enable --now chronyd
# 서비스 실행 상태 확인
sudo systemctl status chronyd
NTP 서버(Chrony) 설정
NTP 서버로 사용할 호스트(10.20.30.10)에서 외부 공공 NTP 서버로부터 시간을 동기화받고, 내부 네트워크의 클라이언트들에게 시간을 배포하도록 설정합니다. /etc/chrony.conf 파일을 편집합니다.
sudo vi /etc/chrony.conf
기존의 기본 서버 목록을 주석 처리하거나 삭제하고, 아래 내용을 참조하여 구성합니다.
# 외부 상위 NTP 서버 지정 (iburst 옵션으로 초기 동기화 속도 향상)
server time.cloudflare.com iburst
server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
# 클럭 주파수 오차 보정 데이터 저장 경로
driftfile /var/lib/chrony/drift
# 시간 차이가 클 경우 단계적으로 보정하는 것이 아닌 즉시 동기화 (초기 3회 측정 시 1초 이상 차이 나면 점프)
makestep 1.0 3
# 하드웨어 클럭(RTC)과 시스템 클럭 동기화
rtcsync
# 내부 네트워크 서브넷에 대해 NTP 클라이언트 접근 허용
allow 10.20.30.0/24
# 외부 네트워크 연결이 끊겼을 때도 로컬 Stratum 10 서버로 동작하도록 설정
local stratum 10
# 수동 키 입력을 통한 시간 설정 허용
manual
# 로그 디렉토리 지정
logdir /var/log/chrony
설정 파일을 저장한 후 chronyd 서비스를 재시작하고, 상위 NTP 서버와의 동기화 상태를 확인합니다.
sudo systemctl restart chronyd
# 동기화 소스 확인
chronyc sources
출력 결과에서 ^* 기호는 현재 정상적으로 동기화되어 사용 중인 소스를 의미하며, ^+ 또는 ^?는 연결 중이거나 대기 중인 소스를 나타냅니다.
NTP 클라이언트 설정
클라이언트 호스트(10.20.30.20)에서는 외부 서버가 아닌 내부에 구축한 NTP 서버(10.20.30.10)를 참조하도록 설정합니다. 클라이언트는 다른 노드에게 시간을 배포할 필요가 없으므로 allow 지시어가 필요 없습니다.
sudo vi /etc/chrony.conf
파일 내부의 기존 server 또는 pool 라인을 모두 제거하고 내부 NTP 서버 IP를 추가합니다.
# 내부 NTP 서버 지정
server 10.20.30.10 iburst
driftfile /var/lib/chrony/drift
rtcsync
makestep 1.0 3
logdir /var/log/chrony
서비스를 재시작하고 동기화 상태를 검증합니다.
sudo systemctl restart chronyd
# 소스 연결 상태 확인
chronyc sources
# 상세 동기화 통계 및 추적 정보 확인
chronyc tracking
시간 동기화 상태 검증 도구
시스템의 시간 동기화 여부를 직관적으로 확인하기 위해 ntpstat 유틸리티를 추가로 설치하여 활용할 수 있습니다.
sudo dnf install -y ntpstat
# 동기화 상태 출력
ntpstat
또한 timedatectl 명령어를 사용하면 시스템 클럭의 NTP 동기화 활성화 여부와 현재 시간대 설정을 한눈에 파악할 수 있습니다.
timedatectl
출력 결과에서 System clock synchronized: yes 및 NTP service: active 항목이 확인되면 정상적으로 구성된 것입니다.
주요 Chrony 관리 명령어
운영 환경에서 chrony의 상태를 진단하고 모니터링할 때 유용하게 사용할 수 있는 CLI 명령어 목록입니다.
chronyc sources: 현재 구성된 시간 소스(서버) 목록과 동기화 상태 확인chronyc sources -v: 소스 목록과 함께 각 상태 기호에 대한 상세 설명 출력chronyc sourcestats: 각 소스별 시간 오프셋 및 지연 시간 통계 분석chronyc tracking: 현재 시스템 클럭의 전반적인 동기화 상태 및 Stratum 정보 조회chronyc makestep: 시간 차이가 발생할 경우 부드럽게 보정하지 않고 즉시 시스템 시간을 강제 동기화chronyc clients: 현재 NTP 서버에 접근하여 시간을 요청 중인 클라이언트 목록 확인 (서버 노드에서 사용)