Linux rendszerű virtuális gépek időszinkronizálása az Azure-ban

Figyelemfelhívás

Ez a cikk a CentOS-ra, egy olyan Linux-disztribúcióra hivatkozik, amely közel áll az élettartam (EOL) állapotához. Fontolja meg a használatát, és ennek megfelelően tervezze meg. További információ: CentOS End Of Life útmutató.

A következőkre vonatkozik: ✔️ Linux rendszerű virtuális gépek ✔️ Rugalmas méretezési csoportok ✔️ Egységes méretezési csoportok

Az időszinkronizálás fontos a biztonság és az esemény korrelációja szempontjából. Néha elosztott tranzakciók végrehajtására használják. Több számítógépes rendszer közötti időpontosság szinkronizálással érhető el. A szinkronizálást több dolog is befolyásolhatja, beleértve az újraindításokat és a hálózati forgalmat az időforrás és a számítógép között, amely beolvassa az időt.

Az Azure-t a Windows Server 2016-ot futtató infrastruktúra felügyeli. A Windows Server 2016 továbbfejlesztett algoritmusokkal korrigálja az időt, és kondicionálhatja a helyi órát az UTC-vel való szinkronizáláshoz. A Windows Server 2016 Pontos idő funkciója jelentősen javította a virtuális gépeket a gazdagéppel a pontos idő érdekében szabályozó VMICTimeSync szolgáltatás működését. A fejlesztések közé tartozik a virtuális gép indításának pontosabb kezdeti ideje, illetve a virtuális gép visszaállítása és a késés javítása.

Feljegyzés

A Windows Time service gyors áttekintéséhez tekintse meg ezt a magas szintű áttekintő videót.

További információ: Pontos idő a Windows Server 2016-hoz.

Áttekintés

A számítógépóra pontossága azt méri, hogy a számítógép órája milyen közel van az egyezményes világidő (UTC) időszabványához. Az UTC-t pontos atomórák nemzetközi mintája határozza meg, amelyek 300 év alatt csak egy másodperccel kapcsolhatók ki. Az UTC közvetlen olvasásához azonban speciális hardver szükséges. Ehelyett az időkiszolgálók szinkronizálva vannak az UTC-sel, és más számítógépekről érhetők el a méretezhetőség és a robusztusság érdekében. Minden számítógép rendelkezik időszinkronizálási szolgáltatással, amely tudja, hogy milyen időkiszolgálókat kell használni, és rendszeres időközönként ellenőrzi, hogy a számítógép óráját ki kell-e javítani, és szükség esetén módosítja-e az időt.

Az Azure-gazdagépek olyan belső Microsoft-időkiszolgálókkal vannak szinkronizálva, amelyek a Microsoft tulajdonában lévő Stratum 1-eszközökről veszik át az idejüket GPS-antennákkal. Az Azure-beli virtuális gépek vagy attól függhetnek, hogy a gazdagép a pontos időt (gazdaidőt) adja át a virtuális gépnek, vagy a virtuális gép közvetlenül időt kaphat egy időkiszolgálótól, vagy mindkettő kombinációjától.

Önálló hardveren a Linux operációs rendszer csak a rendszerindításkor olvassa be a gazdagép hardverórát. Ezt követően az óra a Linux kernel megszakítás időzítőjének használatával marad fenn. Ebben a konfigurációban az óra idővel eltolódik. Az Azure-beli újabb Linux-disztribúciókban a virtuális gépek a Linux integrációs szolgáltatásokban (LIS) található VMICTimeSync szolgáltatóval gyakrabban kérdezhetnek le a gazdagépről származó órafrissítéseket.

