Linux rendszerű virtuális gépek időszinkronizálása az Azure-ban
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
További információt a Windows Time Service működése című témakörben talál. A Windows Server 2016 pontos ideje lapon a Windows Server 2016-ra vonatkozó információkat is megtalálhatja.
Á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, ö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 IEEE 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 7 3.10.0-693-es vagy újabb verziói) 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ó 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ójában további részletek találhatók arról, hogyan konfigurálható az időszinkronizálás az adott disztribúcióhoz.
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 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ú.
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/ptp1
is, 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 újabb verziók) és a Red Hat Enterprise Linux 8.x rendszeren a 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
A systemd-timesyncd szolgáltatással kapcsolatos időszinkronizálási üzenetek
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.
systemd
A 19.10 előtti SUSE- és Ubuntu-kiadásokon 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. A SUSE-ról további információt a SUSE Linux Enterprise Server 12 SP3 kiadási megjegyzéseinek 4.5.8. szakaszában 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.