시간 동기화는 서버의 정확한 시간 유지에 필수적인 요소입니다. 특히 분산 환경에서 여러 서버가 일관된 시간을 유지하는 것은 데이터의 일관성과 정확성을 보장하는 데 중요합니다. 이번 포스트에서는 Chrony를 사용하여 Red Hat Enterprise Linux (RHEL)에서 시간 동기화를 설정하고 관리하는 방법을 소개합니다. Chrony는 경량의 NTP(Network Time Protocol) 클라이언트 및 서버로, 네트워크 상태에 맞춰 시간을 동기화하는 데 매우 효율적입니다.

Chrony 설치

RHEL에는 기본적으로 chrony가 설치되어 있습니다. 설치 여부를 확인하고 필요한 경우 설치하려면

# yum install chrony

Chrony 서비스 관리

Chrony 상태 확인:

$ systemctl status chronyd
chronyd.service - NTP client/server
   Loaded: loaded (/usr/lib/systemd/system/chronyd.service; enabled)
   Active: active (running) since Wed 2024-10-24 10:23:16 CEST; 11h ago

Chrony 시작:

# systemctl start chronyd

Chrony 시스템 시작 시 자동 시작 설정:


# systemctl enable chronyd

Chrony 중지:

# systemctl stop chronyd

Chrony 시스템 시작 시 자동 시작 해제:

# systemctl disable chronyd

Chrony 동기화 확인

Chrony 추적 정보 확인:

   $ chronyc tracking

Reference ID    : CB00710F (ntp-server.example.net)
Stratum         : 3
Ref time (UTC)  : Fri Jan 27 09:49:17 2017
System time     :  0.000006523 seconds slow of NTP time
Last offset     : -0.000006747 seconds
RMS offset      : 0.000035822 seconds
Frequency       : 3.225 ppm slow
Residual freq   : 0.000 ppm
Skew            : 0.129 ppm
Root delay      : 0.013639022 seconds
Root dispersion : 0.001100737 seconds
Update interval : 64.2 seconds
Leap status     : Normal
  • NTP 서버, 시간 오프셋, 주파수 드리프트 등 자세한 정보가 표시됩니다.

현재 시간 소스 확인:

"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."
   $ chronyc sources
210 Number of sources = 3
MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
#* GPS0                          0   4   377    11   -479ns[ -621ns] /-  134ns
^? a.b.c                         2   6   377    23   -923us[ -924us] +/-   43ms
^ d.e.f                         1   6   377    21  -2629us[-2619us] +/-   86ms
  • GPS 또는 다른 시간 소스에서 데이터를 수집하고 있는지 확인할 수 있습니다.
  • 선택 사항 -v 인수를 지정하여 자세한 정보를 출력할 수 있습니다.

소스 통계 확인:

   $ chronyc sourcestats
210 Number of sources = 1
Name/IP Address            NP  NR  Span  Frequency  Freq Skew  Offset  Std Dev
===============================================================================
abc.def.ghi                11   5   46m     -0.001      0.045      1us    25us
  • 각 소스의 주파수 드리프트 및 오프셋 추정치를 확인할 수 있습니다.

이 명령들을 통해 Chrony 서비스의 동작과 NTP 시간 동기화 상태를 관리할 수 있습니다.

시스템 시계 수동 조정

시스템 시계를 즉시 전환:

현재 진행 중인 조정을 무시하고, 시스템 시계를 즉시 조정하려면 chronycmakestep 명령을 사용합니다.

이 명령은 시스템 시간과 NTP 시간 사이의 차이가 설정된 임계값보다 클 때, 즉시 시스템 시간을 동기화합니다.

# chronyc makestep

주의:

rtcfile 지시문이 chrony.conf에 설정된 경우, 실시간 클록을 수동으로 조정하지 않아야 합니다. Chrony는 실시간 클록의 드리프트 속도를 측정해야 하며, 임의의 수동 조정이 이 프로세스에 방해가 될 수 있습니다.

chrony 디스패치 스크립트 비활성화

절차

디스패치 스크립트 기능:

NetworkManager는 NTP 서버가 온라인 및 오프라인 상태로 전환될 때 chrony의 디스패치 스크립트를 실행합니다. 그러나 NetworkManager 이외의 방법으로 네트워크 구성을 관리하는 경우, NTP 서버가 오프라인 상태로 남을 수 있습니다.

디스패치 스크립트 비활성화:

다음 스크립트를 수정하여 chrony 디스패치 스크립트를 비활성화할 수 있습니다:

스크립트의 내용:

vi /etc/NetworkManager/dispatcher.d/20-chrony-online
#!/bin/sh 
exit 0

주의:

chrony 패키지를 업그레이드하거나 다시 설치할 때 디스패치 스크립트가 원래 상태로 되돌아갈 수 있습니다.

격리된 네트워크에서 chrony 설정

절차

서버 설정:

인터넷 연결이 없는 네트워크에서 기본 타이머 역할을 할 서버의 chrony.conf 설정을 다음과 같이 편집합니다:

# vi  chrony.conf
driftfile /var/lib/chrony/drift
commandkey 1
keyfile /etc/chrony.keys
initstepslew 10 client1 client3 client6
local stratum 8
manual
allow 192.0.2.0/24

192.0.2.0/24는 클라이언트가 연결할 수 있는 네트워크 또는 서브넷입니다.

클라이언트 설정:

# vi  chrony.conf
server ntp1.example.net
driftfile /var/lib/chrony/drift
logdir /var/log/chrony
log measurements statistics tracking
keyfile /etc/chrony.keys
commandkey 24
local stratum 10
initstepslew 20 ntp1.example.net
allow 192.0.2.123

192.0.2.123서버의 IP 주소이고, ntp1.example.net서버의 호스트 이름입니다.

로컬 참조 모드 활성화:

고립 옵션을 사용하여 여러 서버가 서로 동기화하도록 로컬 참조 모드를 설정할 수 있습니다.

# vi  chrony.conf에서 고립 모드를 활성화:
local stratum 10 orphan

이를 통해 격리된 네트워크에서도 chrony 설정을 관리할 수 있습니다.

원격 모니터링 액세스 구성

chronyc는 두 가지 방법으로 chronyd에 액세스할 수 있습니다:

  1. 인터넷 프로토콜 (IPv4 또는 IPv6).
  2. Unix 도메인 소켓 – 기본적으로 로컬 시스템에서 root 또는 chrony 사용자만 액세스 가능합니다.

chronyc는 기본적으로 Unix 도메인 소켓 (/var/run/chrony/chronyd.sock)에 연결됩니다. 이 연결이 실패하거나, 루트 권한 없이 실행하는 경우 chronyc는 먼저 127.0.0.1, 그다음 ::1로 연결을 시도합니다.

원격 모니터링 명령

네트워크를 통해 보안상 허용된 모니터링 명령만 사용 가능:

  • 활동 (activity)
  • 수동 목록 (manual list)
  • rtcdata
  • 완화 중 (tracking)
  • 소스 (sources)
  • Sourcestats
  • 추적 (tracking)
  • waitsync

기타 모든 명령은 Unix 도메인 소켓을 통해서만 실행 가능하며, 네트워크 상에서는 Not authorized 오류가 발생합니다.

원격 액세스 설정 절차

IPv4 및 IPv6에서 원격 액세스 허용:

vi /etc/chrony.conf 파일을 편집하고, 다음 중 하나를 추가:

bindcmdaddress 0.0.0.0
또는
bindcmdaddress ::

원격 명령 허용:

특정 IP 주소, 네트워크, 또는 서브넷에서 원격 명령을 허용하려면
vi /etc/chrony.conf 파일에 다음 내용을 추가:

cmdallow 192.168.1.0/24

방화벽 설정:

원격 시스템에서 연결을 허용하기 위해 UDP 포트 323을 열어야 합니다.

# firewall-cmd --zone=public --add-port=323/udp

선택적으로 --permanent 옵션을 사용하여 포트 323을 영구적으로 열 수 있습니다.

# firewall-cmd --permanent --zone=public --add-port=323/udp

323 포트를 영구적으로 여는 경우 방화벽 구성을 다시 로드합니다.

# firewall-cmd --reload

RHEL 시스템 역할을 사용하여 시간 동기화 관리

timesync 역할은 여러 대상 시스템에서 시간 동기화를 쉽게 관리할 수 있도록 NTP 또는 PTP 클라이언트를 설정하는 기능을 제공합니다. 이 역할을 사용하면, NTP 또는 Chrony를 선택하여 다양한 Red Hat Enterprise Linux(RHEL) 버전(RHEL 6 이상)에서 동일한 플레이북을 활용할 수 있으며, Chrony로의 마이그레이션도 간편해집니다.

주요 기능:

  • NTP(또는 PTP) 클라이언트 설치 및 설정
  • 동일한 플레이북을 통해 여러 RHEL 버전에서 시간 동기화 관리 가능
  • timesync 역할을 통해 이전 설정이 대체되므로 주의가 필요

주의 사항:

  • timesync 역할은 timesync_ntp_provider 변수를 통해 제공된 설정을 적용하며, 지정되지 않은 경우 기존 설정을 대체합니다. 만약 이 변수가 설정되지 않으면, 제공자 선택만 유지되고 나머지 설정은 손실됩니다.

예제: 단일 서버 풀에 대한 시간 동기화 설정

다음은 timesync 역할을 이용해 하나의 NTP 서버 풀을 구성하는 Ansible 플레이북 예제입니다.

---
- hosts: timesync-test
  vars:
    timesync_ntp_servers:
      - hostname: 2.rhel.pool.ntp.org
        pool: yes
        iburst: yes
  roles:
    - rhel-system-roles.timesync

