서버를 올린 직후 시각이 몇 초 이상 어긋나 있는데 chronyc tracking 을 봐도 좀처럼 맞춰지지 않는다. Kerberos 인증(기본 허용 오차 5분), 분산 스토리지의 리스 판정, 로그 상관 분석처럼 시각 차이에 민감한 구성에서는 이 지연이 그대로 장애가 된다.
chrony 는 시계를 서서히 늦추거나 당겨(slew) 맞추는 것을 기본으로 삼는다. 안전하지만 큰 오차를 좁히는 데 오래 걸린다. 기동 직후에는 건너뛰기(step)를 허용하고 질의 간격을 좁히면 훨씬 빨리 수렴한다.
/etc/chrony.conf(데비안 계열은 /etc/chrony/chrony.conf)에 둘을 확인한다.
# 처음 3번의 갱신까지는 오차가 1초를 넘으면 즉시 건너뛴다
makestep 1.0 3
# 질의 간격을 16초로 고정한다
server ntp1.example.com iburst minpoll 4 maxpoll 4
server ntp2.example.com iburst minpoll 4 maxpoll 4
makestep <임계 초> <횟수> — 앞의 N번 갱신 동안은 오차가 임계를 넘으면 시계를 한 번에 건너뛴다. 대부분의 배포판이 makestep 1.0 3 을 기본으로 넣어 두므로, 값이 있는지만 확인하면 된다. -1 을 주면 횟수 제한 없이 항상 건너뛴다.iburst — 기동 직후 질의를 몰아 보내 첫 수렴을 앞당긴다. 서버 줄마다 붙인다.minpoll · maxpoll — 2의 거듭제곱 지수다. 4 는 16초, 기본값 6/10 은 64초와 1024초다. 둘을 같은 값으로 고정하면 간격이 늘지 않는다.적용한다.
systemctl restart chronyd
설정과 무관하게 한 번 건너뛰게 할 수 있다.
chronyc -a makestep
-a 는 명령 소켓 인증을 뜻한다. root 로 실행한다.
chronyc tracking
chronyc sources -v
sources 의 첫 글자가 ^* 면 현재 동기화 기준이고, ^+ 는 조합에 쓰이는 후보다. ^? 는 도달하지 못한 상태이므로 방화벽(123/udp)과 이름 해석을 본다.
tracking 의 System time 이 시스템 시계와 기준의 차이다. 이 값이 밀리초 단위로 내려오면 수렴한 것이다.
건너뛰기는 시간을 거꾸로 돌릴 수 있다. 이미 돌고 있는 데이터베이스나 분산 시스템에서 시계가 뒤로 점프하면 타임스탬프 역전으로 문제가 생긴다. makestep 의 횟수를 열어 두거나 운영 중인 노드에서 chronyc makestep 을 함부로 거는 것은 피한다. 건너뛰기는 기동 직후에만 쓰는 것이 원칙이다.
간격을 16초로 고정하면 상위 NTP 서버에 그만큼 질의가 많이 간다. 공개 NTP 풀을 직접 바라보는 구성이라면 권장되지 않는다. 사내에 NTP 서버를 두고 그것만 짧은 간격으로 물리는 편이 맞다.