728x90
반응형
ntpd란?


- ntpd는 ntp 서버를 참조해 시스템 클록을 보정하면서 클라이언트에 시간을 제공하는 데몬

- 라디오나 원자시계에 맞추어 시간을 조정하며 밀리초 1/1000초 단위까지 시간을 조정가능

- ntp 방식은 straum이라는 계층 구조를 가진다.
  • straum 0 : GPS나 세슘원자 시계등 시간을 구하는 장비
  • straum 1 : GPS나 세슘원자 시계등에서 직접 시간을 동기화하는 서버를 의미
  • straum 2,3 : 트리구조를 형성하는데 보통 straum 2에서 동기화하고
                       straum 3 서버에서 나머지 서버들을 peer로 해서 동기회 시키므로 straum 1 서버들의 부하를 줄인다.
  • 값이 너무 낮으면 (Server dropped : strata too high) 이런 에러가 발생하니 적당히 낮은 수치로 설정
  • 1 혹은 2는 외부 ntp 서버값으므로 사용을 안하는 것이 좋음

- ntp는 UDP 123을 기본 포트로 사용하므로 포트 개방이 필요하다

- 우리나라에서 운영되고 있는 ntp 서버는 아래와 같다
  • kr.pool.ntp.org
  • time.bora.net
  • time.nuri.net





ntp 사용법


설치 및 확인

# yun install ntp

# rpm -qa | grep ntp


ntp 설정

1) ntp 설정파일 수정 
# vi /etc/ntp.conf
- 클라이언트의 경우 해당 파일에 ntp 서버의 IP가 입력되면 된다. Ex) server 192.168.10.10



  • /etc/ntp.conf 와 driftfile 과 keys의 경우 배포판마다 위치가 다를 수 있으니 확인
  • driftfile은 시간 오차치를 보존해 두는 파일로 ntpd 데몬에 의해 자동생성
  • key 파일은 인증받기 위한 파일
  • restric 설정은 peer 들이 본 서버로 sync를 하는 것을 제한
  • restric default nomodify notrap noquery 설정은 기본으로 모든 권한을 주지 않음을 의미
  • restrict 127.0.0.1 설정은 127.0.0.1 즉, 서버 자신에서는 모든 권한을 가진다
  • restrict 192.168.0.0 mask 255.255.255.0 nomodify notrap 설정은 192.168.0.0 ~ 192.168.0.255 c 클래스에서는
    질의를 할 수 있는 권한을 가진다. 즉 위의 2라인은 항상 기본으로 들어가는 설정이며 peer를 거느릴 서버는
    하위 peer들의 질의를 받을 수 있도록 3번째 라인과 같이 restrict 설정을 해주어야 한다.
Tip
iburst 옵션이 없으면 ntpd 데몬이 시작하는 시점에서 시스템 시간이 약 10분이상 틀어져 있을 경우 동기화하는데 시간이 오래걸린다.
해당 옵션을 주면 동기화 시간을 단축할 수 있다.
Ex) server 192.168.10.10 iburst


2) 시작프로그램에 등록
# chkconfig --level 2345 ntpd on

3) ntp 서비스 시작
# service ntpd start



4) ntp 동기화 확인

# ntpq -p



  • * : 현재 sync를 받고 있음
  • + : ntp 알고리즘에 의해 접속은 가능하지만 sync를 하고 있지 않음
  • - : ntp 알고리즘에 접속은 가능하지만 sync 가능 리스트에서 제외
  • blank(빈칸) : 접속이 불가능함을 의미

5) ntpstat

# ntpstat







ntpdate 사용하기


- ntpdate는 서버 시작시 실행되도록 하는것이 좋다. (DB 서버 및 시간에 민감한 서버는 제외)

- 시스템이 부팅될 때 메인보드 CMOS Clock(하드위어 시계)에 의해 OS 시간이 결정되는데
이때 CMOS Clock이 맞지 않을 경우 ntpd에 의해 ntp 서버와 동기화 될때까지 시간이 틀어져 있게 된다.

