Skip Ribbon Commands
Skip to main content

Ondrej Sevecek's Blog

:

Engineering and troubleshooting by Directory Master!
Ondrej Sevecek's Blog > Posts > Proč se DC někdy startuje hooodně dlouho - aka náboženství zvané Active Directory
srpen 24
Proč se DC někdy startuje hooodně dlouho - aka náboženství zvané Active Directory

Už se vám někdy stalo, že jste restartovali řadič domény (domain controller, DC) a trvalo to opravdu hooodně dlouho? A třeba, že jste se už  přihlásili a přitom to stejně ještě neběželo. Řádově minuty, někdy desítky minut.

Určitě. To se stává všem a jen málo lidí ví proč a jak to vylepšit a případně jak to úplně odstranit. Stává se to od Windows 2000 a nepřestane to ani s Windows 2012. Prostě to musíte nějak opravit.

Nejprve symptomy a situace kdy to nastává

Zaprvé máte více DC. Nebo tedy si alespoň AD myslí, že má více DC (možná jste něco odinstalovali a přitom se to správně neodebralo z AD databáze). V doméně, ve které je jen jedno DC tohle nastávat nebude. A ta další DC jsou buď nedostupná, vypnutá, nebo máte jen nějaké problémy v síti, nebo máte špatně nastaveno DNS.

Obvyklá situace je například:

  • mám více DC, ale všechna jsem je vypnul a zapínám jen jedno z nich
  • mám více DC a zrovna je všechna současně restartuju
  • mám pobočku jenom s jediným DC, spadla mi linka do centrály, a já to svoje jediné DC zrovna restartuju
  • přenesli jste si jen jedno DCčko do nějakého virtuálního testovacího prostředí
  • mám sice více DC a všechna jedou, ale jejich DNS klienti jsou špatně nastaveni

Tak potom to jediné (izolované) DC bude startovat hoodně dlouho a bude to provázeno následujícími hláškami v protokolech událostí a na klientech apod. Nadále to budu nazývat izolované DC, protože se to dá zobecnit na tento výraz.

A teď symptomy více do detailu

Hlášky v protokolech událostí jsou například následující. Speciálně tyhle dvě hlášky v DNS Server event logu krásně indikují, jak dlouho ten start trval. Bude to, jak jsem již říkal, něco jako několik minut, až desítky minut:

Event ID: 4013
Log: DNS Server
Source: DNS-Server-Service
Event Type: Warning
Message: The DNS server is waiting for Active Directory Domain Services (AD DS) to signal that the initial synchronization of the directory has been completed. The DNS server service cannot start until the initial synchronization is complete because critical DNS data might not yet be replicated onto this domain controller. If events in AD DS event log indicate that there is a problem with DNS name resolution, consider adding the IP address of another DNS server for this domain to the DNS server list in the Internet Protocol properties of this computer.

Event ID: 2
Log: DNS Server
Source: DNS-Server-Service
Event Type: Information
Message: The DNS server has started.

V AD protokolu událostí Directory Services najdete na začátku tyto informace:

Event ID: 1555
Log: Directory Service
Source: ActiveDirectory_DomainServices
Event Type: Information
Message: This directory server will not be available to clients until it has completed an initial synchronization of each writeable directory partition that it holds. At this time, these initial synchronizations have not been completed yet. The synchronizations will continue.

 

Event ID: 3096
Log: System
Source: NETLOGON
Event Type: Warning
Message: The primary Domain Controller for this domain could not be located.

Pokud je vaše DC navíc ještě nějaký FSMO (flexible single master operations role owner - prostě master), uvidíte i toto:

Event ID: 2092
Log: Directory Service
Source: ActiveDirectory_DomainServices
Event Type: Warning
Message: This server is the owner of the following FSMO role, but does not consider it valid. For the partition which contains the FSMO, the server has not replicated successfully with any of its partners since this server has been restarted. Replication errors are preventing validation of this role. Operations which require contacting a FSMO operations master will fail until this condition is corrected.

