Share via


Azure'da Linux VM'leri için zaman eşitleme

Dikkat

Bu makalede, Kullanım Süresi Sonu (EOL) durumuna yakın bir Linux dağıtımı olan CentOS'a başvuruda bulunur. Lütfen kullanımınızı göz önünde bulundurun ve uygun şekilde planlayın. Daha fazla bilgi için bkz . CentOS Kullanım Süresi Sonu kılavuzu.

Şunlar için geçerlidir: ✔️ Linux VM'leri ✔️ Esnek ölçek kümeleri ✔️ Tekdüzen ölçek kümeleri

Zaman eşitlemesi güvenlik ve olay bağıntısı için önemlidir. Bazen dağıtılmış işlemlerin uygulanması için kullanılır. Birden çok bilgisayar sistemi arasındaki zaman doğruluğu eşitleme yoluyla elde edilir. Eşitleme, yeniden başlatmalar ve zaman kaynağı ile saati getiren bilgisayar arasındaki ağ trafiği de dahil olmak üzere birden çok şeyden etkilenebilir.

Azure, Windows Server 2016 çalıştıran altyapı tarafından desteklenir. Windows Server 2016' da saati düzeltmek ve yerel saati UTC ile eşitlenecek şekilde ayarlamak için kullanılan algoritmalar geliştirildi. Windows Server 2016 Doğru Zaman özelliği, konaklı VM'leri doğru zaman için yöneten VMICTimeSync hizmetinin biçimini büyük ölçüde geliştirdi. Geliştirmeler, VM başlatma veya VM geri yükleme ve kesinti gecikmesi düzeltmesinde daha doğru başlangıç zamanını içerir.

Not

Windows Saat hizmetine hızlı bir genel bakış için bu üst düzey genel bakış videosuna göz atın.

Daha fazla bilgi için bkz . Windows Server 2016 için doğru zaman.

Genel bakış

Bilgisayar saatinin doğruluğu, bilgisayar saatinin Eşgüdümlü Evrensel Saat (UTC) saat standardına ne kadar yakın olduğunu ölçer. UTC, 300 yılda yalnızca bir saniye kapalı kalan hassas atomik saatlerden oluşan çok uluslu bir örnekle tanımlanır. Ancak UTC'nin doğrudan okunması için özel donanım gerekir. Bunun yerine, zaman sunucuları UTC ile eşitlenir ve ölçeklenebilirlik ve sağlamlık sağlamak için diğer bilgisayarlardan erişilir. Her bilgisayarda hangi saat sunucularının kullanılacağını bilen zaman eşitleme hizmeti çalışır ve bilgisayar saatinin düzeltilmesi gerekip gerekmediğini düzenli aralıklarla denetler ve gerekirse zamanı ayarlar.

Azure konakları, GPS antenleri ile Microsoft'a ait Stratum 1 cihazlarından zamanlarını alacak dahili Microsoft zaman sunucularına eşitlenir. Azure'daki sanal makineler vm'ye doğru zamanı (konak süresi) geçirmek için konaklarına bağımlı olabilir ya da VM doğrudan bir zaman sunucusundan zaman alabilir veya her ikisinin bir bileşimini kullanabilir.

Tek başına donanımda, Linux işletim sistemi yalnızca önyüklemede konak donanım saatini okur. Bundan sonra, saat Linux çekirdeğindeki kesme süreölçeri kullanılarak korunur. Bu yapılandırmada saat zaman içinde kayacaktır. Azure'daki daha yeni Linux dağıtımlarında VM'ler, konaktan saat güncelleştirmelerini daha sık sorgulamak için Linux tümleştirme hizmetlerine (LIS) dahil edilen VMICTimeSync sağlayıcısını kullanabilir.

Konakla sanal makine etkileşimleri de saati etkileyebilir. Bellek koruma bakımı sırasında VM'ler 30 saniyeye kadar duraklatılır. Örneğin, bakım başlamadan önce VM saati 10:00:00'ı gösterir ve 28 saniye sürer. VM devam ettirildikten sonra, VM üzerindeki saat yine de 28 saniye kapalı olacak şekilde 10:00:00'ı gösterir. Bunu düzeltmek için VMICTimeSync hizmeti konakta neler olduğunu izler ve Linux VM'lerinde günün saatini güncelleştirerek bunu telafi eder.

