Beitragsbild w32tm

w32tm Windows Zeit

Verwirrender Titel – Windows Zeit!? Das Thema beschreibt eine der Sachen, die einem als Linux Administrator leicht von der Hand gehen. Im Windows Umfeld aber die ein oder andere Kopfschmerztablette braucht. Warum es so vermeintlich kompliziert ist das unter Windows korrekt an den Start zu bekommen ist Spekulation. Es muss sein und deshalb beteiligen wir uns nicht an dieser Spekulation, sondern suchen die Lösung.

Altes Thema Zeit! Warum jetzt?

Hintergrund der Anleitung ist eine virtualisierte AD-Umgebung, in der der DHCP Server nicht auf dem Domänencontroller läuft. Warum? Unwichtig! Jetzt muss der Dienst aus verschiedenen Gründen also sein Nest räumen und auf den Domänencontroller umziehen. Die Installation des DHCP ausführen, konfigurieren, anschalten, fertig. Was aber wenn….?

Wenn also der DC ausfällt und ein anderer dessen Aufgabe ausfüllen muss? Dann sind wir geliefert. Also den DHCP Failover konfigurieren und los geht’s … hier beginnt die eigentliche Geschichte. Die Konfiguration funktioniert nicht komplett, denn die DCs haben eine Drift von mehr als 60 Sekunden! Peng!

Drift, schnelle Drift!

Problem erkannt und an sich ist das alles kein Problem, Server Zeit einstellen – synchronisieren, gut.

Stop  << Rewind

Die Umgebung in der die DCs laufen ist virtualisiert. Das heißt die Domänencontroller laufen selbst virtualisiert. Das Zeitproblem – die Drift – ist groß und es driftet schnell und zwar sehr schnell. Warum?

Der Grund ist technischer Natur – virtuelle Maschinen haben keine Batterie/keine physikalischen Prozessor. Dies wird umschifft in dem die Hersteller der Virtualisierungslösungen Zeitgeber-Dienste zur Verfügung stellen. Diese wiederum geben die Zeit dann an die VM weiter (oder umgekehrt: die VMs holen sich dort die Zeit). Die Auslastung bringt es mit sich, dass dies mehr oder minder häufig passiert. Heißt auf einem ausgelasteten System driftet es schneller: Einen spannenden Artikel zum Thema findet man in Ben Armstrong’s Virtualization Blog.

In der Community gibt es zu dieser Problematik verschiedene Meinungen und Ansätze*). Diese reichen von Taktgeberdienst deaktivieren zu externe Ressourcen abfragen. Die Autoren der Seiten unten *) angegebener Links, führen diese Diskussion.

Die Abfrage wie ein DC synchronisiert erfolgt mit folgendem Query

C:\Windows\system32>w32tm /query /status

 

Der Rückgabewert VM IC Time Synchronization Provider zeigt die Verwendung des Hyper-V Taktgebers an.

Set Time w32tm

Unser Vorgehen ist im Prinzip simple und der verwendete Ansatz ist die Verwendung eines externen Zeitservers auf dem PDC Emulator und die Synchronisation an alle andere DCs. Ansatz 1 zeigt dabei die schnelle w32tm Kommandozeilen Akrobatik, während Ansatz 2 die elegante Variante über Gruppenrichtlinien darstellt.

Im AD wird dazu der Windows Time Service w32time verwendet um die Zeit synchron zu halten. Alle Clients synchronisieren dabei mit jedem x-beliebigen DC. Innerhalb der Domäne synchronisieren wiederum diese DCs mit dem PDC Emulator. Und dieser wiederum synchronisiert sich mit einem beliebigen DC der Parent Domain. So geht das munter weiter bis der „oberste Taktgeber“ erreicht ist. Und dieser schlußendlich synchronisiert mit einer externen Quelle.

In einer flachen Struktur synchronieren die Clients mit einem DC, der wiederum vom PDC Emulator die Zeit bekommt und dieser holt sich die Zeit aus dem Netz. Klar soweit?

Ansatz 1