- ntpdate는 시스템 부팅 때 ntpd 보다 먼저 실행이 되어 ntp 서버와 즉시 동기화를 하므로 어플리케이션 서비스가 구동되기전에 정확한 시간을 보장


설치 및 확인

# yum install ntpdate

# rpm -qa | grep ntpdate


명령어 사용법

# ntpdate time.bora.net
# ntpdate -s 192.168.10.10


옵션

-s : 결과를 화면이 아닌 syslog로 보냄

-u : ntp 프로토콜은 UDP 123 포트를 사용하는데 이 포트가 방화벽등으로 막혀있는 경우 다른 포트를 이용

-b : settimeofday() 시스템 콜로 즉시 시간을 동기화

-B : adjtime() 시스템 콜로 천천히 시간 동기화 (점근적 시간 보정 방식으로 커널 클럭을 조정)

ntpdate의 경우 settimeofday(), adjtime()의 2가지 시스템 콜로 시간을 설정하는데  -b,-B 옵션을 지정하지 않으면
현재 시스템 시간과 128MS 이상으로 차이가 나면 settimeofday()를 이내면 adjtime()을 사용한
부팅할 때는 ntpdate -b로 설정하고 정기적으로 시간을 조정할 때는 옵션없이 ntpdate를 사용하는 것을 권장





rdate 사용하기


rdate : 원격 타임서버로부터 날짜시간 정보를 받아와 보여주거나 설정하는 명령어

clock : 시스템 CMOS 시간을 현재시간으로 재설정하는 명령어 (리눅스에만 존재)


설치 및 확인

# yum install rdate

# rpm -qa | grep rdate


명령어 사용법

# rdate 192.168.10.10

# rdate -p 192.168.10.10


옵션

-4 : IPv4만 사용

-6 : IPv6만 사용

-o NUM : 지정한 포트(NUM)으로 연결

-p : 호스트의 정보만 출력하고 설정은 안함

-s : 설정만 하고 내용은 출력 안함

-u : TCP 대신 UDP 사용

-v : 상세한 정보 출력

-w : 시스템 시간을 CMOS시간으로 변경





ntpq 사용하기


- ntpd가 정상적으로 작동하지는 확인할 수 있다.


명령어 사용법

# ntpq -p



출력 의미



  • reach 값이 377에 도달하면 동기화가 완료 (보통 6~10분 사이에 동기화)





clock 사용하기 


- CMOS의 시간을 변경할 수 있는 명령어 (리눅스만 사용가능)

- CMOS의 시간을 OS 시간으로 설정할 수 있고 반대로 OS 시간을 CMOS 시간으로 설정할 수 있다


명령어 사용법

# clock -w


옵션

-u : CMOS 시간을 국제시간으로 조정

-r : CMOS 시간을 출력

-w : OS 시간으로 CMOS 시간을 설정

-s : CMOS의 시간으로 OS 시간을 조정

-a : CMOS의 시간으로 OS 시간을 조정하고 다시 CMOS에 조정





윤초 (ntp slew)


1) 윤초란?

- 평균 태양시에 맞추기 위해 가끔식 UTC(세계 협정시)의 1초를 수정하는 것 (시스템고장의 원인이 될 수 있다)


2) 예상되는 영향

•    어플리케이션 속도 저하
•    어플리케이션 충돌 및 시동실패
•    Kernel Deadlock
•    윤초 loop 현상
•    CPU 사용 증가


3) 윤초 대응방법


•    커널 버전 확인 -> 각 RHEL 버전별 다음의 커널 버전 이상으로 업데이트를 권고 (이전 커널에 시스템 행 버그가 있음)
- RHEL4 : kernel-2.6.9-89.EL 또는 이후
- RHEL5 : kernel-2.6.18-164.el5 또는 이후
- RHEL6 : kernel-2.6.32-358.el6 또는 이후
- RHEL7 : 기본 커널 대응

