서버 시간 동기화: 제발 21세기엔 rdate 쓰지 말자

한줄 요약: 시간 동기화는 간단하지 않다.

최소한 NTP 프로토콜 사용

이 글을 쓰는 이유는… 2020년 12월 현 시점에서 rdate(와 cron)로 시간 동기화 하겠다는 충격적인 블로그 글을 봐서…

결론부터 말하면 NTP 프로토콜 지원하는 프로그램으로 동기화 하자.

시간 보정 방법

step: 즉시 시간 보정

slew: 시계 회전 속도를 조절하여 시간 보정. 단조증가 시계 Monotonic clock.

시간 동기화 프로토콜 종류

Time Server udp/37 rdate 등이 사용하는 시간 서비스. 정확하지도 않고 개인 시스템이더라도 쓰지 말자…

NTP udp/123 시간 동기화 표준 프로토콜, 윈도, 리눅스 동일

SNTP udp/123 NTP의 서브셋, NTP와 동일 포트 사용. 1-50ms 정도의 정확도

PTP Precision Time Protocol, NTP보다 더 정밀한 프로토콜. chrony 에서 미지원, 지원 계획 없음. 참고#1, 참고#2

  • 과학, 금융 수준에서 사용… 커널과 하드웨어가 지원되어야 사용 가능.

NTS Network Time Security for the Network Time Protocol. chrony 4.0 부터 지원.

시간동기화 프로그램

rdate udp/37 사용, xinetd 등에서 사용하는 단순 시간 변경 툴. 쓰면 안된다. step 방식으로만 보정하기 때문.
systemd-timesyncd systemd에서 사용하는 시간 동기화 데몬. SNTP 구현체인데 구현이 약간 다름. 오차 100 ms 정도 된다고.

ntpd NTP 구현체 CentOS 6까지 기본 시간 동기화 데몬.
chrony ntpd보다 개선된 구현체. 보안면에서 가장 좋다는 평가. CentOS 7부터 기본 시간 동기화 데몬. NTP 구현체 비교
w32tm 윈도 시간동기화 툴. Windows Server 메뉴얼을 보면 알겠지만… 정확도가 2016에서야 좋아졌다(아래 이미지 참조)

rdate와 ntp(chrony)의 차이점

  • rdate 실행 시 서버쪽 시간을 바로 적용. 시간 서버 – 클라이언트 60초의 오차가 있을 때 60초를 즉시 건너 뛴다.
    그래서 시간이 빠른 장비의 시간 보정을 rdate로 하면 (장비 관점에서)시간이 과거로 돌아가는 문제가 있음 -> DB의 경우 과거 시간으로 데이터가 쌓이면 DB 테이블이 깨질 수 있음.
  • ntpd(chrony)는 오차 시간을 빠르게 혹은 느리게 시간을 돌려서 맞춰(slewing) rdate와 같은 문제 발생하지 않음.
    • 시간 오차가 너무 클 때는 NTP 구현체도 step 방식으로 시간 보정.

시간

1초. 1초의 정의가 지속적으로 바뀌었음. https://ko.wikipedia.org/wiki/%EC%B4%88_(%EC%8B%9C%EA%B0%84)#cite_note-1

  • 지구 자전(하루)에 의한 평균 태양일의 1/86,400 으로 정의
    • 지구의 자전이 불규칙함. 계속 느려지고 있으며, 큰 지진에도 영향 받아 정확도 보장이 안됨.
      • 2021-01-09 지구 자전이 빨라져서 역윤초(음의 윤초) 적용 검토 필요할 수 있다는 뉴스.
      • 지구 온난화로 빙하가 녹아 지구 질량 재분배가 발생한게 아닐까 하는 연구결과가 2015년 경에 있었음.
  • 1956년, 1900년 1월 0일 12시 기준 태양년의 1/31556925.9747, 자전에서 공전으로 기준 변경
  • 1967년, 원자 시계 발명 되어 세슘-133 원자의 1초간 진동 수 (보조적으로 루비듐 원자)

그 외 시간 관련해 알면 좋은 것

  • 2020년 현재까지 가장 정밀한 시간(초) 측정 장치는 ‘광격자 시계(or 광시계)’.
    • 가장 정밀하지만 아직 표준 시간 기준으로 채택되어 사용 중은 아닌 듯.
  • 고도에 따라 시간이 다르게 흐름(중력 영향 차이 발생하기 때문)
  • 윤초(Leap second): 원자시계와 태양시간의 오차 보정하기 위함
  • UTC 세계 협정시, KST는 UTC +9h
  • epoch

IT 인프라의 시간 동기화

인증 시스템이나 클러스터에서 모든 기준은 시간이 되기 때문에 각 시스템간 시간 차이가 발생하면 신뢰할 기준이 없어지는 상황이 된다. 그렇다면 시간 오차를 모든 단위에서 ‘0’로 할 수 있는가?

시간 오차 제로: 매우 어렵다… 물리적으로 불가능. NTP 가 실제 네트워크에서 잘 동작한다고 보장할 수 있는 사람/단체는 아무도 없음. 다만 같은 서비스 그룹끼리 비슷한 시간 유지하여 서비스 데몬에서 로그가 뒤섞이지 않는 정밀도를 목표로 해야. NTP 프로토콜은 어디까지나 네 가지 시간을 조합, 추정하여 오차 보정하여 적용하는 것이지 오차를 ‘0’으로 해주는 프로토콜이 아니다.

메인보드와 OS시간: 메인보드가 UTC를 쓰는가, KST를 쓰는가? 보드에서 이미 KST를 쓰는데 OS에서 추가로 +9 하는 경우가 있음.

Linux 에서 윤초 해결: Timezone 패키지(tzdata) 수시로 업데이트 해야함.

chrony 의 원격지 chrony 관리: authhash 명령 실행해보면 ‘Authentication is no longer supported in the command protocol.’ 라고 뜨는데, chrony 2.2 에서 보안 문제로 제거된 기능이라고… CentOS 6 에 설치되는 chrony 는 2.1이라 사용 가능하지만 CentOS 7만 돼도 버전이 더 높아서 원격지 chrony 관리는 못함.


관련링크

https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/system_administrators_guide/ch-configuring_ntp_using_the_chrony_suite#sect-Using_chrony
https://ubuntu.com/server/docs/network-ntp
http://time.ewha.or.kr/

“서버 시간 동기화: 제발 21세기엔 rdate 쓰지 말자”의 한가지 생각

답글 남기기

이메일 주소는 공개되지 않습니다.

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.