로컬 Amazon Time Sync Service를 사용하도록 EC2 인스턴스의 시간 참조 설정 - Amazon Elastic Compute Cloud

로컬 Amazon Time Sync Service를 사용하도록 EC2 인스턴스의 시간 참조 설정

로컬 Amazon Time Sync Service는 NTP(Network Time Protocol)를 사용하거나 지원되는 인스턴스에서 로컬 PTP(Precision Time Protocol) 하드웨어 클럭을 제공합니다. PTP 하드웨어 클럭은 NTP 연결(Linux 및 Windows 인스턴스) 또는 직접 PTP 연결(Linux 인스턴스만 해당)을 지원합니다. NTP 및 직접 PTP 연결은 매우 정확한 동일한 시간 소스를 사용하지만 직접 PTP 연결이 NTP 연결보다 더 정확합니다. Amazon Time Sync Service에 대한 NTP 연결은 윤초 스미어링(leap smearing)을 지원하는 반면, PTP 하드웨어 클럭에 대한 PTP 연결은 시간을 스미어링하지 않습니다. 자세한 내용은 윤초 단원을 참조하십시오.

인스턴스는 다음과 같이 로컬 Amazon Time Sync Service에 액세스할 수 있습니다.

  • 다음 IP 주소 엔드포인트에서 NTP를 통해

  • (Linux만 해당) 로컬 PTP 하드웨어 클록에 연결하기 위한 직접 PTP 연결을 통해:

    • PHC0

Amazon Linux AMI, Windows AMI와 대부분의 파트너 AMI는 기본적으로 NTP IPv4 엔드포인트를 사용하도록 인스턴스를 구성합니다. 이는 대부분의 고객 워크로드에 권장되는 설정입니다. IPv6 엔드포인트를 사용하거나 PTP 하드웨어 클럭에 직접 연결하려는 경우가 아니면 이러한 AMI에서 시작된 인스턴스에는 추가 구성이 필요하지 않습니다.

NTP 및 PTP 연결에는 VPC 구성 변경이 필요하지 않으며 인스턴스에 인터넷 액세스가 필요하지 않습니다.

참고

Amazon Time Sync Service의 IPv4 엔드포인트에 연결합니다.

이 섹션에서는 IPv4 엔드포인트를 통해 로컬 Amazon Time Sync Service를 사용하도록 인스턴스를 구성하는 방법을 설명합니다.

인스턴스 운영 체제에 대한 지침을 사용하세요.

AL2023과 최신 버전의 Amazon Linux 2 및 Amazon Linux AMI는 기본적으로 Amazon Time Sync Service IPv4 엔드포인트를 사용하도록 구성되어 있습니다. 이러한 AMI에서 시작된 인스턴스에는 추가 구성이 필요하지 않으며 다음 절차를 건너뛸 수 있습니다.

기본적으로 Amazon Time Sync Service가 구성되지 않은 AMI를 사용하는 경우 다음 절차 중 하나를 사용하여 chrony 클라이언트로 인스턴스에서 Amazon Time Sync Service를 구성합니다. Amazon Time Sync Service에 대한 서버 항목을 chrony 구성 파일에 추가해야 합니다.

인스턴스 운영 체제에 대한 지침을 사용하세요.

