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

Ş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, VM'lerin konak sunucu ile doğru zaman için senkronize olmasını yöneten VMICTimeSync hizmetinin işleyişini 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

Daha fazla bilgi için bkz . Windows Saat Hizmeti Nasıl Çalışır? Windows Server 2016'ya özgü bilgileri Windows Server 2016 için doğru zaman sayfasında da bulabilirsiniz.

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 antenlerine sahip Microsoft'a ait Stratum 1 cihazlarından zamanlarını alarak dahili Microsoft zaman sunucularına eşitlenmiştir. Azure'daki sanal makineler VM'ye doğru zamanı (host zamanı) aktarmak için konaklarına bağımlı olabilir ya da VM doğrudan bir zaman sunucusundan zaman alabilir veya her ikisinin bir kombinasyonunu kullanabilir.

Bağımsız donanımda, Linux işletim sistemi yalnızca önyükleme sırasında ana bilgisayar donanım saatini okur. Bundan sonra, saat Linux çekirdeğindeki kesme zamanlayıcısı kullanılarak ayarlanmaya devam edilir. 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.

Ana bilgisayar ile 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 halen 10:00:00'ı gösteriyor olacak ve bu, 28 saniye yanlış olacaktır. 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ışmadığında, sanal makinedeki saatte zaman bilgisi hataları birikir. 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, birbirine bağlı birden çok VM'miz vardır. Bu VM'ler işlemleri izlemek için zamanı kullanır ve zaman, tüm dağıtım süresince tutarlı olmalıdı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 zamanla uyumlu değilse bir sistemde neler olduğunu anlamak 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 senkronizasyonu 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 Marketplace 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 .

Azure Market'teki bazı Linux içeren imgeler, zaman eşitleme hizmeti olarak chronyd kullanmaya dönüştürülüyor ve chronyd, dış NTP zaman kaynağı yerine Azure konağına göre eşitlenecek şekilde yapılandırılıyor. Azure ana bilgisayar zamanı, doğru ve güvenilir bir şekilde korunarak genel internet üzerinden dış NTP zaman kaynağına erişimde değişken ağ gecikmeleri olmadığı için genellikle senkronize edilecek 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 aldığı günün doğru saatini sağlayan bir /dev/ptp cihazı olarak oluşturur. 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 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.

Varsayılan yapılandırma değiştirilebilir. ntpd ve dış zaman kaynağı kullanmak üzere yapılandırılmış eski bir görüntü, Azure ana bilgisayar zamanı için chronyd ve /dev/ptp cihazını 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ı belgeleri, bu dağıtım için zaman eşitlemesini yapılandırmanın en iyi yolu hakkında daha fazla ayrıntı içerir.

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 Hassas Zaman Protokolü (PTP) saat kaynağı VMICTimeSync sağlayıcısının bir parçası olarak kullanılabilir. Red Hat Enterprise Linux 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çimindedir.

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ğını ifade eden hyperv sonucunu döndürmelidir.

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. Linux her başlatıldığında başlatma sırası farklı olabileceğinden, Azure konağına karşılık gelen PTP cihazı /dev/ptp0 veya /dev/ptp1 olabilir, bu da PTP cihazının chronyd ile doğru saat kaynağını kullanarak yapılandırılmasını zorlaştırır. Bu sorunu çözmek için en son Linux görüntüleri, Azure konağına karşılık gelen udev girişine işaret eden /dev/ptp_hyperv symlink'i oluşturan bir /dev/ptp kuralına sahiptir. Chrony her zaman /dev/ptp_hyperv symlink kullanacak şekilde, /dev/ptp0 veya /dev/ptp1 yerine yapılandırılmalıdır.

Cihaz /dev/ptp_hyperv oluşturulamıyorsa, bunu yapılandırmak için aşağıdaki udev kuralını ve adımları kullanabilirsiniz:

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

kronî

Ubuntu 19.10 (ve sonraki sürümler) ve Red Hat Enterprise Linux 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 iletilmez. 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.confmakestepparametresi, 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 chrony bir zaman güncellemesi yapar. 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 zaman eşitlemeyi dener, ancak chrony çalışmaya başlayınca ü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.

Krony hakkında daha fazla bilgi için Krony'i Kullanma bölümüne bakın.

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'de Zaman Eşitlemesi.

cloud-init

cloud-init ile sağlanan VM görüntüleri, zaman eşitleme hizmetini ayarlamak için ntp bölümünü kullanabilir. 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 yukarıdaki bulut yapılandırmasını bir ARM şablonundaki osProfile bölümünde kullanmak üzere base64 formatına dönüştürebilirsiniz.

[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 Windows Server 2016 için Doğru Zaman’a bakın.