Zaman eşitlemesi çalışmadan VM'de saat hata biriktirir. Yalnızca bir VM olduğunda, iş yükü yüksek oranda doğru zaman tutma gerektirmediği sürece etki önemli olmayabilir. Ancak çoğu durumda, işlemleri izlemek için zaman kullanan ve tüm dağıtım boyunca tutarlı olması gereken birden çok birbirine bağlı VM'miz vardır. VM'ler arasındaki süre farklı olduğunda aşağıdaki efektleri görebilirsiniz:

  • Kimlik doğrulaması başarısız olur. Kerberos veya sertifikaya bağımlı teknoloji gibi güvenlik protokolleri, sistemlerde zamanın tutarlı olmasına dayanır.
  • Günlükler (veya diğer veriler) zamanında kabul etmiyorsa sistemde neler olduğunu bulmak zordur. Aynı olay farklı zamanlarda gerçekleşmiş gibi görünerek bağıntıyı zorlaştırır.
  • Saat kapalıysa faturalama yanlış hesaplanabilir.

Yapılandırma seçenekleri

Zaman eşitleme, Linux VM'de bir zaman eşitleme hizmetinin çalıştırılmasını ve eşitlenmesi gereken doğru zaman bilgisi kaynağını gerektirir. Zaman eşitleme hizmeti olarak genellikle ntpd veya chronyd kullanılır, ancak kullanılabilecek başka açık kaynak zaman eşitleme hizmetleri de vardır. Doğru zaman bilgilerinin kaynağı Azure ana bilgisayarı veya genel İnternet üzerinden erişilen bir dış zaman hizmeti olabilir. VMICTimeSync hizmeti, yukarıda açıklandığı gibi konak bakımı için duraklamalar dışında Azure konağı ile Linux VM arasında sürekli zaman eşitlemesi sağlamaz.

Geçmişte, Linux ile Azure Market görüntülerin çoğu iki yoldan biriyle yapılandırılmıştır:

  • Varsayılan olarak hiçbir zaman eşitleme hizmeti çalışmıyor
  • ntpd, zaman eşitleme hizmeti olarak çalışıyor ve ağ üzerinden erişilen bir dış NTP zaman kaynağıyla eşitleniyor. Örneğin, Ubuntu 18.04 LTS Market görüntüleri ntp.ubuntu.com kullanır.

ntpd'nin doğru eşitlendiğinden emin olmak için komutunu çalıştırın ntpq -p .

Linux içeren bazı Azure Market görüntüleri zaman eşitleme hizmeti olarak chronyd kullanacak şekilde değiştiriliyor ve chronyd, dış NTP zaman kaynağı yerine Azure konağıyla eşitlenecek şekilde yapılandırılıyor. Azure konak süresi, doğru ve güvenilir bir şekilde korunup genel İnternet üzerinden dış NTP zaman kaynağına erişimde değişken ağ gecikmeleri olmadan erişilebildiği için genellikle eşitlenecek en iyi zaman kaynağıdır.

VMICTimeSync paralel olarak kullanılır ve iki işlev sağlar:

  • Bir konak bakım olayından sonra Linux VM'sinin günün saatini hemen güncelleştirir
  • IEEE 1588 Duyarlık Zaman Protokolü (PTP) donanım saat kaynağını, Azure konağından günün doğru saatini sağlayan bir /dev/ptp cihazı olarak başlatır. Chronyd, bu zaman kaynağıyla eşitlenecek şekilde yapılandırılabilir (en yeni Linux görüntülerinde varsayılan yapılandırmadır). Çekirdek sürüm 4.11 veya üzeri (veya RHEL/CentOS 7 için sürüm 3.10.0-693 veya üzeri) olan Linux dağıtımları /dev/ptp cihazını destekler. Azure konak süresi için /dev/ptp'yi desteklemeyen önceki çekirdek sürümleri için yalnızca dış saat kaynağıyla eşitleme yapılabilir.

Elbette, varsayılan yapılandırma değiştirilebilir. Ntpd ve dış zaman kaynağı kullanmak üzere yapılandırılmış eski bir görüntü chronyd ve Azure konak süresi için /dev/ptp cihazı kullanacak şekilde değiştirilebilir. Benzer şekilde, bir /dev/ptp cihazı aracılığıyla Azure konak süresini kullanan bir görüntü, uygulamanız veya iş yükünüz için gerekliyse bir dış NTP zaman kaynağı kullanacak şekilde yapılandırılabilir.

Araçlar ve kaynaklar

Zaman eşitleme yapılandırmanızı denetlemeye yönelik bazı temel komutlar vardır. Linux dağıtımına yönelik belgelerde, bu dağıtım için zaman eşitlemesini yapılandırmanın en iyi yolu hakkında daha fazla ayrıntı bulunur.

Tümleştirme hizmetleri

Tümleştirme hizmetinin (hv_utils) yüklenip yüklenmediğini denetleyin.

$ sudo lsmod | grep hv_utils

Şuna benzer bir şey görmeniz gerekir:

hv_utils               24418  0
hv_vmbus              397185  7 hv_balloon,hyperv_keyboard,hv_netvsc,hid_hyperv,hv_utils,hyperv_fb,hv_storvsc

