Chrony 동기화 안됨 - Chrony dong-gihwa andoem

- 현상 : No-sql 서비스 ntp sync 에러 발생
+ exec /opt/cloudera/parcels/KUDU-1.2.0-1.cdh5.10.0.p0.55/lib/kudu/sbin/kudu-tserver --tserver_master_addrs=bdamng.samsungfire.com --flagfile=/run/cloudera-scm-agent/process/7697-kudu-KUDU_TSERVER/gflagfile
F0412 11:14:54.594899  5843 tablet_server_main.cc:64] Check failed: _s.ok() Bad status: Service unavailable: Cannot initialize clock: Error reading clock. Clock considered unsynchronized


- 상태 : RHEL7 버전에서는 ntp, chrony를 선택하여 시간동기화를 할수 있으며 ntp를 사용할 경우에는 chrony서비스를 비활성화
         즉, 둘 중 1가지만 사용하는것을 권장. 

 - 해결 : 문제가 되는 kudu 라는 NoSQL 컴포넌트 서비스 엔지니어 확인결과
         #timedatectl 결과의 NTP synchronized =yes 값을 참조한다는 답변에따라
         chronyd 서비스를 내리고 ntp서비스를 사용해봄.
        며칠 모니터링 해보았으나 ntp 데몬을 사용 시 똑같이 sync 이슈가 재발하여
         ntp 서비스 대신 chrony 서비스를 사용하기로 채택.

                  1. ntp 서비스를 stop
         2. reboot 후에도 켜지지않도록 비활성화(deactive)처리
         3. systemctl list-unit-files | grep ntp 를 통해서 확인
         4. vi /etc/chrony.conf 에 true옵션 제외

 기존에  /etc/ntp.conf 에 true옵션이 적용되어있었으나
"true 옵션은 두개의 NTP 서버만 있을 경우 두 서버의 시간이 불일치할 우에 시간 동기화에
실패되는것을 방지하기 위하여 추가하는 옵션으로 현재 4개의 NTP 서버가 설정되어 있는
환경에서는 필요하지 않으십니다."
라는 redhat 측의 답변에 따라  #vi /etc/chronyd.conf 아래에 true옵션을 제외하여 적용
 
         5. systemctl restart chronyd.service 로 chrnoyd 서비스 재기동
         6. systemctl list-unit-files | grep chronyd 를 통해서 상태확인
         7. timedatectl 값 확인

           (처음엔 NTP enabled만 yes 이지만, sync 가 완전히 되기 전이므로, synchronized 가 yes가 되기까지 약 5분정도 소요됨)
      
- 참고 : timedatectl 값은 설정변경 시 바로 적용이되지 않으니
         sync 확인은 #timedatectl 값이 아니라 #chronyc sources 로 확인하여야 합니다.
         즉 chrony 서비스를 사용하면 ntpq -p 의 커맨드론 확인하실수 없습니다.

시스템 시간 동기화는 간단하지만 중요한 부분입니다. 대부분의 시스템은 시스템에서 발생하는 이벤트 또는 로그를 시간과 함께 기록해 놓습니다. 이렇게 하는 이유는 해당 시간에 발생한 문제의 원인을 파악하여 조치를 하기 위함입니다. 만약 시간 동기화가 안된 시스템의 경우 기록되는 시간 차이를 매번 계산해서 파악해야하는 단점이 생깁니다. 또한 예약된 작업 또는 배치잡을 원하는 시간에 정확하게 실행하기 위해서는 시스템 시간 동기화는 필수 입니다. 마지막으로 시스템간 통신시 시간이 맞지 않으면 수많은 오류가 발생될 가능성이 높습니다.

CentOS 8에서의 시간 동기화는 chrony를 이용한 시간 동기화를 진행합니다. 예전에는 rdate로 진행하였지만, CentOS 8 에서는 기본 시간 동기화 프로그램을 chrony를 사용하게 되었습니다. 시스템 운영의 기본이라 할 수 있는 시간 동기화 방법에 대해 설명드리니 꼭 알고 계셨으면 합니다.

Contents | 시스템 시간 동기화

Ⅰ. chrony 소개

Ⅱ. chrony 사용법