Amazon Linux
chrony를 사용하여 Amazon Linux에서 Amazon Time Sync Service의 IPv4 엔드포인트에 연결
  1. 인스턴스를 연결하고 NTP 서비스를 제거합니다.

    [ec2-user ~]$ sudo yum erase 'ntp*'
  2. chrony 패키지를 설치합니다.

    [ec2-user ~]$ sudo yum install chrony
  3. /etc/chrony.conf 또는 vim과 같은 텍스트 편집기를 사용하여 nano 파일을 엽니다. 파일이 다음 라인을 포함하고 있는지 확인합니다.

    server 169.254.169.123 prefer iburst minpoll 4 maxpoll 4

    이 라인이 있으면 Amazon Time Sync Service가 Amazon Time Sync Service의 IPv4 엔드포인트를 사용하도록 이미 구성되어 있으므로 다음 단계로 넘어갈 수 있습니다. 라인이 없는 경우에는 파일에 이미 존재하는 다른 server 또는 pool 문 뒤에 라인을 추가하고 변경 사항을 저장합니다.

  4. chrony 데몬(chronyd)을 다시 시작합니다.

    [ec2-user ~]$ sudo service chronyd restart
    Starting chronyd: [ OK ]
    참고

    RHEL 및 CentOS(최대 버전 6까지)에서 서비스 이름은 chrony이 아니라 chronyd입니다.

  5. 각 시스템 부팅 시 chronyd가 시작되도록 구성하려면 chkconfig 명령을 사용합니다.

    [ec2-user ~]$ sudo chkconfig chronyd on
  6. chrony169.254.169.123 IPv4 엔드포인트를 사용하여 시간을 동기화하고 있는지 확인합니다.

    [ec2-user ~]$ 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 =============================================================================== ^* 169.254.169.123 3 6 17 43 -30us[ -226us] +/- 287us ^- ec2-12-34-231-12.eu-west> 2 6 17 43 -388us[ -388us] +/- 11ms ^- tshirt.heanet.ie 1 6 17 44 +178us[ +25us] +/- 1959us ^? tbag.heanet.ie 0 6 0 - +0ns[ +0ns] +/- 0ns ^? bray.walcz.net 0 6 0 - +0ns[ +0ns] +/- 0ns ^? 2a05:d018:c43:e312:ce77:> 0 6 0 - +0ns[ +0ns] +/- 0ns ^? 2a05:d018:dab:2701:b70:b> 0 6 0 - +0ns[ +0ns] +/- 0ns

    반환된 출력에서 ^*는 기본 설정된 타임 소스를 나타냅니다.

  7. chrony에서 보고된 시간 동기화 지표를 확인합니다.

    [ec2-user ~]$ chronyc tracking
    Reference ID : A9FEA97B (169.254.169.123) Stratum : 4 Ref time (UTC) : Wed Nov 22 13:18:34 2017 System time : 0.000000626 seconds slow of NTP time Last offset : +0.002852759 seconds RMS offset : 0.002852759 seconds Frequency : 1.187 ppm fast Residual freq : +0.020 ppm Skew : 24.388 ppm Root delay : 0.000504752 seconds Root dispersion : 0.001112565 seconds Update interval : 64.4 seconds Leap status : Normal
Ubuntu
chrony를 사용하여 Ubuntu에서 Amazon Time Sync Service의 IPv4 엔드포인트에 연결
  1. 인스턴스를 연결해 apt를 사용하여 chrony 패키지를 설치합니다.

    ubuntu:~$ sudo apt install chrony
    참고

    필요할 경우 sudo apt update를 실행하여 먼저 인스턴스를 업데이트합니다.

  2. /etc/chrony/chrony.conf 또는 vim과 같은 텍스트 편집기를 사용하여 nano 파일을 엽니다. 파일에 이미 존재하는 server 또는 pool 문 앞에 다음 라인을 추가하고 변경 사항을 저장합니다.

    server 169.254.169.123 prefer iburst minpoll 4 maxpoll 4
  3. chrony 서비스를 다시 시작합니다.

    ubuntu:~$ sudo /etc/init.d/chrony restart
    Restarting chrony (via systemctl): chrony.service.
  4. chrony169.254.169.123 IPv4 엔드포인트를 사용하여 시간을 동기화하고 있는지 확인합니다.

    ubuntu:~$ 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 =============================================================================== ^* 169.254.169.123 3 6 17 12 +15us[ +57us] +/- 320us ^- tbag.heanet.ie 1 6 17 13 -3488us[-3446us] +/- 1779us ^- ec2-12-34-231-12.eu-west- 2 6 17 13 +893us[ +935us] +/- 7710us ^? 2a05:d018:c43:e312:ce77:6 0 6 0 10y +0ns[ +0ns] +/- 0ns ^? 2a05:d018:d34:9000:d8c6:5 0 6 0 10y +0ns[ +0ns] +/- 0ns ^? tshirt.heanet.ie 0 6 0 10y +0ns[ +0ns] +/- 0ns ^? bray.walcz.net 0 6 0 10y +0ns[ +0ns] +/- 0ns

    반환된 출력의 ^*로 시작되는 줄은 기본 설정된 타임 소스를 나타냅니다.

  5. chrony에서 보고된 시간 동기화 지표를 확인합니다.

    ubuntu:~$ chronyc tracking
    Reference ID : 169.254.169.123 (169.254.169.123) Stratum : 4 Ref time (UTC) : Wed Nov 29 07:41:57 2017 System time : 0.000000011 seconds slow of NTP time Last offset : +0.000041659 seconds RMS offset : 0.000041659 seconds Frequency : 10.141 ppm slow Residual freq : +7.557 ppm Skew : 2.329 ppm Root delay : 0.000544 seconds Root dispersion : 0.000631 seconds Update interval : 2.0 seconds Leap status : Normal
SUSE Linux

SUSE Linux Enterprise Server 15부터 chrony는 NTP의 기본 구현입니다.

chrony를 사용하여 SUSE Linux에서 Amazon Time Sync Service의 IPv4 엔드포인트에 연결
  1. /etc/chrony.conf 또는 vim과 같은 텍스트 편집기를 사용하여 nano 파일을 엽니다.

  2. 파일이 다음 라인을 포함하고 있는지 확인합니다.

    server 169.254.169.123 prefer iburst minpoll 4 maxpoll 4

    이 라인이 표시되지 않는 경우, 추가합니다.

  3. 다른 서버 혹은 풀 라인 설명

  4. yaST를 열고 chrony 서비스를 실행합니다.

Windows AMI는 2018년 8월 릴리스부터 기본적으로 Amazon Time Sync Service를 사용합니다. 이러한 AMI에서 시작된 인스턴스에는 추가 구성이 필요하지 않으며 다음 절차를 건너뛰어도 됩니다.

기본적으로 Amazon Time Sync Service가 구성되지 않은 AMI를 사용하는 경우 먼저 현재 NTP 구성을 확인하세요. 인스턴스가 이미 Amazon Time Sync Service의 IPv4 엔드포인트를 사용하고 있는 경우 추가 구성이 필요하지 않습니다. 인스턴스가 Amazon Time Sync Service를 사용하지 않는 경우 Amazon Time Sync Service를 사용하도록 NTP 서버를 변경하는 절차를 완료합니다.

NTP 구성을 확인하려면
  1. 인스턴스에서 명령 프롬프트 창을 엽니다.

  2. 다음 명령을 입력하여 현재 NTP 구성을 가져옵니다.

    w32tm /query /configuration

    이 명령은 Windows 인스턴스에 대한 현재 구성 설정을 반환하고 Amazon Time Sync Service에 연결되어 있는지 보여줍니다.

  3. (선택 사항) 다음 명령을 입력하여 현재 구성의 상태를 가져옵니다.

    w32tm /query /status

    이 명령은 인스턴스를 NTP 서버와 마지막으로 동기화한 시간, 폴링 간격 등의 정보를 반환합니다.

Amazon Time Sync Service를 사용하도록 NTP 서버를 변경하려면
  1. 명령 프롬프트 창에서 다음 명령을 실행합니다.

    w32tm /config /manualpeerlist:169.254.169.123 /syncfromflags:manual /update
  2. 다음 명령을 사용하여 새 설정을 확인합니다.

    w32tm /query /configuration

    반환된 출력에서 NtpServer169.254.169.123 IPv4 엔드포인트가 표시되는지 확인합니다.

Amazon Windows AMI에 대한 기본 NTP(Network Time Protocol) 설정

일반적으로 Amazon Machine Image(AMI)는 EC2 인프라에서 함수 변경이 필요한 경우를 제외하고는 내장된 기본 설정을 그대로 유지합니다. 다음 설정은 가상 환경에서 잘 작동할 뿐 아니라 클럭 드리프트를 1초 이내의 정확도로 유지하는 것으로 판명되었습니다.

  • 업데이트 간격 - 시간 서비스가 시스템 시간의 정확도를 조정하는 빈도를 제어합니다. AWS는 업데이트 간격을 2분에 한 번으로 구성합니다.

  • NTP 서버 – AMI는 2018년 8월 릴리스부터 기본적으로 Amazon Time Sync Service를 사용합니다. 이 시간 서비스는 169.254.169.123 IPv4 엔드포인트에 있는 모든 AWS 리전에서 액세스할 수 있습니다. 뿐만 아니라 0x9 플래그는 시간 서비스가 클라이언트 역할을 하면서 SpecialPollInterval을 사용하여 구성된 시간 서버에 체크인하는 빈도를 파악함을 나타냅니다.

  • 유형 – “NTP”는 서비스가 도메인 일부의 역할을 수행하는 대신 독립 실행형 NTP 클라이언트의 역할을 수행할 것임을 뜻합니다.

  • 활성화 및 InputProvider – 시간 서비스가 활성화되어 운영 체제에 시간을 제공합니다.

  • 특수 폴링 간격 – 900초(15분)마다 구성된 NTP 서버를 확인합니다.

레지스트리 경로 키 이름 Data

HKLM:\System\CurrentControlSet\services\w32time\Config

UpdateInterval

120

HKLM:\System\CurrentControlSet\services\w32time\Parameters

NtpServer

169.254.169.123,0x9

HKLM:\System\CurrentControlSet\services\w32time\Parameters

유형

NTP

HKLM:\System\CurrentControlSet\services\w32time\TimeProviders\NtpClient

활성

1

HKLM:\System\CurrentControlSet\services\w32time\TimeProviders\NtpClient

InputProvider

1

HKLM:\System\CurrentControlSet\services\w32time\TimeProviders\NtpClient

SpecialPollInterval

900

Amazon Time Sync Service의 IPv6 엔드포인트에 연결합니다.

이 섹션에서는 IPv6 엔드포인트를 통해 로컬 Amazon Time Sync Service를 사용하도록 인스턴스를 구성하는 경우 Amazon Time Sync Service의 IPv4 엔드포인트에 연결합니다.에 설명된 단계가 어떻게 다른지 설명합니다. 전체 Amazon Time Sync Service 구성 프로세스를 설명하지는 않습니다.

IPv6 엔드포인트는 Nitro 기반 인스턴스에서만 액세스할 수 있습니다.

참고

IPv4 및 IPv6 엔드포인트 항목을 함께 사용하는 것은 권장하지 않습니다. IPv4 및 IPv6 NTP 패킷은 인스턴스의 동일한 로컬 서버에서 가져옵니다. IPv4 엔드포인트와 IPv6 엔드포인트를 모두 구성할 필요는 없으며, 이렇게 해도 인스턴스의 시간 정확도가 향상되지 않습니다.

인스턴스 운영 체제에 대한 지침을 사용하세요.

사용 중인 Linux 배포판에 따라 chrony.conf 파일을 편집하는 단계에 도달하면 Amazon Time Sync Service(fd00:ec2::123)의 IPv4 엔드포인트(169.254.169.123)가 아니라 IPv6 엔드포인트를 사용하게 됩니다.

server fd00:ec2::123 prefer iburst minpoll 4 maxpoll 4

파일을 저장하고 chronyfd00:ec2::123 IPv6 엔드포인트를 사용하여 시간을 동기화하고 있는지 확인합니다.

[ec2-user ~]$ chronyc sources -v

출력에 fd00:ec2::123 IPv6 엔드포인트가 표시될 경우 구성이 완료된 것입니다.

Amazon Time Sync Service를 사용하도록 NTP 서버를 변경하는 단계에 도달하면 IPv4 엔드포인트(169.254.169.123)가 아닌 Amazon Time Sync Service(fd00:ec2::123)의 IPv6 엔드포인트를 사용하게 됩니다.

w32tm /config /manualpeerlist:fd00:ec2::123 /syncfromflags:manual /update

새 설정이 fd00:ec2::123 IPv6 엔드포인트를 사용하여 시간을 동기화하고 있는지 확인합니다.

w32tm /query /configuration

출력에서 NtpServerfd00:ec2::123 IPv6 엔드포인트를 표시하는지 확인합니다.

