본문 바로가기

Skills/System

The Leap second

하도 짜증나서 쓰는 글이다.


SR 로 매번 열리는 것도 한계가 있고, 그런 반복되는 SR 따윈 하고싶지 않기에,


글로벌 굴지의 S 모그룹사에서 무한대로 쓰잘대기없이 파고드는 질문만 하는거


답변하기도 귀찮아서 글을 작성..


뭐 있든지 없든지 모르겠지만 일단 검색해도 잘 모르겠으니까 다들 물어보는거 아닐까?


Leap second ( 윤초 ) 라는 것은 일단 모든 시계는 사실상 아주 정확하게 기록되지 않는 다는 것을 기본 전제로,


원자시계와 현실시계가 1초이상 차이가 나게 될 경우, 그 1초를 더하거나 빼주어 보정하는 것을 의미한다.


올해 즉 2015년 6월 30일 (우리나라는 7월 1일) 에 발생하며, 양의 윤초다.


양의윤초는 뭥미? 에 대해서는 아래 나온다.


윤초시의 시간보정은 양의 윤초(+), 음의 윤초로(-) 나뉘어 지며 아래와 같다.


<양의윤초>

08:59:59.00201

08:59:59.20329

08:59.59.58291

08:59:59.89201

08:59:60.20392            <<<<< 60 초 라는 가상의 초가 삽입된다.

08:59.60.74829             <<<<<

09:00:00 


<음의윤초>

08:59:59.00201

08:59:59.20329

08:59.59.58291

08:59:59.89201

08:59:59.10392            <<<<< 59 초 가 다시 반복된다.

08:59.59.74829             <<<<<

09:00:00 


올해의 시간보정은 양의윤초의 타임테이블을 따르며, 시스템은 저렇게 시간을 표시하게 된다.


그럼 이 윤초는 단순한 시간보정인데 뭐가 이렇게 난리이냐?


이 윤초 적용을 통해 시간테이블이 늘어나면서 (쉽게 설명하자면) 커널 및 어플리케이션 일부의 Timer가


오동작하는 것이 실제 문제이다. 즉 Leap second effect 라고 하며, 두가지로 나뉠 수 있다.


바로 스템 전체에 가져오는 문제와 어플리케이션끼리의 시간동기화 실패 문제이다.


1. 커널의 경우 Jitters 라는 커널 timer 가 값을 잘못 갖게 되면서


Panic 또는 Rebooting 을 발생시킬 수 있다.


아래는 윤초 보정이 대비되지 않아 커널 Freezing 등을 발생시킬 수 있는 커널을 나열하였다 :

RHEL4/OL4 : 2.6.9-89 이전

RHEL5/OL5 : 2.6.18-164 이전

RHEL6/OL6 : 2.6.32-279.5.2 이전


즉 자신의 시스템이 해당되는 커널 보다 낮은 버젼을 사용하고 있다면,


100% 확률로 윤초 보정으로 인한 Freeze 또는 리부팅이 발생할 수 있다는 것이다.


이 사태를 해결하기 위해서는 각 플랫폼(OS version) 별로,


기술된 커널 버젼 이상의 버젼으로  업그레이드 해야 한다.


2. 두번째 문제인 어플리케이션의 시간이 동일하게 동작해야만 하는 서비스 차원의 문제이다.


이런 경우 NTP daemon 을 통해 우리는 시스템의 시간을 동기화 하고 있다.


다만 이 NTP 의 시간동기화 방식에는 절대적인 값을 그대로 Counting 하는 방법과,


NTP server 가 되는 동기화 대상 서버의 Timer 와의 시간을 1000 (또는 500) PPM 범위 안에서


Offset 기반으로 유지시켜 동기화를 시키는 방법인데,


Leap second 의 해결을 위해서는 Offset 기반으로 하는 SLEW 모드를 사용하여 NTP 를 동작시켜야 한다.


방법은 다음과 같다 (RHEL/OL 기준):


# vi /etc/sysconfig/ntpd

OPTIONS="-x -u ntp:ntp -p /var/run/ntpd.pid"         <<<  -x option 추가.

# service ntpd restart


간단하게 이렇게 Slew 모드를 사용해 동작시키면 윤초 보정에 대한 걱정을 하지 않아도 된다.


하지만 RHEL6/OL6 의  ntp-4.2.6p5-1, ntp-4.2.6p5-2 버전을 사용시에는


Slew mode 로 동작하지 않는 버그가 있으므로, 그 이상의 NTP package 로 업데이트가 필요하다.


3. NTP 를 사용하지 않는 서버들의 경우에는 TZdata 라는 Timezone data 테이블을 업데이트 해주면 된다.


tzdata 라는 패키지를 통해 우리는 다른 모든 국가의 나라들을 쉽게 알 수 있고, 설정할 수 있다.


leapsecond 보정이 반영된 tzdata 의 버젼은 아래와 같다 :

tzdata-2015a-1


정리하자면, Leap second 보정으로 인해 발생할 수 있는 문제는 두가지로써,


커널의 Panic, Rebooting 과 어플리케이션들의 시간이 동기화되지 않는 문제이다.


1. 커널의 경우는 아래 조건들 이상의 커널로 업데이트가 필요하다 :

RHEL4/OL4 : 2.6.9-89 이상

RHEL5/OL5 : 2.6.18-164 이상

RHEL6/OL6 : 2.6.32-279.5.2 이상


2. NTP 를 사용하는 시스템의 경우 Slew mode 로 수행해야 하며,


ntpd daemon 을 -x 옵션과 함께 실행하면 해결된다.


다만 RHEL/OL 6 버젼에서 제공되는 ntp-4.2.6p5-1, ntp-4.2.6p5-2 이 두 버젼에서는


Slew mode 가 동작하지 않는 버그가 있으니 그 이상의 NTP 패키지로 업그레이드 한다.


3. NTP 를 사용하지 않는 시스템의 경우, tzdatatzdata-2015a-1 이 후로 업그레이드 한다.


참고로 다음 표를 살펴 시스템에 대조해 보면 Leap seccond issue 에 Affected 된 시스템인지 쉽게 알 수 있다.


 

 Kernel

 NTP 사용

 NTP 사용 안함

 RHEL/OL 4

 2,6,9-89 이하

-x 옵션 없음

 tzdata-2015a-1 이하

 RHEL/OL 5

 2.6.18-164 이하

-x 옵션 없음

 tzdata-2015a-1 이하

 RHEL/OL 6

 2.6.32-279.5.2 이하

ntp-4.2.6p5-1

ntp-4.2.6p5-2

 tzdata-2015a-1 이하

 RHEL/OL 7

 해당없음

-x 옵션 없음

 tzdata-2015a-1 이하

 UEK 사용시

 해당없음

-x 옵션 없음

 tzdata-2015a-1 이하