Recommanded Free YOUTUBE Lecture: <% selectedImage[1] %>

Contents

NTP와 타임서버

NTP(Network Time Protocol)은 지연이 있을 수 있는 네트워크 상에서, 컴퓨터와 컴퓨터간의 시간을 동기화 하기 위한 네트워크 프로토콜이다. 1985년부터 사용한 프로토콜로 가장 오래된 인터넷 프로토콜 중의 하나다.

NTP는 계층적인 구조를 가지는데, 각각의 계층은 상위 계층으로 부터 시간을 동기화 한다. 계층은 지역을 기반으로 구성되는데, 네트워크 지연을 최소화하기 위함이다. 이 계층 구조의 최상위는 0부터 시작하며, 계층의 깊이는 15까지 총 16개의 계층으로 이루어진다. 0 레벨은 stratum 0이며, Primary reference clock이다.

 NTP servers and clients

Primary reference clock은 기준이 되는 최상위 시간 정보를 제공하기 때문에, 세슘, 류비듐 원자시계로 구성이 된다. Stratum 0에는 네트워크 디바이스가 직접 붙을 수 없다. 대신 RS-232 연결을 통해서, Stratum 1 컴퓨터에 시간 정보를 전송한다. 네트워크에 연결되는 것은 Stratum 1 컴퓨터들이다 . Stratum 2 컴퓨터는 네트워크를 통해서 Stratum 1 컴퓨터에 시간을 동기화 한다. Stratum 3은 Stratum 2로부터, Stratum 4는 Strarum 4로 부터 시간 정보를 받는다.

이렇게 계층화된 구조에서 서로 시간을 동기화하는 관계로 1ms 에서 30ms 이내의 정확도를 보장한다. 계층구조이기 대문에 ntp로 부터 시간을 동기화 하는 컴퓨터는 ntp 서버가 될 수 있다. 예컨데, 사내 내트워크에 ntp 서버를 만들고, 이 서버로 부터 시간을 동기화 하는 구성이 가능하다.

비록 15계층까지를 구성하지만, 보통 Stratum 3,4,5 정도의 ntp 서버를 사용한다.

AWS에서 시간 동기화

인터넷 서비스를 위해서는 시스템의 시간을 반드시 동기화해야 한다. 시간이 동기화 되지 않을 경우 시간이 잘못 표기되는 정도가 아니라, 어떤 경우에는 서비스 자체가 실패하는 경우도 있을 수 있다.

따로 NTP 서버를 만드는 경우도 있는데, 유지하기가 귀찮다. 그냥 AWS에서 제공하는 NTP 서버를 이용한다.

AWS에서 제공하는 NTP 서버목록이다.
server 0.amazon.pool.ntp.org
server 1.amazon.pool.ntp.org
server 2.amazon.pool.ntp.org
server 3.amazon.pool.ntp.org

ntp 소프트웨어를 설치한다.
# apt-get install ntp
ntp 소프트웨어를 설치하면 ntp 데몬이 작동한다. 서버로 사용할 계획이 없으므로 ntp 서비스는 중단한다.
# service ntp stop

설정파일을 변경한다.
# cat /etc/ntp.conf
...
...
server 0.amazon.pool.ntp.org
server 1.amazon.pool.ntp.org
server 2.amazon.pool.ntp.org
server 3.amazon.pool.ntp.org
...

시간을 동기화 해보자.
# /usr/sbin/ntpd -q -u ntp:ntp
ntpd: time set +7.295162s

잘 작동한다. 이제 cron에 등록하면 된다. 매일 0시 30분에 시간을 동기화 하도록 했다.
# echo '30 0 * * * root /usr/sbin/ntpd -q -u ntp:ntp' > /etc/cron.d/ntpd

Time exceeds limit

ntpd로 시간을 맞추다 보면, 간혹 아래와 같은 에러메시지를 만날 때도 있다.
# ntpd -q -u ntp:ntp 
time correction of -3488 seconds exceeds sanity limit (1000); 
set clock manually to the correct UTC time
시간 차이가 너무 많이 나서(1000초 이상) 시간을 동기화 할 수 없으니, 메뉴얼하게 대략 맞춘후에 다시 ntpd를 실행하라는 이야기다. 굳이 1000초 이상 시간 차이가 난다고 해서, 이렇게 사람을 귀찮게 할 필요가 있나라는 생각이 들지만 어쩔 수 없다. 해결 방법은 두 가지다.

time 서버를 이용해서 대략 동기화 한다음에 ntpd를 실행하는 방법
# rdate -s time.bora.net
# ntpd -q -u ntp:ntp 

-g 옵션을 이용해서 time exceeds limit를 무시하는 방법. 난 그냥 이방법 슴.
# ntpd -g -q -u ntp:ntp 

rdate와 NTP

2000년 초반까지 나는 rdate를 사용해서 시간을 동기화 했다.
# rdate -s time.bora.net
NTP와 달리 rdate는 네트워크 지연에 따른 시간보정을 하지 않는다. 네트워크 롤렉스(Rolex)라고 불리는 NTP를 놔두고 굳이 rdate를 이용할 필요는 없을 것 같다.

히스토리

  • 작성일 :