우분투(Ubuntu) 시간 동기화 설정- Chrony

Last Updated on 2월 5, 2021 by 태랑(정현호)


[시작전에] AWS 클라우드 프리티어 가입 생성 부터 , Nginx PHP MariaDB 스택구성 , WordPress 구성까지 이어지는 연재글의 중간글 입니다.

다음 글의 링크는 하단에 있습니다.


연재 이전 글
AWS EC2 생성

Ubuntu 18.04 서버 초기 설정 내역 정리



새롭게 구현된 시간 동기화


chrony 는 새롭게 구현된 시간동기화 이고 기존의 ntpd 를 대체 합니다.


간헐적인 네트워크 연결 (예 : 랩톱)  및 혼잡 한 네트워크와 같은 어려운 조건에서도 시간이 동기화 되도록 설계 되었습니다.
ntpd와는 달리 하드웨어 타임 스탬프를 통해 시스템 시계 동기화를 지원하여 LAN에 있는 시스템 간의 시간 동기화 정확도를 향상 시킵니다
- wikipedia 참조

Chrony는 RHEL7 에 부터 나온 출시된 새로운 시간동기화 데몬 입니다
우분투에서도 사용 할 수 있으며 많은 리눅스에서 기본 동기화 데몬으로 변경 되는 추세 입니다.



Chrony 설치 및 설정


= 설치
ubuntu$ sudo apt install chrony



= 서버 및 Pool 설정(변경)
서버 및 pool 에 대한 설정은 /etc/chrony/chrony.conf 을 설정 하면 됩니다.
AWS 에서는 리전내 시간동기화 서버 서비스를 제공 하고 있어 이용할 수 있습니다
꼭 해당 서버를 써야 하는(필수)는 아니지만 제공 되고 있고 같은 센터 내에서 서비스를 받을 수 있기 때문에 설정 해보도록 하겠습니다.

* AWS가 아닌 다른 환경은 바로 아래 쪽에 내용이 있습니다.


ubuntu$ sudo vi /etc/chrony/chrony.conf

[원본(기존) 내용]

# About using servers from the NTP Pool Project in general see (LP: #104525).
# Approved by Ubuntu Technical Board on 2011-02-08.
# See http://www.pool.ntp.org/join.html for more information.
pool ntp.ubuntu.com iburst maxsources 4
pool 0.ubuntu.pool.ntp.org iburst maxsources 1
pool 1.ubuntu.pool.ntp.org iburst maxsources 1
pool 2.ubuntu.pool.ntp.org iburst maxsources 2


[서버 추가]
# About using servers from the NTP Pool Project in general see (LP: #104525).
# Approved by Ubuntu Technical Board on 2011-02-08.
# See http://www.pool.ntp.org/join.html for more information.
server 169.254.169.123 prefer iburst minpoll 4 maxpoll 4
   <---------

pool ntp.ubuntu.com iburst maxsources 4
pool 0.ubuntu.pool.ntp.org iburst maxsources 1
pool 1.ubuntu.pool.ntp.org iburst maxsources 1
pool 2.ubuntu.pool.ntp.org iburst maxsources 2




= 서비스 활성화 및 데몬 재시작
ubuntu$ sudo systemctl enable chrony
ubuntu$ sudo systemctl restart chrony


= 상태 확인
ubuntu$ sudo chronyc sources -v

ubuntu$ chronyc sources -v

210 Number of sources = 9

.-- Source mode '^' = server, '=' = peer, '#' = local clock.

/ .- Source state '*' = current synced, '+' = combined , '-' = not combined,
| / '?' = unreachable, 'x' = time may be in error, '~' = time too variable.
|| .- xxxx [ yyyy ] +/- zzzz
|| Reachability register (octal) -. | xxxx = adjusted offset,
|| Log2(Polling interval) --. | | yyyy = measured offset,
|| \ | | zzzz = estimated error.
|| | | \
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^* 169.254.169.123 3 4 17 4 -401ns[+1987ns] +/- 509us
^- pugot.canonical.com 2 6 13 2 +17ms[ +17ms] +/- 172ms
^- alphyn.canonical.com 2 6 17 3 -367us[ -367us] +/- 149ms
^- golem.canonical.com 2 6 17 1 +546us[ +546us] +/- 159ms
^- chilipepper.canonical.com 2 6 17 1 +2372us[+2372us] +/- 142ms
<중략>