•    NTP 또는 PTP를 사용해 시간 동기화하는 환경 -> tzdata 업데이트 (optional)
주의) 단 패키지 업데이트만, /etc/localtime 링크는 절대로 변경하지 않음

1-1) Leap Second 시간 즉시 적용 가능한 경우
- 위에 설명된 커널 버전이 최신인지 확인
- 특별한 작업 불필요
- 개별 3rd-party 솔루션이 Leap Second 예외에 대응할 수 있는지 확인

1-2) Leap Second 적용하지 않고 천천히 1초를 동기화 해야 하는 경우
- 이전 버전의 커널을 사용하고 업데이트가 불가능 한 경우 또는 Leap Second을 즉시 적용하지 않고 천천히 동기화 하고자 하는 경우
- ntptime 초기화 후 slew mode로 재시작 (다음과 같이 -x 옵션 추가)
주의) Slew mode의 경우 시간 Jump가 없는 대신 시간 GAP이 발생한 경우 동기화에 더 오랜 시간이 소요

# service ntpd stop

# ntptime -s 0 -f 0

# cat /etc/sysconfig/ntpd
OPTIONS="-u ntp:ntp -p /var/run/ntpd.pid -g -x"

# service ntpd start

주의) RHEL6의 경우 ntp 패키지를 반드시 ntp-4.2.6p5-3.el6_6 또는 이후 버전으로 업데이트

•    별도의 자체 NTP 서버를 운영해 동기화 하고 있는 환경
- NTP 서버가 공식 상위 Stratum NTP 서버와의 동기화(권장) 되었는지 점검
- 만약 외부와 동기화 되지 않은 자체 RHEL기반 NTP 서버의 경우 Leap Second 인지 불가능,

2015년 7월 1일 09시 00분(KST 기준) 이후 외부와의 시차 1초 발생
- 자체 NTP 서버측 : 필요시 수동으로 NTP 서버 시간 조정으로 동기화
- NTP 클라이언트측 : 1) 대응 방안 적용

•    NTP 또는 PTP를 사용하지 않는 경우

1-1) Leap Second 인지가 꼭 필요한 경우
- 가능하면 6월 이전에 일정을 잡고 tzdata 패키지 업데이트
- https://rhn.redhat.com/errata/RHEA-2015-0141.html
- Timezone 파일 변경

# cp /usr/share/zoneinfo/right/Aisa/Seoul /etc/localtime

- 재부팅으로 시스템에 POSIX Time 적용
주의) 향후 NTP 동기화시 Timezone 원복 필요

1-2) Leap Second 인지 없이 향후 수동 조정 가능한 경우
- tzdata 업데이트는 선택
- 향후 수동 시간 조정
주의) 단 패키지 업데이트시 /etc/localtime 링크는 절대로 변경하지 않음


[Summary]

1. 커널 버전 확인 후 업데이트 (공통사항)

2. NTP서버 구축 환경에 맞게 조치
1) NTP 또는 PTP를 사용해 시간 동기화하는 환경
- tzdata 패키지 업데이트 or slew mode에 -x 옵션 추가 (선택)

2) 별도의 자체 NTP 서버를 운영해 동기화 하고 있는 환경
- 자체 NTP 서버가 윤초 이슈를 해결한 서버일 경우 클라이언트도 동일하게 적용됨
(NTP 서버가 리눅스 서버일경우 '1)' 안을 적용)

3) NTP 또는 PTP를 사용하지 않는 경우
- tzdata 업데이트 


반응형

'Linux' 카테고리의 다른 글

Linux RPM  (0) 2018.08.08
Linux YUM  (0) 2018.08.08
Linux du  (0) 2018.08.08
Linux sort  (0) 2018.08.08
Linux mount and umount(마운트&언마운트)  (2) 2018.08.08

+ Recent posts