본문 바로가기

Computer/OS

NTP를 이용한 시스템간 시간 동기화

【 제목 】NTP를 이용한 시스템간 시간 동기화

----------------------------------------------------------------

 

◎ Overview

1. System의 동기화 방법과NTP의 특징

2. xnptd를 이용한 시간 동기화

 

1. System의 동기화 방법과 NTP의 특징

 

시스템을 운영하다 보면 각 서버간의 시간을 동기화 시킬 필요를 느끼게 됩니다.

 

시스템간의 시간을 동기화 시킬 수 있는 방법은 크게 3가지가 있습니다.

 

우선 가장 간단한 명령은 setclock 명령입니다. # setclock hostname 을 통해 지정한 host의 time을 가져오는 명령어입니다. 이 명령어는 지속적인 동기화가 아닌 명령어를 수행한 순간에 한번만 실행되는 명령어입니다. 단지 시스템간의 시간을 맞추고 싶다면 cron에 이 명령을 적절한 시간에 반복하도록 등록하는 것도 하나의 방법이 될 수 있습니다.

또 다른 방법으로 timed Daemon을 사용할 수 있습니다. Timed는 동일 네트웍에 있는 서버들의 시간을 동기화시키는 데몬입니다. timed는 주기적으로 시간을 확인해 동기화 하지만 20ms의 정도의 서버의 시간 차는 무시하고 "sync 시간"을 결정하므로 무시된 서버의 시간은 시간 차이가 큰 서버들간의 sync time으로 인해 큰 차이로 변경 될 수 있습니다.

마지막 방법이 이번 호에서 살펴보려 하는 NTP를 이용한 시간 동기화 방법입니다. NTP는 xntpd Daemon을 이용해 시간을 동기화 하며 xnptd는 timed와는 다르게 동일 network이 아닌 시스템 간에도 사용할 수 있으며 1분에 5초 정도까지 보정 될 수 있습니다.

 

참고로NTP은 UDP 사용자 데이터그램 프로토콜(UDP) 포트 123을 사용합니다. 이 포트가 인터넷으로 열려 있지 않으면 서버를 인터넷 SNTP서버와 동기화할 수 없습니다.

 

기본적으로 timed는 설정 후 sync를 시키면 바로 시간을 맞추고 xntpd는 8분 정도 후에 서버와 클라이언트 간에 시간이 맞추어지게 됩니다. xntpd의 경우 이론상 최초 구동 후 timesysnc check는 분당 이루어지나 그 시간은 서버간 거리나 clock drift에 의해 바뀔 수 있으며 보통 6분에서 10분 가량 걸리는 것으로 나타나고 있습니다.

 

 

2. xntpd를 이용한 시간 동기화

 

* 시간 동기화의 Server 환경 구성*

 

1) /etc/ntp.conf ,/etc/ntp.drift 와/etc/ntp.trace 파일이 있는지 확인합니다

2) /etc/ntp.conf 파일을 아래와 같이 수정합니다.

------------------/etc/ntp.conf-----------------------------

server 127.127.1.0 prefer# local clock as reference

자신의 IP와 상관없이 setting 하는 값입니다.

fudge 127.127.1.0 stratum 0# values for local clock(필수 항목은 아닙니다.)

driftfile /etc/ntp.drift# where to keep drift data

tracefile /etc/ntp.trace

------------------------------------------------------------

3) xntpd를 살립니다.

# smitty xntpd >Start Using the xntpd Sybsystem> Both 또는 # startsrc -s xntpd

4) Daemon이 살아있는지 확인합니다.

# ps -ef | grep xntpd / 결과로 srcmster 로 부터 start 되었음을 확인합니다.

à 6-8 분 정도 후에

# lssrc -ls xntpd 결과 값에서 아래 표시된 값들을 확인합니다.

root@v5:/>lssrc -ls xntpd

Program name:/usr/sbin/xntpd

Version:3

Leap indicator:00 (No leap second today.)

Sys peer:127.127.1.0

Sys stratum:4

Sys precision:-16

Debug/Tracing:DISABLED

Root distance:0.000000

Root dispersion: 0.010010

Reference ID:127.127.1.0

Reference time:c52992e1.7c721000Tue, Oct 26 2004 22:22:09.486

Broadcast delay: 0.003906 (sec)

Auth delay:0.000122 (sec)

System flags:pll monitor filegen

System uptime:73593 (sec)

Clock stability: 0.000000 (sec)

Clock frequency: 0.000000 (sec)

Peer: 127.127.1.0

flags: (configured)(refclock)(sys peer)(preferred)

stratum:3, version: 3