PTP Saat Kaynağını Denetleme

Linux'un daha yeni sürümleriyle, Azure konağına karşılık gelen bir Duyarlık Süresi Protokolü (PTP) saat kaynağı VMICTimeSync sağlayıcısının bir parçası olarak kullanılabilir. Red Hat Enterprise Linux veya CentOS 7.x'in eski sürümlerinde Linux Integration Services indirilebilir ve güncelleştirilmiş sürücüyü yüklemek için kullanılabilir. PTP saat kaynağı kullanılabilir olduğunda Linux cihazı /dev/ptpx biçiminde olur.

Hangi PTP saat kaynaklarının kullanılabilir olduğunu görün.

$ ls /sys/class/ptp

Bu örnekte, döndürülen değer ptp0 olduğundan saat adını denetlemek için bunu kullanırız. Cihazı doğrulamak için saat adını denetleyin.

$ sudo cat /sys/class/ptp/ptp0/clock_name

Bu, Azure konağı anlamına gelen değerini döndürmelidir hyperv.

Bazı Linux VM'lerinde birden çok PTP cihazı listelendiğini görebilirsiniz. Bir örnek, Hızlandırılmış Ağ için Mellanox mlx5 sürücüsünün de bir /dev/ptp cihazı oluşturmasıdır. Başlatma sırası Linux her ön başlatıldığında farklı olabileceğinden, Azure konağına /dev/ptp0 karşılık gelen PTP cihazı veya /dev/ptp1olabilir, bu da doğru saat kaynağıyla yapılandırılmasını chronyd zorlaştırır. Bu sorunu çözmek için en son Linux görüntüleri, Azure konağına karşılık gelen /dev/ptp girişe symlink /dev/ptp_hyperv oluşturan bir udev kurala sahiptir. Chrony her zaman veya /dev/ptp1yerine /dev/ptp0 symlink kullanacak /dev/ptp_hyperv şekilde yapılandırılmalıdır.

Cihazın oluşturulmamasıyla /dev/ptp_hyperv ilgili sorun yaşıyorsanız, aşağıdaki kuralı ve adımları kullanarak udev bunu yapılandırabilirsiniz:

NOT: Linux dağıtımlarının çoğu, systemd'in daha yeni sürümlerinde uygulandığından bu udev kuralına ihtiyaç duymamalıdır

udev Kural dosyasını oluşturun:

$ sudo cat > /etc/udev/rules.d/99-ptp_hyperv.rules << EOF
ACTION!="add", GOTO="ptp_hyperv"
SUBSYSTEM=="ptp", ATTR{clock_name}=="hyperv", SYMLINK += "ptp_hyperv"
LABEL="ptp_hyperv"
EOF

Sanal Makineyi yeniden başlatın VEYA kuralları şu şekilde yeniden yükleyin udev :

$ sudo udevadm control --reload
$ sudo udevadm trigger --subsystem-match=ptp --action=add

chrony

Ubuntu 19.10 ve sonraki sürümlerde Red Hat Enterprise Linux ve CentOS 8.x sürümlerinde chrony, PTP kaynak saati kullanacak şekilde yapılandırılır. Eski Linux sürümleri, kroni yerine PTP kaynaklarını desteklemeyen Ağ Zaman Protokolü daemon'unu (ntpd) kullanır. Bu sürümlerde PTP'yi etkinleştirmek için, aşağıdaki deyim kullanılarak chrony el ile yüklenip yapılandırılmalıdır (chrony.conf içinde):

refclock PHC /dev/ptp_hyperv poll 3 dpoll -2 offset 0 stratum 2

/dev/ptp_hyperv symlink kullanılabilir durumdaysa, Mellanox mlx5 sürücüsü tarafından oluşturulan /dev/ptp cihazıyla herhangi bir karışıklığı önlemek için /dev/ptp0 yerine bunu kullanın.

Katman bilgileri Azure konağından Linux konuğuna otomatik olarak iletilir. Yukarıdaki yapılandırma satırı, Azure konak zaman kaynağının Stratum 2 olarak ele alındığını belirtir ve bu da Linux konuğunun kendisini Stratum 3 olarak raporlamasına neden olur. Linux konuğunun kendisini farklı şekilde raporlamasını istiyorsanız, yapılandırma satırında katman ayarını değiştirebilirsiniz.

Varsayılan olarak, chronyd herhangi bir zaman kaymasını düzeltmek için sistem saatini hızlandırır veya yavaşlatır. Kayma çok büyük olursa, chrony kaymayı düzeltemiyor. Bunun üstesinden gelmek için, /etc/chrony.conf içindeki parametresi, makestep kayma belirtilen eşiği aşarsa zaman eşitlemesini zorlayacak şekilde değiştirilebilir.

makestep 1.0 -1