Schritt 1 – Der PDC Emulator

Welcher Server die Rolle des PDC Emulators hat wird als Erstes geprüft

dsquery.exe server -hasfsmo pdc

Die Rückgabe liefert uns den Server auf dem dann die Pflege der NTP Server stattfindet

w32tm /config /manualpeerlist:"ptbtime1.ptb.de ptbtime2.ptb.de" 
        /syncfromflags:manual /reliable:yes /update"
net stop w32time && net start w32time

Schritt 2 – Alle anderen DCs

w32tm /config /syncfromflags:domhier /update
net stop w32time && net start w32time

Ansatz 2

Gruppenrichtlinien sind immer ein probates Mittel zur nachhaltigen Konfiguration. Was hier passiert ist die GP-gesteuerte Variante aus Ansatz 1 mit Zucker und Sahne.

Filterung des PDC Emulators per WMI

Die erste GP wird auf den PDC Emulator angewendet. Dazu eine WMI definieren die genau das abfragt:

WMI - PDC Emulator

Der Definition der Gruppenrichtlinie wird danach dieser Filter zugewiesen. Die Richtlinie selbst nimmt zwei Konfigurationselemente auf. Unter Computerkonfiguration > Richtlinien > Administrative Vorlagen > System > Windows-Zeitdienst ändern wir Globale Konfigurationseinstellungen und reduzieren das Abfrage Intervall auf 5.

Announceflags / Abfrageintervall auf 5 reduzieren

Im Subelement Zeitanbieter > Windows-NTP-Client konfigurieren tragen wir den gewünschten NTP Server ein, der nach der Zeit gefragt werden soll. Aktivieren und die Bearbeitung beenden.

NtpServer Eintrag definieren unter Windows-NTP-Client konfigurieren Subelement

Zurück an die Kommandozeile und die Gruppenrichtlinien auf dem PDC Emulator, mit gpupdate geholt. Zeitdienst mit net stop w32time && net start w32time neu starten und dann die Abfrage des NTP Servers ausgeben lassen:

C:\Windows\system32>w32tm /query /peers
Anzahl Peers: 1

Peer: ptbtime1.ptb.de
Status: Aktiv
Verbleibende Zeit: 37.6624329s
Modus: 1 (Symmetrisch aktiv)
Stratum: 0 (nicht angegeben)
PeerAbrufintervall: 0 (nicht angegeben)
HostAbrufintervall: 6 (64s)

Wie in Ansatz 1 muss aber auch den restlichen DCs (und Clients) gesagt werden was zu tun ist. Die Definition kann  in der Default Domain Policy erfolgen. Bekannter Ort: Computerkonfiguration > Richtlinien > Administrative Vorlagen > System > Windows-Zeitdienst > Zeitanbieter > Windows-NTP-Client konfigurieren > Feld: Type: NT5DS.

Windows-NTP-client konfigurieren mit Type NT5DS

Verifizieren sollte man dies auch wieder auf einem passenden Client im Netz mittels der bekannten Abfragen.

Kontrolle

Was kontrollieren wir? Als Erstes die eingetragenen Time-Server des PDC Emulators und aller anderen Clients (natürlich eher stichpunktartig). Und zwar mit

w32tm /query /peers

Dann wäre es natürlich ideal wenn man sehen könnte ob die Zeit richtig synchron ist (Sekunden in der Uhr darstellen). Das funktioniert (nach meinen Recherchen) mit Boardmitteln nicht. Daher greifen wir zu dem OS-Tool T-Clock (github). Nach der Installation der MSVC++ 2010 Redistributable Software kann damit die Zeit sekundengenau dargestellt werden.

Mit T-Clock die Sekunden in der Taskleite anzeigen

 

*) Es gibt geteilte Meinungen im Netz ob es sinnvoll ist den Taktgeber-Dienst in den Einstellungen der VM zu deaktivieren oder nicht. Links in den Quellen mit *) markiert

Quellen

 


Beitrag veröffentlicht

in

, , ,

von

Kommentare

Schreibe einen Kommentar