A gazdagéppel folytatott virtuálisgép-interakciók az órát is befolyásolhatják. A memóriamegőrző karbantartás során a virtuális gépek legfeljebb 30 másodpercig szünetelnek. Például a karbantartás megkezdése előtt a virtuális gép óra 10:00:00 óra és 28 másodpercig tart. A virtuális gép folytatása után a virtuális gépen az óra továbbra is 10:00:00-kor jelenik meg, ami 28 másodperc lenne. Ennek javítása érdekében a VMICTimeSync szolgáltatás figyeli a gazdagépen zajló eseményeket, és a kompenzálás érdekében frissíti a linuxos virtuális gépek napközbeni óráját.

Az időszinkronizálás működése nélkül a virtuális gépen lévő óra hibákat halmozna fel. Ha csak egy virtuális gép van, a hatás csak akkor lehet jelentős, ha a számítási feladat nagyon pontos időtartást igényel. A legtöbb esetben azonban több, egymással összekapcsolt virtuális gépünk van, amelyek időt használnak a tranzakciók nyomon követésére, és az időnek konzisztensnek kell lennie a teljes üzembe helyezés során. Ha a virtuális gépek közötti idő eltér, a következő hatások láthatók:

  • A hitelesítés sikertelen lesz. Az olyan biztonsági protokollok, mint a Kerberos vagy a tanúsítványfüggő technológia, az idő konzisztensségére támaszkodnak a rendszerekben.
  • Nehéz kitalálni, hogy mi történt a rendszerben, ha a naplók (vagy más adatok) nem egyeznek meg időben. Ugyanaz az esemény úgy nézne ki, mintha különböző időpontokban történt volna, ami megnehezíti a korrelációt.
  • Ha az óra ki van kapcsolva, a számlázást helytelenül lehet kiszámítani.

Konfigurációs lehetőségek

Az időszinkronizáláshoz szükség van egy időszinkronizálási szolgáltatás futtatására a Linux rendszerű virtuális gépen, valamint egy pontos időinformáció forrását, amely alapján szinkronizálni kell. Az időszinkronizálási szolgáltatás általában ntpd vagy chronyd, de más nyílt forráskód időszinkronizálási szolgáltatások is használhatók. A pontos időadatok forrása lehet az Azure-gazdagép vagy a nyilvános interneten keresztül elérhető külső időszolgáltatás. A VMICTimeSync szolgáltatás önmagában nem biztosít folyamatos időszinkronizálást az Azure-gazdagép és a Linux rendszerű virtuális gép között, kivéve a fent leírt gazdagépkarbantartási szüneteket.

A linuxos Azure Marketplace-rendszerképek többsége korábban kétféleképpen lett konfigurálva:

  • Alapértelmezés szerint nincs időszinkronizálási szolgáltatás
  • Az ntpd időszinkronizálási szolgáltatásként fut, és a hálózaton keresztül elérhető külső NTP-időforrással szinkronizál. Az Ubuntu 18.04 LTS Marketplace-rendszerképek például ntp.ubuntu.com használnak.

Az ntpd megfelelő szinkronizálásának ellenőrzéséhez futtassa a ntpq -p parancsot.

Egyes Linux rendszerű Azure Marketplace-rendszerképek időszinkronizálási szolgáltatásként való használatára módosulnak, a chronyd pedig úgy van konfigurálva, hogy a külső NTP-időforrás helyett az Azure-gazdagépen szinkronizáljon. Az Azure-gazdaidő általában a legjobb időforrás a szinkronizáláshoz, mivel pontosan és megbízhatóan tartható fenn, és a nyilvános interneten keresztüli külső NTP-időforráshoz való hozzáféréssel járó változó hálózati késések nélkül érhető el.

A VMICTimeSync párhuzamosan használatos, és két függvényt biztosít:

  • Azonnal frissíti a Linux rendszerű virtuális gép napközbeni óráját egy gazdagép karbantartási eseménye után
  • Létrehoz egy I Enterprise kiadás E 1588 Precision Time Protocol (PTP) hardveres óraforrást /dev/ptp eszközként, amely az Azure-gazdagéptől biztosítja a pontos napidőt. A Chronyd konfigurálható úgy, hogy szinkronizálja ezt az időforrást (ez a legújabb Linux-rendszerképek alapértelmezett konfigurációja). A 4.11-es vagy újabb kernelverziójú Linux-disztribúciók (vagy az RHEL/CentOS 7 3.10.0-693-es vagy újabb verziója) támogatják a /dev/ptp eszközt. A korábbi kernelverziók esetében, amelyek nem támogatják a /dev/ptp protokollt az Azure-gazdaidőhöz, csak külső időforrással való szinkronizálás lehetséges.