our mode: client, his mode: server

SubsystemGroupPIDStatus

xntpdtcpip352262active

 

 

* 시간 동기화의 Client환경 구성*

 

1) date 명령어로 현재 Server 와 어느 정도 시간 차이가 나는지 확인합니다. xntpd는 Server와 Client간 1000초(16분) 이상의 시간 차이가 발생하면 더 이상 시간을 동기화 하지 않습니다. date 확인 후 시간차가 크다면 # smitty date 를 통해 시간을 근접하게 바꾸어 줍니다.

2) /etc/ntp.conf ,/etc/ntp.drift 와/etc/ntp.trace 파일이 있는지 확인합니다

3) /etc/ntp.conf 파일을 아래와 같이 수정합니다.

-----------------/etc/ntp.conf-------------------------------

server xxx.xxx.xxx.xxx (server_name_or_ip)# NTP server 의 IP address

driftfile /etc/ntp.drift

tracefile /etc/ntp.trace

-------------------------------------------------------------

3) xntpd를 살립니다

# smitty xntpd >Start Using the xntpd Sybsystem> Both 또는

# startsrc -s xntpd –a "-x“

- x 명령어를 통해 Time backward 를 막을 수 있습니다. 이로서 시간이 늦는 서버의 시간을 동기화 하는 것을 방지해 시간차에 민감한 DB들의 충돌을 방지할 수 있습니다

 

4) Daemon이 살아있는지 확인합니다.

# ps -ef | grep xntpd / 결과로 srcmstr 로 부터 start 되었음을 확인합니다.

à 6-8분 후에

# lssrc -ls xntpd 결과 값에서 아래 표시된 값들을 확인합니다.

root@v4:/> lssrc -ls xntpd

Program name:/usr/sbin/xntpd

Version:3

Leap indicator:11 (Leap indicator is insane.)

Sys peer:no peer, system is insane

Sys stratum:16

Sys precision:-16

Debug/Tracing:DISABLED

Root distance:0.000000

Root dispersion: 0.000000

Reference ID:no refid, system is insane

Reference time:no reftime, system is insane

Broadcast delay: 0.003906 (sec)

Auth delay:0.000122 (sec)

System flags:pll monitor filegen

System uptime:23 (sec)

Clock stability: 0.000000 (sec)

Clock frequency: 0.000000 (sec)

Peer: v5.kr.ibm.com

flags: (configured)(preferred)

stratum:4, version: 3

our mode: client, his mode: server

SubsystemGroupPIDStatus

xntpdtcpip15002active

위와 같이 Sever와 Client의 구성을 끝내고 나면 각 서버에서

# ntpq –p 로 system이 시간을 동기화 시키는 과정을 확인 할 수있습니다. (또는 xntpdc -p )

참고 자료 :http://www.eecis.udel.edu/~ntp/ntp_spool/html/ntpq.html

root@v4:/> ntpq -p

remoterefidst t whenpollreachdelayoffsetdisp

========================================================================

*v5.kr.ibm.comLOCAL(0)4 u35643771.27-3.3450.53

root@v4:/> date

Wed Oct 27 12:45:34 KORST 2004

root@v5:/>date

Wed Oct 27 12:45:37 KORST 2004

root@v5:/>ntpq -p

remoterefidsttwhen pollreachdelayoffsetdisp

 

========================================================================

 

 

*LOCAL(0)LOCAL(0)3l7643770.000.000

대부분의 경우 Reach 값이 377에 다다를 경우 시간의 동기화가 완료됩니다.

 

 

Tip !보통 6분에서 10분 사이에 시스템간 시간은 동기화가 되며 동기화 설정후 바로 시간을 맞추고 싶다면ntp server 가 active 인 상태인 Client에서

#ntpdate <ip_of_Sever> 또는 # setclock hostname

#startsrc -s xntpd -a "-x"

로 데몬을 살리면 시간은 바로 같아집니다.

후에 reboot 후에도 같은 설정을 적용하고 싶다면 모든 시스템의/etc/rc.tcpip 파일에 start /usr/sb in/xntpd "$src_running" "-x" 항목을 추가해주시기 바랍니다.

이 밖에AIX머신과 Windows NT간의 시간 동기화은NT의 w32time service를 이용하여 설정해 주시면 되고AIX는 위와 같은 동일한 방법으로 서버, 클라이언트에 맞는 구성을 해 주시면 됩니다.

 

