NTP가 원격 서버가 아닌 LOCAL과 동기화되는 이유는 무엇입니까? ntpq 출력에서 ​​LOCAL (0)의 별표는

따라서 현재 NTP 설정을 디버깅하려고하는데 단일 구성된 서버에서 오프셋이 3 초 이상이며 조정되지 않는 것으로 나타났습니다. ntpq 출력에서 ​​LOCAL (0)의 별표는 시스템이 10.130.33.201 서버 (모든 시스템과 동기화하려는 시스템의 또 다른 Linux 상자)가 아니라 자신과 행복하게 동기화되고 있음을 나타냅니다.

ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
 10.130.33.201   LOCAL(0)         9 u   49   64  377    0.242  -3742.2   1.049
*LOCAL(0)        .LOCL.          10 l    2   64  377    0.000    0.000   0.001

그리고 이것은 내 ntp.conf 파일입니다. 다른 사람이 작성했기 때문에 모든 것이 올바른지 100 % 확신하지 못합니다.

server 10.130.33.201 burst iburst minpoll 4 maxpoll 11
driftfile /mnt/active/etc/ntp.drift

restrict -4 default  nomodify nopeer notrap
restrict -6 default  ignore

# Undisciplined Local Clock. This is a fake driver intended for backup
# and when no outside source of synchronized time is available.
server  127.127.1.0     # local clock
fudge   127.127.1.0 stratum 10

버스트와 iburst 및 minpoll / maxpoll에 대해 읽었으므로 필요하지 않을 수도 있지만 현재 문제와 관련이 있다고 생각하지 않습니다.

또한 배포 방법으로 인해 구성 파일을 변경하는 데 많은 작업이 필요하므로 실제로 변경해야 할 사항이 없기를 바랍니다. NTP의 작동 방식을 이해하지 못하는 경우가되기를 바랍니다.


편집하다 –

그래서 이것은 This question 과 중복되는 것처럼 보이지만 포스터에 충분한 대답이 있다고 생각하지 않으므로 서버보다 현지 시간이 선호 되는지 알고 싶습니다 . 또한 아래 답변 중 하나에 따라 prefer구성의 서버 줄 에서 키워드 를 사용 하고 다시 시작했지만 효과가없는 것 같습니다.

다른 질문에 대한 답변에서 알 수 있듯이 구성에서 “로컬”라인을 모두 제거하면 서버에 연결할 수 없으면 어떻게됩니까? NTP가 죽거나 계속 시도합니까?


중요 편집-

일반적으로 10.130.33.201 ( “서버”)은 인터넷에 액세스 할 수 없으며 사용할 GPS 시간 소스가 없습니다. 중요한 부분은 시간이 실제로 얼마나 정확한지에 관계없이 시스템의 모든 장치가 서버와 동일한 시간을 갖는다는 것입니다.

그래서 어떻게 될지 알기 위해 NTP 풀 서버 중 하나를 서버의 구성 파일에 추가하여 로컬에서 시간을 얻는 것이 아니라 거기에서 시간을 얻었습니다. 이제 NTP 시간 서버에서 시간을 올바르게 얻습니다.

그런 다음 클라이언트는 이제 LOCAL (0)을 선호하지 않고 서버와 동기화합니다.

 ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*10.130.33.201   38.229.71.1      3 u   58   64  377    0.216  715621.   1.001
 LOCAL(0)        .LOCL.          10 l   18   64  377    0.000    0.000   0.001

새로운 질문-내 서버가 로컬 (원래 제공된 예)을 사용하는 경우 클라이언트가 “오, 10.130.33.201은 LOCAL (0)을 사용하고 있습니다. 흠, LOCAL (0) 서버도 있습니다”- -10.130.33.201 “을 통해 동일한 정보를 얻는 대신 직접 사용하겠습니다.”

그 경우입니까? LOCAL (0)이 아닌 “소스로 직접 이동”하려고합니까? LOCAL (0)에서 시간을 얻으려면 서버가 필요하며 서버에서 시간을 얻으려면 클라이언트가 필요합니다. 현재 클라이언트 구성 파일에서 “로컬”서버를 제거하는 것이 유일한 옵션이지만, 왜 이런 일이 발생하는지 이해하고 가능하면 구성을 변경하지 마십시오 (구성 변경은 우리 주변 환경…).

또한 이것은 좋은 대답이없는 다른 복제본처럼 보입니다.



답변

하나의 NTP 서버 만 구성하면 알고리즘은 누가 신뢰할 수 있는지 완전히 확신하지 못합니다. 비록 원격 호스트의 계층이 낮을지라도 알고리즘은 현지 시간이 더 신뢰할 만하다고 생각합니다.

prefer키워드를 설명과 함께 사용하여 server우선 시간 소스로 설정하십시오.


편집하다 –

그래서 이것은 이것이이 질문과 중복되는 것처럼 보이지만 포스터에 충분한 대답이 있다고 생각하지 않으므로 서버보다 현지 시간이 왜 선호되는지 알고 싶습니다.

진정으로 충분한 답을 얻으려면 매우 복잡한 알고리즘의 창을 파고들 것입니다. 설명서가 너무 구체적이지는 않지만 백서 또는 사양이 있다고 확신합니다.

다른 질문에 대한 답변에서 알 수 있듯이 구성에서 “로컬”라인을 모두 제거하면 서버에 연결할 수 없으면 어떻게됩니까? NTP가 죽거나 계속 시도합니까?

NTP 데몬은 종료되거나 중지되지 않지만 원격 서버에 도달하지 못한 후 동기화 시간을 종료합니다. 이것이 모범 사례에서 최소 3 개의 원격 서버를 제안하고 네트워크와의 연결이 끊어지지 않는 한 LCL을 사용하지 않는 이유입니다. 서버가 두 대 밖에 없을 때 세 대의 서버가 제안되었는데 동의하지 않기 때문에 어떤 서버를 선택합니까? 세 번째 서버는 알고리즘이 가짜 서버를 제거하는 데 도움이됩니다.

마지막으로 방금 정의하지 않은 것으로 나타났습니다 driftfile. 도움이 될까요?


답변

NTP가 올바르게 설정하기에 오프셋 간격 (시스템 시간과 NTP 호스트 시간의 차이)이 너무 다른 것처럼 보입니다.

나의 제안,

 1. Stop the NTP service
 2. As root ntpdate -bs 10.130.33.201 to reset your time to something close
 3. Start the NTP service

그 후에는 아무런 문제가 없어야합니다.


답변

LOCAL 서버가 10.130.33.201 인 지층은 9이므로이 값으로 계산 된 로컬 지층 (9 + 1 = 10)은 지층 10의 로컬 LOCAL 서버와 경쟁합니다. 로컬 LOCAL 지층에는 네트워크 지연이나 지터가 없으므로 원격 서버보다 ntpd보다 약간 나아 보일 수 있습니다.

이 구성이 작동하려면 ‘마스터’LOCAL 서버를 9보다 낮은 계층으로 설정하십시오. 계층 1 서버로 추적 가능한 시간을 선호하려면 너무 낮지 않습니다.


답변

나는 이것이 오래되었다는 것을 알고 있지만, 당신이 옳다고 생각합니다. 아무도 ntpd 문제를 디버깅하는 방법을 보여주지 않습니다. 그것이 가능하다는 것이 밝혀졌습니다.

로컬 및 업스트림 서버에서 LOCAL (0)을 사용하는 것이 문제가 될 수 있다고 의심했을 때 올바른 방향으로 가고 있다고 생각합니다.

그것은 내가 비슷한 문제를 겪고있는 4 대의 서버로 이루어진 타임 아일랜드에 있었을 것입니다. 이들은 모두 서로의 동료로 설정되었으므로 귀하와 다른 문제 일 수 있습니다.

우선, 지난 몇 년 동안 ntpd 버전에서 지원되는 고아 모드라는 타임 아일랜드를 처리하는 더 좋은 방법이 있습니다.

doc.ntp.org의 고아 모드

처음에는 4 대의 서버 모두 동일한 계층이 10이고 로컬 시계를 선호했습니다. 나는 그것을 고쳤지만 여전히 현지 시계를 선호했습니다 (층은 중요합니다).

ntpq 명령 pe (피어)를 사용하여 rv가 발생하는 상황을 처리했습니다. 서버가 정보를 덤프하려면 연관 번호에 rv (readvar)를 사용해야합니다. pe와 같은 색인으로 정렬 된 것처럼 보이므로 같은 방식으로 숫자를 얻을 수 있습니다. 서버가 마음에 들지 않으면 거부 값을 표시 할 수있는 condition이라는 필드가 있습니다.

rv 출력에는 flash라는 필드가 있습니다. 모든 것이 잘되면 이것은 0이 될 것입니다. 그렇지 않은 경우 문제의 비트 마스크 (16 진수로 표시)입니다. 여기에서 찾을 수 있습니다.

ntpd 내부 디코드

내가 가진 문제는 0800 peer_loop였습니다. 시계의 신념이 중요하다는 것이 밝혀졌습니다. 로컬 시계와 원격 서버에서 LOCAL (0)을 보면 루프가 있다고 생각하는 ntpd가 있습니다. David Mills는 comp.protocols.time의 게시물에서 ‘NTP에서 루프를 피하는 방법’을 확인합니다 (2 링크 제한에 도달했습니다. 죄송합니다)

고유 한 refid를 설정하기 위해 refid 인수를 사용하여 퍼지 할 수 없었습니다. 수신자에서 여전히 LOCAL (0)으로 표시됩니다.

작동하는 것처럼 로컬 드라이버에 고유 한 인스턴스 번호를 사용하고있었습니다. 127.127.1. [0-3]. 서버와 퍼지 라인 모두에서 동일한 ID를 사용하십시오. 이 작업을 수행했을 때 서버는 일반적으로 일반적으로 로컬 시계를 사용하는 가장 낮은 계층 서버와 동기화되었습니다. 그러나 때때로 소스로 사용중인 다른 서버 중 하나를 사용하려고했습니다. 그러나 시간이 동기화되어 그 상태를 유지하고있는 것 같습니다.

아마도 너무 늦어서 도움을 줄 수는 없지만 NTP가 논리 및 문제 해결에 적합하다는 것을 보여주기 위해 제공합니다. 시행 착오로 답변에 도달하는 데 몇 시간이 걸리고 나중에 문서를 찾았습니다.


답변

한 번의 요청이 실패하더라도 서버가 NTP 요청을 원하는 NTS로 보내도록하려면 iburst를 사용하십시오.


답변