Az alapértelmezett konfiguráció természetesen módosítható. Az ntpd és a külső időforrás használatára konfigurált régebbi rendszerképek módosíthatók a chronyd és a /dev/ptp eszköz azure-beli gazdaidejének használatára. Hasonlóképpen, az Azure-gazdaidőt /dev/ptp eszközön keresztül használó rendszerképek konfigurálhatók külső NTP-időforrás használatára, ha az alkalmazás vagy a számítási feladat megköveteli.

Eszközök és források

Vannak alapvető parancsok az időszinkronizálás konfigurálásának ellenőrzéséhez. A Linux-disztribúció dokumentációja további részleteket tartalmaz az adott disztribúció időszinkronizálásának legjobb konfigurálásának módjáról.

Integrációs szolgáltatások

Ellenőrizze, hogy az integrációs szolgáltatás (hv_utils) be van-e töltve.

$ sudo lsmod | grep hv_utils

Ehhez hasonlót kell látnia:

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

A PTP óra forrásának ellenőrzése

A Linux újabb verzióiban az Azure-gazdagépnek megfelelő Precision Time Protocol (PTP) óraforrás a VMICTimeSync-szolgáltató részeként érhető el. A Red Hat Enterprise Linux vagy a CentOS 7.x régebbi verzióiban a Linux Integration Services letölthető és használható a frissített illesztőprogram telepítéséhez. Ha elérhető a PTP óraforrás, a Linux-eszköz /dev/ptpx formátumú lesz.

Megtekintheti, hogy mely PTP-óraforrások érhetők el.

$ ls /sys/class/ptp

Ebben a példában a visszaadott érték ptp0, ezért ezt használjuk az óra nevének ellenőrzéséhez. Az eszköz ellenőrzéséhez ellenőrizze az óra nevét.

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

Ennek vissza kell térnie hyperv, vagyis az Azure-gazdagépnek.

Egyes Linux rendszerű virtuális gépeken több PTP-eszköz is megjelenhet a listában. Az egyik példa a gyorsított hálózatkezelésre, a Mellanox mlx5 illesztő szintén létrehoz egy /dev/ptp eszközt. Mivel az inicializálási sorrend minden Linux-rendszerindításkor eltérő lehet, előfordulhat /dev/ptp0 , hogy az Azure-gazdagépnek megfelelő PTP-eszköz vagy az /dev/ptp1is, ami megnehezíti a megfelelő óraforrással való konfigurálást chronyd . A probléma megoldásához a legújabb Linux-rendszerképek olyan szabálysal udev rendelkeznek, amely létrehozza azt a szimlinket /dev/ptp_hyperv , amely /dev/ptp az Azure-gazdagépnek megfelelő bejegyzésnek felel meg. A Chronyt mindig úgy kell konfigurálni, hogy a szimlinket használja ahelyett /dev/ptp_hyperv/dev/ptp0 vagy /dev/ptp1.

Ha problémákat tapasztal az /dev/ptp_hyperv eszköz nem létrehozásával kapcsolatban, konfigurálhatja az udev alábbi szabályt és lépéseket:

MEGJEGYZÉS: A legtöbb Linux-disztribúciónak nincs szüksége erre az udev-szabályra, mivel a rendszer újabb verzióiban lett implementálva

Hozza létre a udev szabályfájlt:

$ 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

Indítsa újra a virtuális gépet, VAGY töltse újra a szabályokat a udev következőkkel:

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

chrony