▷ 시간 동기화 원리

 → NTP (Network Time Protocol)는 인터넷을 통한 시스템간 시간 동기화하는데 사용되는 프로토콜 입니다.

 → 이 프로토콜을 이용하여, 만든 시간 동기화 프로그램 중 하나가 chrony 입니다.

▷ chrony | Redhat 계열 리눅스 기본 시간 동기화 프로그램

 → chrony는 Redhat Enterprise Linux 8 부터 기본 시간 동기화 프로그램으로 채택되었고,

 → CentOS 8 역시 Redhat 계열의 무료 리눅스 배포판으로 chrony를 기본 시간 동기화 프로그램으로 사용하고 있습니다.

▷ chrony 는 기본 설치가 되어 있어 CentOS 8 에서 별도 설치를 하지 않고 사용이 가능합니다.

2. chrony 사용법

▷ chrony 사용법은 아래와 같이 3단계로 진행 됩니다.

    → 설정 파일에 해당 지역의 NTP 서버 등록

     chrony 서비스 재시작

     시간 동기화 적용 확인, NTP 서버 동작 확인

chrony 사용 예시

# chrony 설치 확인
[root@localhost ~]# rpm -qa | grep chrony
chrony-3.5-1.el8.x86_64


# chrony 서비스 확인
[root@localhost ~]# systemctl status chronyd
● chronyd.service - NTP client/server
# Use public servers from the pool.ntp.org project.
   Loaded: loaded (/usr/lib/systemd/system/chronyd.service; enabled; vendor pre>
   Active: active (running) since Fri 2020-10-16 10:18:10 KST; 12min ago


# 설정 파일에서 타임존(zone) 추가 후 저장
[root@localhost ~]# vi /etc/chrony.conf
# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
pool 2.centos.pool.ntp.org iburst

server time.bora.net iburst
server send.mx.cdnetworks.com iburst

# Record the rate at which the system clock gains/losses time.
driftfile /var/lib/chrony/drift
...


# 설정 변경 적용을 위해 chronyd 재시작
[root@localhost ~]# systemctl restart chronyd


# 시간 동기화 확인
[root@localhost ~]# timedatectl
               Local time: Fri 2020-10-16 10:33:48 KST
           Universal time: Fri 2020-10-16 01:33:48 UTC
                 RTC time: Fri 2020-10-16 01:33:46
                Time zone: Asia/Seoul (KST, +0900)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no


# NTP 서버 동작 확인
[root@localhost ~]# chronyc sources -v
210 Number of sources = 7

  .-- 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
===============================================================================
^- send.mx.cdnetworks.com        2   6    77     1   -180us[ -180us] +/-   45ms
^* ec2-13-209-84-50.ap-nort>     2   6    77     2   +244us[+3447us] +/- 4434us
^- ntp.wdc1.us.leaseweb.net      2   6    37    47    +12ms[  +15ms] +/-  224ms
^? 2001:470:19:301::124          0   6     0     -     +0ns[   +0ns] +/-    0ns
^? 2400:6180:0:d1::745:6001      0   6     0     -     +0ns[   +0ns] +/-    0ns
^? vps-2d3ddab6.vps.ovh.ca       0   6     0     -     +0ns[   +0ns] +/-    0ns
^- time.bora.net                 3   6    77     1  +1430us[+1430us] +/-   25ms

▽ 같이 보면 더 좋은 블로그 글 

[CentOS 8] 작업 예약 스케줄러 (cron, at)

리눅스 시스템 작업 진행시 배치잡 또는 예약된 작업을 스케줄로 관리가 필요한 상황(백업, 정기적인 작업)이 있습니다. 이때 cron과 at을 이용하여 예약된 작업을 등록하고 실행을 하게 됩니다. �

mpjamong.tistory.com

Chrony 동기화 안됨 - Chrony dong-gihwa andoem

[CentOS 8] 리눅스 기본 명령어

이번 포스팅에서는 리눅스에서 가장 많이 사용하는 기본 명령어에 대해 소개하고자 합니다. 리눅스는 윈도우즈와 달리 그래픽 환경 보다는 CLI (Command Line Interface) 환경에서 시스템 작업 하는 방�

mpjamong.tistory.com

Chrony 동기화 안됨 - Chrony dong-gihwa andoem