설정한 IP 169.254.169.123 에서 시간동기화가 이루어지고 있는걸 확인 할 수 있습니다.


추가적으로 chronyc tracking 와 timedatectl 통해 추가적인 내용을 확이 할 수 있습니다.

ubuntu$ sudo chronyc tracking

Reference ID : A9FEA97B (169.254.169.123)
Stratum : 4
Ref time (UTC) : Tue Oct 20 14:24:54 2020
System time : 0.000033780 seconds fast of NTP time
Last offset : +0.000091065 seconds
RMS offset : 0.000091065 seconds
Frequency : 10.049 ppm fast
Residual freq : +4.960 ppm
Skew : 8.921 ppm
Root delay : 0.001217723 seconds
Root dispersion : 0.000381964 seconds
Update interval : 16.1 seconds
Leap status : Normal


ubuntu$ sudo timedatectl
Local time: Tue 2020-10-20 23:25:13 KST
Universal time: Tue 2020-10-20 14:25:13 UTC
RTC time: Tue 2020-10-20 14:25:14
Time zone: Asia/Seoul (KST, +0900)
System clock synchronized: yes
systemd-timesyncd.service active: yes
RTC in local TZ: no



다른 클라우드나 On Premise 환경에서는 아래와 같이 설정 하시면 됩니다
* 설치는 동일 합니다.

ubuntu$ sudo vi /etc/chrony/chrony.conf

pool 1.kr.pool.ntp.org iburst minpoll 4 maxpoll 4
pool 1.asia.pool.ntp.org iburst minpoll 4 maxpoll 4
pool 2.asia.pool.ntp.org iburst minpoll 4 maxpoll 4
pool time.google.com iburst minpoll 4 maxpoll 4
server time.bora.net iburst


= 파일 설정 저장 후 데몬 재시작
ubuntu$ sudo systemctl restart chrony


= 동기화 정보 확인
ubuntu$ chronyc sources -v
210 Number of sources = 19

.-- Source mode '^' = server, '=' = peer, '#' = local clock.
/ .- Source state '*' = current synced, '+' = combined , '-' = not combined,
| / '?' = unreachable, 'x' = time may be in error, '~' = time too variable.
|| .- xxxx [ yyyy ] +/- zzzz
|| Reachability register (octal) -. | xxxx = adjusted offset,
|| Log2(Polling interval) --. | | yyyy = measured offset,
|| \ | | zzzz = estimated error.
|| | | \
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^? smtp8.duckfine.co.kr 3 4 7 1 +256us[ +256us] +/- 21ms
^? 193.123.243.2 2 4 7 0 -403us[ -403us] +/- 49ms
^? 62.201.225.9 2 4 3 3 -5319us[-5319us] +/- 205ms
^? ntp.kku.ac.th 1 4 7 3 +29us[ +29us] +/- 61ms
^? vps-9ee2ad88.vps.ovh.ca 2 4 3 3 -11ms[ -11ms] +/- 78ms
^? vps-22c7558f.vps.ovh.ca 2 4 3 3 -11ms[ -11ms] +/- 79ms
^? time.cloudflare.com 3 4 3 4 +3019us[+3019us] +/- 72ms
^? 202.118.1.130 0 4 0 - +0ns[ +0ns] +/- 0ns
^? 120.25.115.20 2 4 1 6 -2121us[-2121us] +/- 51ms
^? x.ns.gin.ntt.net 2 4 7 1 +1151us[+1151us] +/- 88ms
^? clock.kku.ac.th 0 4 0 - +0ns[ +0ns] +/- 0ns
^? 2001:470:19:301::124 0 4 0 - +0ns[ +0ns] +/- 0ns
^? t1.time.sg3.yahoo.com 0 4 0 - +0ns[ +0ns] +/- 0ns
^? 2001:3c8:1501:65::1501:11 0 4 0 - +0ns[ +0ns] +/- 0ns
^? time2.google.com 1 4 3 2 +72us[ +72us] +/- 33ms
<중략>



# 시간 동기화 즉시 실행(즉시 동기화)
rdate -s 나 ntpdate -u 등과 같이 수동으로 즉시 시간을 동기화 하고자 할때는 아래의 명령어를 사용하면 됩니다.
ubuntu$ sudo chronyc -a makestep
200 OK



다음 이어지는 글 : 우분투+Nginx + PHP+FPM +MariaDB LEMP 1 - 스택 설치 및 구성