Nejspíš se vám také povede přihlásit ve skutečnosti dříve, než DC úplně naběhne. Nejde to moc poznat, ale AD je pořád mrtvé a klienti s ním nekomunikují. Takže něco jako 10 minut před přihlášením, hurá, už se můžu přihlási, a pak ještě dalších 15 minut i když už na tom DC pracujete. Tedy přesněji řečeno, LDAP už jakžtakž funguje, ale ostatní funkce ještě nejedou.

Jestli je AD na tomto konkrétním DC (a to platí obecně kdykoliv), poznáte jednoduše tak, že se mrknete do jeho RootDSE. Buď si otevřete ADSI Edit, nebo LDP a omrkněte atribut isSynchronized, který by měl být správně TRUE a přitom je FALSE:

Nebo si z příkazové řádku vyzkoušejte port scan vůči sami sobě (nebo jinému DC):

portqry -n nejakeDC -e 389

A takhle to bude trvat těch 20 minut například. Potom ADčko vytajmautuje a uvolní se a rozjede se. Poznáte to podle této události:

Event ID: 1394
Log: Directory Service
Source: ActiveDirectory_DomainServices
Event Type: Information
Message: All problems preventing updates to the Active Directory Domain Services database have been cleared. New updates to the Active Directory Domain Services database are succeeding. The Net Logon service has started.

Pokud nestartujete izolovaně, máte nějakého kamaráda v síti, ale přitom máte nějak špatně nastaveno DNS, tak to bude startovat rychleji, ale stejně uvidíte následující hlášku. I v tomto případě, bez ohledu na rychlost, je potřeba to vyřešit, protože DNS nefunguje spolehlivě a spoléhat se na mého odvěkého nepřítele NetBIOS není optimální.

Event ID: 2088
Log: Directory Service
Source: ActiveDirectory_DomainServices
Event Type: Warning
Message: Active Directory Domain Services could not use DNS to resolve the IP address of the source domain controller listed below. To maintain the consistency of Security groups, group policy, users and computers and their passwords, Active Directory successfully replicated using NetBIOS or fully qualified computer name of the source domain controller. Invalid DNS configuration may be affecting other essential operations on member servers, computers, domain controllers or application servers in this Active Directory Domain Services forest, including logon authentication or access to network resources.

Takže o co vlastně jde a proč se to děje?

Nejprve nějkterá fakta ohledně initial synchronization:

  • když DC startuje, nezačne fungovat dříve (atribut RootDSE isSynchronized = FALSE), než se mu povede alespoň jednou repliknout s nějakým kamarádem. Stačí jediný kamarád. Tedy pokud je více DC ve forestu. Pokud máte jen jedno, na nic se čekat nebude. Říká se tomu initial synchronization, neboli init sync, nebo initial replication.
  • tato úvodní replikace je pouze sebeochranná funkce. Technicky to není potřeba. Jen je to ochrana proti tomu, aby se třeba nezměnil nějaký FSMO master a nebyli dva stejní v jedné doméně. Nebo to třeba taky chrání před problémem zvaným USN rollback v případě obnovy snapshotu. Ani jedno sice dělat nemáte, ale když to nevíte, tak se vás takhle snaží AD chránit.
  • k replikaci je potřeba, aby v síti běželo ještě nějaké DC :-) Navíc zkoušíte nejprve jenom ty kamarády, se kterými replikujete normálně. Až pokud jejich spojení není možné, tak zkoušíte ostatní. Takže i když jenom chybí nějaký váš "obvyklý" kamarád, tak to bude déle trvat.
  • také musíte být schopni přeložit jeho jméno pomocí DNS a při nejhorším pomocí NetBIOS (to je ta událost event 2088).
  • pokud se vám tahle replikace nepovede do nějakého timeoutu, nakonec to DC vzdá a rozjede se (isSynchronized = TRUE a objeví se událost event 1394, i když ty problémy vyřešeny nebyly :-)). Doba je dána počtem ostatních DC. Takže když máte celkem jen jednoho kamaráda, bude to kratší, než když jich máte desítky. To si počkáte i desítky minut.

