1. 개요
- 리눅스 서버에서는 시스템 시간(OS 시간) 과 하드웨어 시간(RTC, Real-Time Clock) 을 동기화하는 것이 매우 중요합니다.
- 클러스터 환경이나 AD/SSO 환경에서는 시간이 맞지 않으면 인증 오류, 로그 불일치, 작업 스케줄링 문제 등이 발생할 수 있습니다.
chrony
패키지를 활용하여 외부 공개 NTP 서버 동기화와 내부 서버 간 시간 서버 구성(A-B 구조) 방법을 정리합니다.
2. 버전
- Rocky Linux 9.5
3. 설명
3-1. Chrony란?
chrony
는 리눅스 환경에서 시간을 동기화하기 위한 NTP(Network Time Protocol) 클라이언트/서버 프로그램입니다.
3-2. Chrony 설정 파일
항목 | 설명 |
---|---|
server [호스트/IP] iburst | 지정한 NTP 서버와 동기화. iburst 는 빠른 초기 동기화를 위해 사용 |
pool [도메인] iburst | 여러 서버를 풀(pool)로 지정 (ex: kr.pool.ntp.org) |
makestep 1.0 3 | 시간 차이가 1초 이상일 때, 초기 3회 업데이트 동안 즉시 보정 |
driftfile /var/lib/chrony/drift | 시스템 클럭 주파수 오차 보정값 저장 |
rtcsync | 하드웨어 시계(RTC)와 자동 동기화 |
allow 192.168.0.0/16 | 해당 네트워크 대역의 클라이언트가 시간 동기화 요청 가능 |
local stratum 10 | 외부 동기화가 불가능할 때 로컬 서버를 기준 시간으로 제공 |
logdir /var/log/chrony | 로그 저장 디렉토리 지정 |
3-3. Chrony 출력 기호
기호 | 의미 |
---|---|
* | 현재 선택된 기준 시간 서버 (synchronized) |
+ | 보조 후보 서버 (동기화는 되지만 *보다 우선순위 낮음) |
- | 동기화는 되지만 현재 선택에서 제외된 서버 |
? | 서버에 연결이 불안정하거나 응답 없음 |
^ | 서버(server) 방식으로 지정됨 |
= | 피어(peer) 방식으로 지정됨 |
# | 로컬 클럭(local clock) 사용 |
4. 외부 서버 동기화(서버 A)
- 서버 A는 외부 공개 NTP 서버와 직접 통신하여 내부망의 기준 시간이 됩니다.
4-1. Chrony 설치 확인
# rpm -qa | grep chrony
출력 예시:
chrony-4.5-3.el9.x86_64
설치가 안 되어 있다면 다음 명령어로 설치합니다.
# dnf -y install chrony
4-2. 설정 파일 백업
# mv /etc/chrony.conf /etc/chrony.conf_org
4-3. 설정 파일 수정
# vim /etc/chrony.conf
설정 예시:
# 외부 공개 NTP 서버 지정 (iburst → 빠른 초기 동기화)
server time.google.com iburst
server time.cloudflare.com iburst
server 1.kr.pool.ntp.org iburst
server 1.asia.pool.ntp.org iburst
# 초기 동기화가 1초 이상 차이날 경우 즉시 조정 (makestep)
makestep 1.0 3
# driftfile: clock 주파수 보정값 저장
driftfile /var/lib/chrony/drift
# RTC (하드웨어 시계)와 자동 동기화
rtcsync
# 로그 디렉토리
logdir /var/log/chrony
# 특정 대역 허용 (내부망)
allow 192.168.204.0/24
# stratum 수준 (내부망 마스터 서버 역할)
local stratum 10
4-4. 서비스 적용
# systemctl restart chronyd
# chronyc makestep
4-5. 서비스 확인
# chronyc sources
출력 예시:
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^* time3.google.com 1 6 17 7 +212us[+3345us] +/- 34ms
^+ time.cloudflare.com 3 6 17 7 +1519us[+4652us] +/- 74ms
^+ 121.174.142.81 3 6 17 7 +1202us[+4336us] +/- 42ms
^- 103.186.118.221 2 6 17 7 -155us[ -155us] +/- 33ms
4-6. 방화벽 설정
# firewall-cmd --list-services
출력 예시:
cockpit dhcpv6-client ssh
# firewall-cmd --add-service=ntp --permanent
출력 예시:
success
# firewall-cmd --reload
출력 예시:
success
# firewall-cmd --list-services
출력 예시:
cockpit dhcpv6-client ntp ssh
5. 내부 서버 동기화(서버 B)
- 서버 B는 외부와 직접 통신하지 못하므로, 내부 서버 A를 기준으로 시간 동기화를 진행합니다.
5-1. Chrony 설치 확인
# rpm -qa | grep chrony
출력 예시:
chrony-4.5-3.el9.x86_64
설치가 안 되어 있다면 다음 명령어로 설치합니다.
# dnf -y install chrony
5-2. 설정 파일 백업
# mv /etc/chrony.conf /etc/chrony.conf_org
5-3. 설정 파일 수정
# vim /etc/chrony.conf
설정 예시:
# 내부 서버 A 지정 (iburst로 빠른 초기 동기화)
server 192.168.204.230 iburst
# 시간 오차가 크면 즉시 보정
makestep 1.0 3
# driftfile: 주파수 오차 저장
driftfile /var/lib/chrony/drift
# RTC 동기화
rtcsync
# 로그 디렉토리
logdir /var/log/chrony
5-4. 서비스 적용
# systemctl restart chronyd
# chronyc makestep
5-5. 서비스 확인
# chronyc sources
출력 예시:
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^* 192.168.204.230 2 6 17 44 +5847ns[ +31us] +/- 41ms