Az Ubuntu 19.10-s és újabb verzióiban a Red Hat Enterprise Linux és a CentOS 8.x chrony ptP-forrásóra használatára van konfigurálva. A régebbi Linux-kiadások a chrony helyett a Network Time Protocol démont (ntpd) használják, amely nem támogatja a PTP-forrásokat. Ha engedélyezni szeretné a PTP-t ezekben a kiadásokban, a chrony-t manuálisan kell telepíteni és konfigurálni (a chrony.conf-ban) az alábbi utasítással:

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

Ha a /dev/ptp_hyperv symlink elérhető, használja a /dev/ptp0 helyett, hogy elkerülje a Mellanox mlx5 illesztőprogram által létrehozott /dev/ptp eszközzel való félreértést.

A rendszer nem továbbítja automatikusan a stratumadatokat az Azure-gazdagépről a Linux-vendégnek. Az előző konfigurációs sor azt határozza meg, hogy az Azure-gazdagép időforrását Stratum 2-ként kell kezelni, ami azt eredményezi, hogy a Linux-vendég magát Stratum 3-ként jelenti. Ha azt szeretné, hogy a Linux-vendég másként jelentse magát, módosíthatja a rétegbeállítást a konfigurációs sorban.

Alapértelmezés szerint a chronyd felgyorsítja vagy lelassítja a rendszerórát, hogy kijavítsa az időeltolódást. Ha a sodródás túl nagy lesz, a chrony nem tudja kijavítani a sodródást. Ennek leküzdése érdekében a makestep /etc/chrony.conf paraméter módosítható úgy, hogy időszinkronizálást kényszerítsen, ha a sodródás meghaladja a megadott küszöbértéket.

makestep 1.0 -1

Itt a időrendi időfrissítést kényszeríti ki, ha a sodródás nagyobb, mint 1 másodperc. A módosítások alkalmazásához indítsa újra a időrendi szolgáltatást:

$ sudo systemctl restart chronyd && sudo systemctl restart chrony

Bizonyos esetekben előfordulhat, hogy a systemd-timesyncd szolgáltatás továbbra is engedélyezve van, és megpróbál szinkronizálást végrehajtani újraindításkor, ha továbbra is a következőhöz hasonló üzenetek jelennek meg a syslogban:

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)

Letilthatja a következő használatával:

$ sudo systemctl disable systemd-timesyncd

A legtöbb esetben a systemd-timesyncd a rendszerindítás során próbálkozik, de ha a chrony elindul, felülírja és az alapértelmezett időszinkronizálási forrássá válik.

Az Ubuntu-ról és az NTP-ről további információt az Időszinkronizálás című témakörben talál.

További információ a Red Hatról és az NTP-ről: Az NTP konfigurálása.

A időrendi sorrendről további információt a Chrony használata című témakörben talál.

rendszerezett

A SU Standard kiadás és az Ubuntu 19.10 előtti kiadásain az időszinkronizálás rendszerezett használatával van konfigurálva. Az Ubuntu-ról további információt az Időszinkronizálás című témakörben talál. Az SU Standard kiadás-ról további információt a SU 4.5.8 szakaszában Standard kiadás Linux Enterprise Server 12 SP3 kibocsátási megjegyzésekben talál.

cloud-init

Azok a képek, amelyek a cloud-init használatával építik ki a virtuális gépet, a ntp szakasz használatával beállíthatnak egy időszinkronizálási szolgáltatást. Példa a cloud-init időrendi telepítésére és konfigurálására az Ubuntu virtuális gépek PTP-óraforrásának használatára:

#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

Ezt követően a fenti cloud-konfigurációt az ARM-sablon szakaszában osProfile használhatja:

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

Az Azure-beli cloud-init szolgáltatással kapcsolatos további információkért tekintse meg az Azure-beli Linux rendszerű virtuális gépek felhőalapú init-támogatásának áttekintését.

Következő lépések

További információ: Pontos idő a Windows Server 2016-hoz.