변수 설명:

  • timesync_ntp_servers: 설정할 NTP 서버 리스트
  • hostname: NTP 서버의 호스트 이름
  • pool: 여러 서버를 위한 풀 기능 활성화 (yes로 설정)
  • iburst: 빠른 시간 동기화를 위한 iburst 옵션 활성화

참고:

  • rhel-system-roles 패키지의 timesync 역할에 대한 더 많은 정보는 다음 파일에서 확인할 수 있습니다:
  • /usr/share/doc/rhel-system-roles/timesync/README.md
  • /usr/share/doc/rhel-system-roles/timesync/README.html

ChronyNTP 차이

ChronyNTP(Network Time Protocol)는 모두 시스템 시계를 네트워크 시간 서버와 동기화하는 데 사용되는 도구입니다. 두 가지 모두 NTP 프로토콜을 구현하지만, 다양한 환경에서의 효율성, 성능, 유연성 면에서 차이가 있습니다. 다음은 ChronyNTP의 주요 차이점입니다.

1. 시간 동기화 속도

  • Chrony: 초기 동기화가 매우 빠릅니다. 특히 가상 환경이나 빈번하게 부팅되는 시스템에서는 시간을 빠르게 동기화할 수 있습니다.
  • NTP: 동기화 속도가 느리며, 안정적인 동기화를 이루기 위해 몇 분 또는 몇 시간이 걸릴 수 있습니다.

2. 네트워크 환경에 대한 적응성

  • Chrony: 일시적인 네트워크 연결 중단이나 불안정한 네트워크 환경에서 매우 효과적으로 작동합니다. 네트워크가 복구되면 빠르게 다시 동기화할 수 있습니다.
  • NTP: 네트워크 상태가 불안정하거나 오랜 시간 동안 네트워크에 연결되지 않는 경우 동기화 성능이 저하될 수 있습니다.

3. 오프라인 동기화

  • Chrony: 오프라인 상태에서 시스템 클럭의 드리프트를 계산하고 보정할 수 있습니다. 따라서 일시적으로 네트워크에 연결되지 않은 상태에서도 정확한 시간 유지가 가능합니다.
  • NTP: 네트워크 연결이 없는 경우 시간 동기화를 수행할 수 없으며, 네트워크가 복구된 후에야 동기화가 가능합니다.

4. 시스템 리소스 사용량

  • Chrony: 경량화된 설계로 메모리와 CPU 사용량이 매우 적습니다. 특히 임베디드 시스템이나 가상 머신과 같은 환경에서 효율적입니다.
  • NTP: 상대적으로 많은 메모리와 CPU 자원을 사용합니다. 고정된 환경에서 작동할 때는 큰 문제가 없지만, 자원이 제한된 시스템에서는 부담이 될 수 있습니다.

5. 정확성

  • Chrony: 시간 오프셋을 빠르게 보정하고, 시스템의 클럭 드리프트를 더 정밀하게 조정할 수 있습니다. 특히 장시간 네트워크 연결이 불안정한 상황에서 더 나은 정확성을 제공합니다.
  • NTP: 장기적으로 안정적인 네트워크 연결 상태에서는 정확한 동기화를 제공합니다. 하지만 네트워크 장애 발생 시 시간 오차가 발생할 수 있습니다.

6. 사용 환경

  • Chrony: 빠르게 부팅하거나, 빈번하게 재부팅되는 시스템, 클라우드나 가상화 환경에서 주로 사용됩니다. 또한 일시적으로 네트워크에서 떨어져 있는 노트북 등에서도 유용합니다.
  • NTP: 오래된 시스템이나 안정적인 네트워크 환경에서 주로 사용됩니다. 물리 서버나 데이터 센터에서 많이 활용됩니다.

7. 구성 파일 차이

  • Chrony: 주요 구성 파일은 /etc/chrony.conf이며, 설정이 간단하고 빠르게 적용됩니다.
  • NTP: 주요 구성 파일은 /etc/ntp.conf이며, 복잡한 설정이 가능하지만 상대적으로 설정 파일이 더 크고 복잡합니다.

주요 선택 기준

  • Chrony는 부팅 시간이 빠르고, 네트워크 연결이 불안정하거나 오프라인 상태에서도 시간이 중요한 시스템에 적합합니다.
  • NTP는 안정적인 네트워크 연결이 보장되는 환경에서 장기적으로 시간 동기화를 유지해야 하는 시스템에 더 적합합니다.

결론

대부분의 최신 리눅스 배포판에서 ChronyNTP의 대안으로 기본 제공되고 있으며, 더 유연하고 빠른 동기화 성능을 제공합니다. 특히 가상화나 클라우드 환경에서 더 많이 채택되고 있습니다.

댓글 달기

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

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.

아마존 해외 구매: 서버, 네트워크, 노트북 구매

Amazon Best Sellers Servers

Amazon Best Sellers Networking

Amazon Best Sellers Laptops

위로 스크롤