이상NTP를 이용해 시간을 동기화 하는 방법을 알아보았습니다. xntpd를 이용해 시간을 동기화 한 후 Time Server의 시간을 바꾸면 전체 Client의 시간이 바뀌므로 주의해서 시간관리를 해야 합니다. Time Server의 시간을 임시로 바꾸고자 하면 반드시 xntpd daemon을 stop 시킨 후 (#stopsrc -s xntpd) 작업을 합니다.

 

 

◆ aix 에서 ntp 서버 구성

[Server]

/etc/ntp.conf 화일에서 맨 밑으로 이동

#broadcastclient -- 주석처리#server 127.127.1.0 prefer -- local 서버

server 203.254.163.74 prefer -- 외부 서버를 기준 (timency.kriss.re한국 표준과학연구원)

driftfile /etc/ntp.drifttracefile /etc/ntp.trace

> startsrc -s xntpd 로 기동 한다.

> smity xntpd 로 기동 할수 있다.

>ntpd -p 로 확인

외부 서버 연결 시

root@ntp:/> ntpq -p

remote refid st t when poll reach delay offset disp

==============================================================================*timency.kriss.r .檢 . 1 u 162 1024 377 36.56 0.795 8.58

자기 자신 참조시

root@ntp:/> ntpq -p

remote refid st t when poll reach delay offset disp============================================================================== LOCAL(0) LOCAL(0) 4 u 59 64 377 2.20 0.104 0.03

[Client]

/etc/ntp.conf file 수정

#broadcastclient -- 주석처리server ntp_server_ip

driftfile /etc/ntp.drifttracefile /etc/ntp.trace

> startsrc -s xntpd 로 기동 한다.

> smity xntpd 로 기동 할수 있다.

>ntpd -p 로 확인

root@client:/> ntpq -p

remote refid st t when poll reach delay offset disp==============================================================================ntp_svr LOCAL(0) 4 u 59 64 377 2.20 0.104 0.03

# ntpdate -d ntp_server_ip 서버의 시간과 동기화 한다.

========================================================================================

1. 신규 설정할 NTP 서버와 네트웍확인

- 현재 시스템 시간 확인

#date(실제 시간과 1000초 이상 차이가 있으면 현재 시간을 수정후 작업.1000초이상 차이가나면 시간 동기화가 안된다.)

- ntp 서버로 설정할 시스템으로 ping 테스트

#ping x.x.x.x (NTP서버 IP)

ping test의 결과가 양호하여야한다

2. NTP 타임서버를 NTP 구성파일에 등록한다.

- /etc/ntp.conf 파일을 수정

#vi /etc/ntp.conf

server <ntp서버명 혹은 ip>prefer

server<ntp서버명 혹은 ip> tracefile /etc/ntp.trace#trace file 지정 driftfile /etc/ntp.drift#제거(Local clock의 정확도를tracking 한다)

*** prefer등에대한 설명은 생략~ 서버를 여러개 등록할 수 있으므로 우선시 순위라고 생각하도록하자. (정말모르겠으면 복사한후 파란색 글씨만 NTP서버 아이피로 바꿔 입력하면된다 -_-;;;)

3. NTP 프로세스 시작

#startsrc –s xntpd

#ps -ef | grep xntpd-> xntpd daemon이 동작중임을 확인만일 oracle 이나 기타 어플리케이션 특성상 시간이 뒤로 가는 것(동기화시)을 막으려면 아래와 같이 start시키도록한다. #startsrc -s xntpd -a "-X" Note: -x option prevents time from being adjusted backward

4. NTP서버와 수동 동기화

# ntpdate -d<NTP서버 주소>

5. 명령어를 이용한 NTP 양호 여부판단

# /usr/sbin/ntpq –p:정상판단기준#daemonstart 후 약5분 후

remoterefidst t when poll reachdelayoffsetdisp

====================================================================

*211.115.4.202133.100.9.22 u785123770.500.0570.03

+211.115.4.205133.100.9.22 u1505123772.613.2130.11

. reach 값이 377 이어야 한다

. delay 값이 5보다 작아야 한다

. NTP 서버로 설정한 시스템이 마스터 이어야함(IP 앞에 * 표시가 있는것이 마스터 시스템)

ð이때 처음에는 reach값이 작게 시작해서 시간이 지날수록 점점 올라가는데,

계속해서 connection fail이 나는 경우가 생기면, 시스템의 timezone 셋팅이 제대로 되어있는지 체크 할 것.

** 리부팅시 자동 시작되게하려면 아래와 같이 /etc/rc,tcip 파일에서 수정.(앞에막혀있는 #을 풀어주면됨) #vi /etc/rc.tcpip start /usr/sbin/xntpd "$src_running" (rebooting시 적용되게 앞에 #을 지원준다)

 

 

 

출처 - 인터넷 블로그