Burada, kayma 1 saniyeden büyükse kroni bir zaman güncelleştirmesini zorlar. Değişiklikleri uygulamak için chronyd hizmetini yeniden başlatın:

$ sudo systemctl restart chronyd && sudo systemctl restart chrony

Bazı durumlarda, syslog'da aşağıdakine benzer iletiler görmeye devam ediyorsanız, systemd-timesyncd hizmeti hala etkinleştirilebilir ve yeniden başlatma sırasında eşitleme yapmaya çalışabilir:

systemd-timesyncd[945]: Network configuration changed, trying to establish connection.
Aug  1 12:59:45 vm-name systemd-timesyncd[945]: Network configuration changed, trying to establish connection.
Aug  1 12:59:45 vm-name systemd-timesyncd[945]: Network configuration changed, trying to establish connection.
Aug  1 12:59:45 vm-name systemd-timesyncd[945]: Network configuration changed, trying to establish connection.
Aug  1 12:59:45 vm-name systemd-timesyncd[945]: Network configuration changed, trying to establish connection.
Aug  1 12:59:45 vm-name systemd-timesyncd[945]: Synchronized to time server 185.125.190.56:123 (ntp.ubuntu.com)

Şu komutu kullanarak devre dışı bırakabilirsiniz:

$ sudo systemctl disable systemd-timesyncd

Çoğu durumda, systemd-timesyncd önyükleme sırasında dener, ancak kroni başladıktan sonra üzerine yazılır ve varsayılan zaman eşitleme kaynağı olur.

Ubuntu ve NTP hakkında daha fazla bilgi için bkz . Zaman Eşitlemesi.

Red Hat ve NTP hakkında daha fazla bilgi için bkz . NTP'yi yapılandırma.

Kroni hakkında daha fazla bilgi için bkz . Kroni kullanma.

systemd

19.10'un öncesinde SUSE ve Ubuntu sürümlerinde, zaman eşitleme systemd kullanılarak yapılandırılır. Ubuntu hakkında daha fazla bilgi için bkz . Zaman Eşitlemesi. SUSE hakkında daha fazla bilgi için bkz. SUSE Linux Enterprise Server 12 SP3 Sürüm Notları'nda Bölüm 4.5.8.

cloud-init

VM'yi sağlamak için cloud-init kullanan görüntüler, zaman eşitleme hizmeti ayarlamak için bölümünü kullanabilir ntp . Cloud-init'in kroni yükleme ve Ubuntu VM'leri için PTP saat kaynağını kullanacak şekilde yapılandırma örneği:

#cloud-config
ntp:
  enabled: true
  ntp_client: chrony
  config:
    confpath: /etc/chrony/chrony.conf
    packages:
     - chrony
    service_name: chrony
    template: |
       ## template:jinja
       driftfile /var/lib/chrony/chrony.drift
       logdir /var/log/chrony
       maxupdateskew 100.0
       refclock PHC /dev/ptp_hyperv poll 3 dpoll -2 offset 0 stratum 2
       makestep 1.0 -1

Daha sonra arm şablonunun bölümünde kullanmak üzere yukarıdaki bulut yapılandırmasını temel64 olarak ayarlayabilirsiniz osProfile :

[Convert]::ToBase64String((Get-Content -Path ./cloud-config.txt -Encoding Byte))
"osProfile": {
  "customData": "I2Nsb3VkLWNvbmZpZwpudHA6CiAgZW5hYmxlZDogdHJ1ZQogIG50cF9jbGllbnQ6IGNocm9ueQogIGNvbmZpZzoKICAgIGNvbmZwYXRoOiAvZXRjL2Nocm9ueS9jaHJvbnkuY29uZgogICAgcGFja2FnZXM6CiAgICAgLSBjaHJvbnkKICAgIHNlcnZpY2VfbmFtZTogY2hyb255CiAgICB0ZW1wbGF0ZTogfAogICAgICAgIyMgdGVtcGxhdGU6amluamEKICAgICAgIGRyaWZ0ZmlsZSAvdmFyL2xpYi9jaHJvbnkvY2hyb255LmRyaWZ0CiAgICAgICBsb2dkaXIgL3Zhci9sb2cvY2hyb255CiAgICAgICBtYXh1cGRhdGVza2V5IDEwMC4wCiAgICAgICByZWZjbG9jayBQSEMgL2Rldi9wdHBfaHlwZXJ2IHBvbGwgMyBkcG9sbCAtMgogICAgICAgbWFrZXN0ZXAgMS4wIC0x"
}

Azure'da cloud-init hakkında daha fazla bilgi için bkz . Azure'da Linux VM'leri için cloud-init desteğine genel bakış.

Sonraki adımlar

Daha fazla bilgi için bkz . Windows Server 2016 için doğru zaman.