뭘 이런걸..

Posted
Filed under Tech/안녕리눅스
2016년 12월 31일 24:00 에 윤초가 추가될 예정입니다. (UTC 기준이니 우리나라 기준으로는 2017년 1월 1일 9시가 8시 59분 60초가 되겠네요.)

윤초에 대해서는 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 을 기준으로 설명 합니다.

  1. CentOS / RHEL 4 or 5
    CetnOS 5 이하처럼 EOL이 종료된 배포본의 경우에는 문제를 해결할 수 있는 방법은 Goolge Public NTP 처럼 leap smear를 제공하는 time server를 이용하여 시간 동기화를 하는 방법 밖에는 없습니다.
    .
  2. time server에 시간 동기화를 하지 않는 경우
    time 동기화를 하지 않는 경우에는, tzdata package를 최신으로 갱신해 주어야 합니다. yum을 이용하여 tzdata 를 최신 상태로 업데이트를 하는 것으로 해결이 됩니다.
    .
  3. ntp 또는 chrony를 이용하여 외부 time 서버에 동기화 하는 방법
    1. Goolge Public NTP로 동기화 대상을 변경
    2. 또는 leap smear를 제공하는 time server로 동기화 대상 변경.
    3. 또는 아래의 방법(4,5번)을 이용하여 ntpd 또는 chrony로 time server를 구성하여 동기화.
    4. 또는 각 서버에 4,5번의 설정을 반영
      .
  4. 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
  5. 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:
  1. https://srad.jp/~marusa/journal/608570/
  2. https://srad.jp/~marusa/journal/593599/
  3. http://www.criticalworld.co.kr/?p=281
2016/12/28 23:41 2016/12/28 23:41