To jsou fakta ohledně AD. Související problém je v DNS:

  • DNS se nenastartuje, dokud AD není v pořádku. Takže DNS server čeká, než jeho lokální DC bude isSynchronized = TRUE.
  • dokud AD nenaběhne, nenaběhne ani DNS. Pokud máte špatně nastaveny parametry DNS překladu, máte deadlock (po česku problém slepice a vejce).

Představte si toto. Máte třeba i více DC v síti. Ale nejsou si vzájemě schopni překládat jména. Při každém startu bude každý čekat sám na sebe. Takže naše zátuhová situace může nastat i v následujícím případě - každé DC je třeba nastaveno tak, že používá pouze svůj vlastní DNS server a přitom má vypnutý NetBIOS. Vypínání NetBIOS je maximálně žádoucí a špatná konfigurace DNS je obvyklá.

Řešení a optimalizace

Jak to opravit? Opravujeme vlastně dvě základní situace:

  • obvykle jede více DC, ale máme špatně nastaveno DNS
  • DNS máme v pořádku, ale ano, často startujeme více DC současně, nebo startujeme DC opravdu izolovaně

Takže nejprve optimalizace DNS. Rozhodně nastavte DC tak, aby používali svoje DNS servery do kříže (vymyslel jsem na to termín cross-dns configuration). V následujícím obrázku jsou vlastnosti síťovky jednoho DC, jehož IP adresa je 10.10.0.12 a má kamaráda s IP adresou 10.10.0.11. Nastavte to tak, že první DNS je kamarád, zatímco vaše DNS je až druhé. Nepoužívejte adresu 127.0.0.1 - nevím proč, ale občas mi to nefunguje:

Tímhle nastavením dosáhnete toho, že při startu se ptáte prvně kamaráda. Pokud ten funguje, dozvíte se perfektně všechny DNS názvy. Když budete kamaráda později restartovat, vadit vám to nebude. Primární dotazy skončí na timeout, takže se v pohodě zeptáte sami sebe jako sekundárního DNS resolveru.

Poznámka - timeout pro primární DNS resolver je ve výchozím stavu 1sec. takže to vás nebude vůbec zdržovat.

Nestačí to dát opačně? A mít tam na prvním místě sám sebe a kamaráda až druhého? Ne, protože když se zeptáte sami sebe, je možné, že si nakešujete negativní odpověď (negative cache) - tzn. budete si ještě 20 minut pamatovat, že to jméno neexistuje. Přitom by stačilo zeptat se sekundárního kamaráda, ale to za určitých okolností neuděláte (vaše DNS totiž "částečně jede a bohužel i odpovídá").

Takže jednoznačně - kamarád je primární DNS resolver, vy sami jste až sekundární. To je pravidlo.

Otázka - co když mám pobočku s jedním DC a DNS na něm. Mám si nastavit centrálu jako primární i v tomto případě, nebo je tohle výjimka? Ano, i takto je lepší, když bude centrála primární. Těch DNS dotazů neděláte tolik, máte to všechno v keši, takže to nijak nezatěžuje. Pokud spojení do centrály není k dispozici, nebo prostě jen skončí na timeout (1 sec) zeptáte se v pohodě sami sebe.

Řešení pro izolovaná DCčka

A máme tu druhý problém. Co když často startujete jedno DC izolovaně. Příklady jsou izolované pobočky, testovací prostředí, časté starty více DC současně apod.

Stačí prostě vypnout tu initial synchronizaci (init sync). Ale zvažte, jestli je to dobrý nápad. Připravujete se o ochranu proti USN rollback a FSMO seize operacím a kdoví čemu ještě:

HKLM\System\CurrentControlSet\Services\NTDS\Parameters
Repl Perform Initial Synchronizations = REG_DWORD = 0

Závěr

Skandujte se mnou: DNS do kříže! DNS do kříže! DNS do kříže! DNS do kříže! DNS do kříže! DNS do kříže!

PS: omlouvám se všem ne-křesťanům, nemá to nic společného s náboženstvím. Snad jen možná s náboženstvím zvaným Active Directory!

 

Comments

Dotaz

Super clanok Ondrej ;)

A mam pripomienku k tvojej vete:"Nastavte to tak, že první DNS je kamarád, zatímco vaše DNS je až druhé. Nepoužívejte adresu 127.0.0.1". Myslim, ze mas pravdu, ale je smutne, ze ked robis DCPROMO na W2008, tak on sam pri instalacii si premeni ako primarny DNS 127.0.0.1 :)
Ondrej Zilinec on 24.8.2012 13:15

Zo SVK

DNS do kříže! DNS do kříže! DNS do kříže! DNS do kříže! DNS do kříže! DNS do kříže!
Ondrej Zilinec on 24.8.2012 13:20

IPSec

Chcem sa opytat ako je to s tym, ze ked je vyzadovane IPSec medzi kontrolermi. Inicializuje sa IPSec este pred samotnymi DNS requestami?
Ondrej Zilinec on 24.8.2012 13:29

IPSec

Takze akurat z bojoveho pola. Pri zapnuti Request IPSec for Inbound a Outbound traffic je to cele v prdeli. Asi IPSec servis startuje ako posledny ;)
Ondrej Zilinec on 24.8.2012 13:47

Re: Proč se DC někdy startuje hooodně dlouho - aka náboženství zvané Active Directory

AD tím práve odporúča používať loopback, ja som nemal chuť to testovať ale hádam Ned Pyle sa bude vediet vyjadriť prečo je to tak
...
3.When referencing a DNS server on itself, a DNS client should always use a loopback address and not a real IP address.
...
runco on 29.8.2012 22:05

Re: Proč se DC někdy startuje hooodně dlouho - aka náboženství zvané Active Directory

já vím, ale jak jsem psal, měl jsem s tím párkrát nějaký problém. Ten server na 127.0.0.1 neodpovídal - prostě timeout. Nikdy jsem to nedořešil, protože jsem neměl čas, ale dělá mi to od doby 2008 a myslím, že naposledy tak před dvěma měsíci.

Druhý důvod, proč já tam dávám raději skutečnou IP adresu, protože ta 127.0.0.1 se nezobrazuje v některých výpisech a je to pak zmatené.
ondass on 30.8.2012 1:28

Re: Proč se DC někdy startuje hooodně dlouho - aka náboženství zvané Active Directory

To pomalé startování je pro mě noční můrou, samozřejmě mám nastaveno 127.0.0.1, už jsem přemýšlel, že vyměním disky za ssd (už jsem to projednal se šéfem a on mi to odkýval), nebo že zmigruji z 2008 na 2012. Po příštích aktualizacích snad bude AD nabíhat méně než 25 minut. Díky.
marksenior on 5.9.2012 12:09

Add Comment

Title


Pole Title nemusíte vyplňovat, doplní se to samo na stejnou hodnotu jako je nadpis článku.

Author *


Pole Author nesmí být stejné jako pole Title! Mám to tu jako ochranu proti spamu. Roboti to nevyplní dobře :-)

Body *


Type number two as digit *


Semhle vyplňte číslici dvě. Předchozí antispemové pole nefunguje úplně dokonale, zdá se, že jsou i spamery, které pochopily, že je občas potřeba vyplnit autora :-)

Email


Emailová adresa, pokud na ni chcete ode mě dostat odpověď. Nikdo jiný než já vaši emailovou adresu neuvidí.

Attachments