윤초에 대해서는 2012년에 요란을 떨 정도로 큰 장애(LinkedIn, Reddit 등의 Java로 운영을 하는 시스템들의 장애)가 있었습니다.
가장 마지막 윤초는 2015년 6월 30일에 있었으며, 2012년 사건 이후로 OS level과 time server들이 잘 대응을 해서 별 문제 없이 넘어간 듯 싶습니다.
그리고, 2016년 12월 31일에 또 윤초가 추가되게 됩니다.
여기서 논할 것은, 2012년의 문제가 잘 해결이 되어 있더라도, 또 다른 버그로 인하여 이 문제가 발생하는 것을 원천적으로 제거하는 방법에 대해서 논합니다. 물론 이론적인 것들은 인터넷 상에서 잘 논한것들이 있으니 여기서 다루지는 않습니다. 여기서는 이 이론들을 실무에 어떻게 적용을 하느냐 입니다.
윤초에 영향을 받는 서비스가 없거나 윤초 따윈 안중에 없어.. 하시는 분들은 사뿐이 브라우져를 즈려 밟으시고 무시하시면 되겠습니다.
2012년 사태 이후로, Google에서 1초를 그냥 확 추가하는 것이 아니라 대략 20여시간에 걸쳐서 1초를 추가하는 Leap Smear 를 적용한 public NTP를 제공 합니다.
이 글에서는 Leaf Smear를 NTP와 chrony에 어떻게 적용을 해서 운영을 할 수 있는지에 대하여 기술 합니다.
일단, 별도로 Time server를 운영하지 않는다면, Goolge Public NTP를 사용하는 것을 고려하십시오. (물론 난 윤초랑 관련이 없어 하시는 분들은 그냥 사뿐이 무시 하시면 됩니다.)
제가 ubuntu machine의 경우에는 다양한 버전이 없어서, CentOS/RHEL 을 기준으로 설명 합니다.
- CentOS / RHEL 4 or 5
CetnOS 5 이하처럼EOL이 종료된 배포본의 경우에는 문제를 해결할 수 있는 방법은 Goolge Public NTP 처럼 leap smear를 제공하는 time server를 이용하여 시간 동기화를 하는 방법 밖에는 없습니다.
. - time server에 시간 동기화를 하지 않는 경우
time 동기화를 하지 않는 경우에는, tzdata package를 최신으로 갱신해 주어야 합니다. yum을 이용하여 tzdata 를 최신 상태로 업데이트를 하는 것으로 해결이 됩니다.
. - ntp 또는 chrony를 이용하여 외부 time 서버에 동기화 하는 방법
- Goolge Public NTP로 동기화 대상을 변경
- 또는 leap smear를 제공하는 time server로 동기화 대상 변경.
- 또는 아래의 방법(4,5번)을 이용하여 ntpd 또는 chrony로 time server를 구성하여 동기화.
- 또는 각 서버에 4,5번의 설정을 반영
. - ntpd를 이용하여 time server 운영 시
ntpd를 구동할 때 command line option으로 -x 옵션을 주어 구동을 합니다. RHEL 6.6 이하의 ntp에서는 ***-x*** 옵션이 정상적으로 동작하지 않는 버그가 있습니다. NTP를 최신으로 업데이트 해 주십시오.[root@host ~]$ yum update ntp
[root@host ~]$ service ntpd stop
[root@host ~]$ ntptime -s 0 -f 0
[root@host ~]$ # ntpd의 OPTIONS 변수에 -x 를 추가해 줍니다.
[root@host ~]$ cat /etc/sysconfig/ntpd
# Drop root to id 'ntp:ntp' by default.
OPTIONS="-x -u ntp:ntp -p /var/run/ntpd.pid -g"
[root@host ~]$ service ntpd restart - chronyd를 이용하여 time server 운영 시
chorny를 최신 버전으로 업데이트 합니다. 다음 옵션은 chrony >= 2.0 의 조건에서 사용이 가능 합니다. RHEL 7.0 에는 chrony 1.3이 포함이 되어 있습니다. yum 으로 chrony를 최신으로 업데이트 해 주십시오. 업데이트 이후, 다음의 설정을 chrony.conf에 추가 한 다음, chrony를 재시작 합니다.# slew mode for leap second
leapsecmode slew
maxslewrate 1000
smoothtime 400 0.001 leaponly
Reference: