Tôi có cần chạy máy chủ NTP trong mọi VM không?


18

Không phải khách nào đó có thể kế thừa thời gian hệ thống của chủ nhà?

Có vẻ như vô nghĩa khi chạy cùng một trình nền để có được kết quả tương tự trên cùng một máy nhiều lần nhưng tôi không tìm thấy bất cứ điều gì liên quan đến thời gian khi đọc các bài viết KVM hoặc Xen. Sự hiểu biết của tôi là khách có thời gian khởi động máy chủ nhưng nó có thể trôi đi. Đúng không ?



1
Tôi đoán bạn có nghĩa là một khách hàng NTP?
Michael Hampton

1
@MichaelHampton: Vâng, sự khác biệt giữa máy khách và máy chủ NTP chưa bao giờ thực sự rõ ràng đối với tôi vì gói ntp luôn cung cấp cả hai.
zimbatm

2
Liên quan đến câu hỏi này: trên Debian và các dẫn xuất, openntpgói có trọng lượng nhẹ hơn nhiều so với ntpgói. Nó không ràng buộc theo mặc định và vì vậy chỉ hoạt động như một khách hàng, đó chính xác là những gì chúng ta cần ở đây.
zimbatm

Câu trả lời:


13

Chính xác. Cần lưu ý rằng thời gian không chỉ "có thể" trôi đi mà còn trôi đi do thực tế là các khoảng thời gian giữa các ngắt hẹn giờ (mà thời gian trên hệ điều hành thường dựa trên) được kéo dài và nén khi trình siêu giám sát sẽ thấy phù hợp.

Một cách giải quyết thường được thực hiện trên hầu hết các nền tảng ảo hóa (dịch vụ tích hợp Hyper-V, công cụ VMWare) đang chạy một trình nền trên máy khách để định kỳ đồng bộ hóa đồng hồ với máy chủ VM. Như được lưu ý bởi Hauke ​​trong một bình luận cho câu hỏi của bạn, KVM cũng cung cấp một đồng hồ ảo hóa, cần trình điều khiển tương ứng được tải trên hệ điều hành khách để hoạt động.

Đọc thêm:

Máy chấm công trong VMWare Virtual Machines (vmware.com)
Đồng bộ hóa khách KVM (s19n.net)


Cảm ơn rất nhiều. Đối với những người trên EC2, Xen dường như cũng cung cấp nguồn đồng hồ: cat /sys/devices/system/clocksource/clocksource0/current_clocksource=> xen
zimbatm

Vẫn sử dụng chronyd ngay cả khi kvm-clock được sử dụng với máy chủ làm máy chủ và VM làm máy khách.
akostadinov

20

Trong một thế giới hoàn hảo, khách VM của bạn sẽ giữ thời gian hoàn hảo hoặc ít nhất là hoàn hảo như máy chủ cung cấp. Thật không may, chúng ta không sống trong một thế giới hoàn hảo.

Dựa trên kinh nghiệm của tôi với hầu như mọi trình ảo hóa mà con người biết đến, tôi luôn chạy một máy khách NTP trong các máy ảo, không có ngoại lệ. Thiết lập thông thường của tôi là ntpd với tùy chọn -g hoặc ntpdate bắt đầu ngay trước khi nó cho các hệ thống cũ, để đồng hồ (có thể không đồng bộ hóa khi khởi động hệ thống).

KVM có thiết lập gần như hoàn hảo, với đồng hồ thời gian thực ảo hóa của nó ; khách có trình điều khiển thích hợp (ít nhất là tất cả Linux gần đây) sẽ giữ thời gian cũng như máy chủ. Nhưng vẫn có sự cố xảy ra ở đây: Ví dụ: máy chủ có thể không chạy NTP, máy chủ có thể có cài đặt múi giờ không chính xác, đồng hồ của máy chủ có thể bị sai, v.v.

VMware và Hyper-V rơi vào giữa. Mỗi công cụ có một công cụ được chạy trên máy khách đồng bộ hóa đồng hồ với máy chủ định kỳ, nhưng một lần nữa, điều này dễ bị ảnh hưởng bởi bất kỳ vấn đề nào hiện có với đồng hồ chủ.

Khách trên máy chủ Hyper-V thử nghiệm của tôi cũng thể hiện một số hành vi kỳ lạ: ngay cả với các dịch vụ tích hợp, đồng hồ khách sẽ trôi nhanh hơn 500 ppm, ngăn ntpd hoạt động ( nó xem xét đồng hồ điên nếu nó trôi nhanh hơn mức này ). Tôi đã phải chuyển những vị khách này sang chrony , điều này cho phép điều chỉnh giá trị này .

Xen là tồi tệ nhất trong khía cạnh này; nó hoàn toàn không có đồng bộ hóa và chạy NTP trong khách là yêu cầu khá nhiều. (Tôi được thông báo rằng các phiên bản gần đây của Xen có một số loại đồng bộ hóa nhưng cá nhân vẫn chưa hoạt động với nó.)

Mọi thứ trở nên tồi tệ hơn nếu máy chủ ảo hóa không nằm trong tầm kiểm soát của bạn, chẳng hạn như đám mây công cộng. Bạn đang thương xót nhà cung cấp đối với đồng hồ chủ và nếu họ không siêng năng giữ cho nó được đồng bộ hóa, bạn sẽ thua.

Với tất cả điều đó, việc chạy các máy khách NTP trong các máy ảo của bạn là khá cần thiết nếu bạn cần ngay cả một chiếc đồng hồ bán chính xác. Lưu ý: Nếu bạn chạy các máy ảo Windows, hãy lấy ứng dụng khách NTP của bên thứ ba điều chỉnh đồng hồ liên tục; lý do không tốt cho một máy khách đi kèm với Windows chỉ điều chỉnh đồng hồ mỗi tuần một lần , điều này hoàn toàn vô lý.


Là chạy ntpdatetrong một công việc cron hàng ngày đủ hay nó phải là daemon ntp?
AngerClown

4
Bạn thực sự cần một cái gì đó để đồng bộ hóa đồng hồ liên tục, vì nó có thể đi quá xa đồng bộ hóa trong một ngày để gây ra sự cố cho bạn. Và một số chương trình không thích có đồng hồ bước.
Michael Hampton

Vấn đề với daemon ntp là nó chủ yếu nhằm cung cấp thời gian cho người khác và do đó sẽ ngừng hoạt động nếu thời gian trôi quá xa nhau. Tôi thực sự muốn có một cái gì đó giống như ntpdate sẽ chạy liên tục và không ràng buộc bất kỳ cổng nào.
zimbatm

1
@JonasPfenniger Nếu ntpd không hiệu quả với bạn, hãy thử sử dụng chrony thay thế (như được đề xuất ở trên). Nó có thể được điều chỉnh khá nhiều so với ntpd để phù hợp với các kịch bản kỳ lạ mà chúng ta thấy với các máy ảo.
Michael Hampton

3
Mặc dù tôi đồng ý với 95% những gì bạn nói, tôi chỉ muốn chỉ ra rằng một máy khách Windows sử dụng NTP không bị giới hạn ở một thay đổi đồng hồ mỗi tuần. Khóa reg sau đây cho phép bạn xác định khoảng thời gian cập nhật một cách hiệu quả: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config\UpdateIntervalGiá trị được xác định bằng giây và thường được đặt thành 360000 (100 giờ), nhưng bạn có thể đặt nó thành 900 để đồng bộ hóa cứ sau 15 phút nếu ứng dụng của bạn đặc biệt nhạy cảm với thời gian. Nhớ khởi động lại dịch vụ W32Time sau đó.
kayjay

3

Tôi khuyên bạn nên sử dụng NTP vì nó đã được biết đến và đã có từ lâu. Điều chỉnh đồng hồ không phải là chuyện nhỏ. NTP đã giải quyết vấn đề này.

Dòng chính thức của VMware là sử dụng một cơ chế, với ưu tiên NTP vì nó tốt hơn và thực hiện các bước nhỏ hơn để điều chỉnh thời gian. Giải pháp VMware nội bộ có những bước lớn hơn. Khi bạn chạy cả hai họ có thể chiến đấu với nhau. Với giải pháp VMware nội bộ đang có một bước tiến lớn và sau đó NTP điều chỉnh nó và lấy lại một chút.

Tuy nhiên, trên thực tế, chúng tôi chạy cả hai cùng một lúc và tôi chưa thấy vấn đề gì.

$ ntpq   
ntpq> peers
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
something.org  172.2.1.5          2 u   57   64  377    1.597   -2.409   5.952


$  vmware-toolbox-cmd  timesync status
Enabled


$ vmware-toolbox-cmd help timesync
timesync: functions for controlling time synchronization on the guest OS
Usage: vmware-toolbox-cmd timesync <subcommand>

Subcommands:
  enable: enable time synchronization
  disable: disable time synchronization
  status: print the time synchronization status
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.