[Linux]NTP 패키지(chrony)를 설치하여 시간 동기화 하기

NTP(Network Time Protocol) 패키지를 설치하여 서버 시간 동기화를 수행하는 목적은 정확하고 일관된 시간을 유지하고 네트워크 상의 다양한 기기와 서버들 간에 시간을 동기화하여 효율적인 작업 및 로깅, 보안 및 데이터 정합성을 보장하는 것입니다.

NTP를 사용하여 서버 시간을 동기화하는 이유와 목적은 다음과 같습니다:

  1. 정확한 시간 유지: 컴퓨터와 네트워크 장치들 간에 정확한 시간을 유지하는 것은 데이터 정합성과 시스템 동작에 필수적입니다. 시간이 정확하지 않으면 로깅이나 타임스탬프 등에서 문제가 발생할 수 있습니다.
  2. 보안 강화: 시스템 로그와 보안 이벤트에 정확한 시간 정보를 유지하면, 보안 사건의 발생 시점을 정확히 파악할 수 있습니다. 시간 정보가 정확하지 않으면 보안 분석과 사건 관리가 어려워집니다.
  3. 분산 시스템 및 클라우드 환경: 클라우드 서비스나 분산 시스템에서는 서로 다른 지역의 서버들이 동작하므로 시간 동기화가 중요합니다. 이를 통해 분산 시스템 내의 여러 서버들이 일관된 시간을 가지게 되어 데이터의 일관성을 유지할 수 있습니다.
  4. 네트워크 트래픽 분석: 네트워크 문제를 분석할 때 시간 동기화가 필요합니다. 네트워크 이벤트가 언제 발생했는지 추적하여 문제의 근본 원인을 찾을 수 있습니다.
  5. 긴급 대응과 복구: 시스템의 장애나 사고가 발생할 경우, 정확한 시간 정보를 가지고 있으면 긴급 상황에서 빠르게 대응하고 복구할 수 있습니다.

ntpdchronyd는 둘 다 리눅스 시스템에서 시간 동기화를 관리하는 데 사용되는 도구입니다. 그러나 이 둘은 몇 가지 차이점을 가지고 있습니다.

  1. ntpd (Network Time Protocol Daemon):
    • ntpd는 오랜 기간 동안 사용된 클래식한 NTP 데몬입니다.
    • 주요 목표는 안정적이고 정확한 시스템 시간을 유지하는 것입니다.
    • 시간 동기화를 위해 작은 보정값을 계속 적용하여 서버의 시계를 조정합니다.
    • 초기 설정이 조금 복잡할 수 있으며, 시스템 부팅 시 시간 동기화가 느릴 수 있습니다.
    • 정확한 시간 유지와 오랜 시간 동작이 중요한 경우에 유용합니다.
  2. chronyd (Chrony Daemon):
    • chronyd는 상대적으로 최근에 개발된 NTP 및 NTPD의 대안으로 등장한 데몬입니다.
    • 더 정확한 시간 동기화와 네트워크 불안정성에 더 잘 대응하기 위해 설계되었습니다.
    • chronyd는 네트워크 지연을 고려한 알고리즘을 사용하여 보다 정확한 시간을 유지합니다.
    • 초기 설정이 더 간단하며, 부팅 후 빠르게 시간 동기화가 이루어집니다.
    • 인터넷 연결이 불안정하거나 네트워크 변동이 빈번한 환경에서 유용합니다.

간단히 말해, ntpd는 안정성과 오랜 시간 동작을 중요시하는 경우에, chronyd는 정확성과 빠른 시간 동기화를 중요시하는 경우에 더 적합한 선택일 수 있습니다. 선택은 사용자의 요구사항과 환경에 따라 달라집니다.

최근에 개발되고 Redhat계열의 표준 NPT 데몬으로 선정된 chronyd를 사용해서 서버 시간 동기화를 설정하는 절차를 알아 보겠습니다.

  1. ntpdchronyd는 동시에 사용할 수 없으므로 ntp 데몬이 설치되어 있다면 ntpd의 서비스를 중지시킵니다. 설치되어 있지 않다면 이번 단계는 건너뜁니다.
    $ systemctl disable --now ntpd.service
    
  2. Redhat 계열의 Linux를 사용하고 있다면 chrony 패키지가 디폴트로 설치되어 있습니다. chrony 데몬의 상태를 확인하고 비활성화(inactive)되어 있다면 활성화시킵니다.
    -- chrony 패키지가 설치되어 있지 않다면 아래 명령어로 설치합니다.
    dnf -y install chrony
    
    -- chronyd의 상태를 확인합니다.
    $ systemctl status chronyd
    chronyd.service - NTP client/server
       Loaded: loaded (/usr/lib/systemd/system/chronyd.service; disabled; vendor preset: enabled)
       Active: inactive (dead)
         Docs: man:chronyd(8)
               man:chrony.conf(5)
    
  3. OS 방화벽(firewalld 데몬)를 사용하고 있다면 NTP 포트(123)가 오픈되어 있는지 확인하고, 오픈되어 있지 않다면 추가로 방화벽 정책에 등록해야 합니다. 다음 blog에서는 firewalld 데몬에 대한 설명과 관련 명령어의 사용법을 참고하세요
    $ firewall-cmd --list-services
    cockpit dhcpv6-client ssh
    $ firewall-cmd --permanent --add-service=ntp
    success
    $ firewall-cmd --reload
    success
    $ firewall-cmd --list-services
    cockpit dhcpv6-client ntp ssh
    
  4. chronyd 데몬의 환경 설정파일을 수정한 후 데몬을 실행합니다.
    $ vi /etc/chrony.conf
    -- 사내 또는 외부 타임 서버를 등록합니다.(저는 LGU+에서 제공하는 타임 서버 사용: time.bora.net)
    server time.bora.net iburst
    
    -- 이거 중요한데요! 운영 중에 chronyd를 설정한다면 시간을 급격히 바꾸지 않고 슬루잉으로 처리하도록 설정합니다.
    #makestep 1.0 3
    leapsecmode slew
    
    -- chronyd 데몬을 실행합니다.
    $ systemctl enable --now chronyd.service
    Created symlink /etc/systemd/system/multi-user.target.wants/chronyd.service /usr/lib/systemd/system/chronyd.service.
    
  5. chronyd 데몬이 엑세스하고 있는 타임서버에 대한 정보 확인
    Stratum : NTP(Network Time Protocol)의 계층을 Stratum이라 하며, 계급 구조의 순환 종속성을 방지하며 원자시계 또는 GPS와 같은 장치인 0단계부터 가장 낮은 15단계의 계층으로 구성된다. Stratum16은 비동기 장치를 의미한다.
    $ chronyc sources -v
    
      .-- Source mode  '^' = server, '=' = peer, '#' = local clock.
     / .- Source state '*' = current best, '+' = combined, '-' = not combined,
    | /             'x' = may be in error, '~' = too variable, '?' = unusable.
    ||                                                 .- 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               
    ===============================================================================
    ^* time.bora.net                 3   6   300   410   +701us[+3710us] +/-  179ms
    
  6. 시스템 타임과 그 설정값을 조회
    RTC를 Local Time Zone으로 설정하는 방법에 대해서도 알아보겠습니다.
    $ timedatectl
                   Local time: Mon 2023-08-14 20:14:50 KST
               Universal time: Mon 2023-08-14 11:14:50 UTC
                     RTC time: Mon 2023-08-14 11:14:49
                    Time zone: Asia/Seoul (KST, +0900)
    System clock synchronized: yes
                  NTP service: active
              RTC in local TZ: no
    

You may also like...

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다