PTP 하드웨어 클럭에 연결

PTP 하드웨어 클럭은 AWS Nitro 시스템의 일부이므로 고객 리소스를 사용하지 않고도 지원되는 베어 메탈 및 가상화된 EC2 인스턴스에서 직접 액세스할 수 있습니다.

PTP 하드웨어 클럭에 대한 NTP 엔드포인트는 일반 Amazon Time Sync Service의 것과 동일합니다. 인스턴스에 PTP 하드웨어 클럭이 있고 IPv4 또는 IPv6 엔드포인트에 대한 NTP 연결을 구성한 경우 인스턴스 시간은 NTP를 통해 PTP 하드웨어 클럭에서 자동으로 생성됩니다.

Linux 인스턴스의 경우 NTP 연결보다 더 정확한 시간을 제공하는 직접 PTP 연결을 구성할 수 있습니다. Windows 인스턴스는 PTP 하드웨어 클럭에 대한 NTP 연결만 지원합니다.

요구 사항

다음 요구 사항이 충족되면 인스턴스에서 PTP 하드웨어 클럭을 사용할 수 있습니다.

  • 지원 AWS 리전: 미국 동부(버지니아 북부), 미국 동부(오하이오), 아시아 태평양(말레이시아), 아시아 태평양(도쿄)

  • 지원되는 인스턴스 패밀리:

    • 범용: M7a, M7g, M7gd, M7i

    • 컴퓨팅 최적화: C7a, C7gd, C7i

    • 메모리 최적화: R7a, R7g, R7gd, R7i, R8g

  • (Linux만 해당) 지원되는 운영 체제에 ENA 드라이버 버전 2.10.0 이상이 설치되어 있어야 합니다. 지원되는 운영 체제에 대한 자세한 내용은 GitHub의 드라이버 사전 조건을 참조하세요.

이 섹션에서는 PTP 직접 연결을 사용하여 PTP 하드웨어 클럭을 통해 로컬 Amazon Time Sync Service를 사용하도록 Linux 인스턴스를 구성하는 방법을 설명합니다. chrony 구성 파일에서 PTP 하드웨어 클럭에 대한 서버 항목을 추가해야 합니다.

PTP 하드웨어 클럭에 대한 직접 PTP 연결을 구성하려면(Linux 인스턴스만 해당)
  1. Linux 인스턴스에 연결하고 다음을 수행합니다.

    1. Elastic Network Adapter(ENA) 버전 2.10.0 이상용 Linux 커널 드라이버를 설치합니다.

    2. PTP 하드웨어 클럭을 활성화합니다.

    설치 지침은 GitHub의 Linux kernel driver for Elastic Network Adapter (ENA) family를 참조하세요.

  2. 인스턴스에 /dev/ptp0 디바이스가 표시되는지 확인합니다.

    [ec2-user ~]$ ls /dev/ptp0

    예상 출력은 다음과 같습니다. /dev/ptp0이 출력에 없으면 ENA 드라이버가 제대로 설치되지 않은 것입니다. 드라이버 설치에 대한 이 절차의 1단계를 검토합니다.

    /dev/ptp0
  3. 텍스트 편집기를 사용하여 /etc/chrony.conf를 편집하고 파일에 다음 줄을 추가합니다.

    refclock PHC /dev/ptp0 poll 0 delay 0.000010 prefer
  4. chrony를 다시 시작합니다.

    [ec2-user ~]$ sudo systemctl restart chronyd
  5. chrony가 PTP 하드웨어 클럭을 사용하여 이 인스턴스의 시간을 동기화하고 있는지 확인합니다.

    [ec2-user ~]$ chronyc sources

    예상 결과

    MS Name/IP address Stratum Poll Reach LastRx Last sample =============================================================================== #* PHC0 0 0 377 1 +2ns[ +1ns] +/- 5031ns

    반환된 출력에서 *는 기본 시간 소스를 나타냅니다. PHC0은 PTP 하드웨어 클럭에 해당합니다. chrony를 다시 시작한 후 별표가 나타나려면 몇 초 정도 기다려야 할 수 있습니다.