ROZDZIAŁ 20

Interpretowanie dziennika usługi Klastra

W dzienniku usługi Klastra zapisywane są informacje o działaniach usługi Klastra (Clussvc.exe wraz z procesami pokrewnymi) na elemencie klastra serwerowego. Dziennik ten, zwany także dziennikiem diagnostycznym, zawiera kompleksowe informacje przydatne przy rozwiązywaniu problemów. Dziennik jest domyślnie włączony w Windows 2000, a jego zapisy przechowywane są w pliku o rozszerzeniu .log w folderze %SystemRoot%\Cluster.

Zapisy dziennika mogą wydawać się trudne do zrozumienia, ale w istocie zawierają dużą ilość informacji, w interpretacji których pomoże niniejszy rozdział.

W tym rozdziale

Pojęcia podstawowe

Zapisy dotyczące operacji formowania i dołączania

Przykłady niepowodzenia

Wskazówki

Kody stanu

Numery kontekstu

Zasoby dodatkowe

Pojęcia podstawowe

W tym rozdziale określenie klaster zawsze dotyczy klastra serwerowego, czyli grupy serwerów połączonych za pomocą usługi Klastra, zapewniającej dużą dostępność i wsparcie awaryjne dla aplikacji. Usługa Klastra składa się z pliku Clussvc.exe i związanych z nim plików DLL i plików wykonywalnych.

Działania klastra obejmują wszystkie zdarzenia mające miejsce w klastrze, w tym operacje inicjacji, dołączania i formowania.

Dziennik usługi Klastra jest dziennikiem diagnostycznym zawierającym pełniejsze informacje o działaniach klastra niż dziennik zdarzeń Microsoft Windows 2000 – w dzienniku usługi Klastra zapisywane są działania poprzedzające zdarzenia zapisane w dzienniku zdarzeń. Przy diagnozie problemu należy więc w pierwszej kolejności sprawdzić dziennik zdarzeń, z następnie dziennik usługi Klastra. Więcej informacji znajduje się dalej w tym rozdziale pod hasłem „Korelacja dziennika zdarzeń Windows 2000 z dziennikiem usługi Klastra”.

Uwaga: Dziennik Klastra zawiera tylko informacje o zdarzeniach na jednym członku klastra. Zdarzenia Równoważenia obciążenia sieciowego nie są w nim zapisywane. Aby zapisać wszystkie zdarzenia mające miejsce w klastrze, należy włączyć dziennik na każdym członku klastra.

Aby poprawnie zinterpretować dziennik Klastra, należy zrozumieć:

  Strukturę zapisów dziennika.

  Znaczenia skrótów, takich jak [DM], [RGP] i [JOIN].

  Znaczenie kodów stanu.

  Metody wykrycia źródła problemu.

Struktura zapisów dziennika usługi Klastra

Na pierwszy rzut oka zapisy dziennika Klastra mogą wydawać się zupełnie niezrozumiałe, jednak w rzeczywistości są one stosunkowo łatwe do rozłożenia. Rozważmy poniższy przykład, pierwszy wiersz w treści typowego dziennika Klastra:

378.32c::1999/06/09-18:00:18.874 Cluster service started - Cluster Node Version 3.2051

Głównymi elementami zapisu, występującymi w każdym wierszu dziennika są:

  Identyfikatory procesu i wątku wydającego zapis, oddzielone od siebie kropką. W powyższym przykładzie identyfikator procesu wynosi 378, a identyfikator wątku 32c.

  Znacznik czasu GMT w formacie:

yyyy/mm/dd-hh:mm:ss.sss

gdzie:

  yyyy/mm/dd reprezentuje rok, miesiąc i dzień.

  hh:mm:ss.sss reprezentuje godzinę, minuty i sekundy (z dokładnością do tysięcznej sekundy).

W przykładzie jest 18,874 sekund po godzinie 18.00 GMT.

  Opis zdarzenia, na przykład „Cluster service started” (Uruchomienie usługi Klastra).

Zapisy dziennika Klastra dotyczą zdarzeń komponentów lub plików DLL zasobów.

Zapisy dotyczące zdarzeń komponentów

Usługa Klastra składa się z kilku komponentów, takich jak Menedżer bazy danych i Menedżer globalnej aktualizacji, których interakcje zapisywane są w dzienniku usługi Klastra.

Przykładem zapisu dotyczącego zdarzenia komponentu może być:

378.380::1999/06/09-18:00:50.881 [NM] Forming cluster membership.

W zapisach dotyczących zdarzeń komponentów, po identyfikatorach procesu i wątku oraz znaczniku czasu występują:

  Skrót, zawarty w kwadratowym nawiasie (na przykład [NM] lub [JOIN]), należący do jednej z dwóch następujących kategorii:

  Skróty określające który komponent dokonał zapisu (w powyższym przykładzie jest to [NM], czyli Menedżer węzłów).

  Skróty określające stan węzła (bieżącą operację) z momentu dokonania zapisu, na przykład [INIT] lub [JOIN].

Skrót może być kombinacją określenia komponentu z określeniem stanu, na przykład [NMJOIN]:

388.55c::1999/06/09-18:08:25.621 [NMJOIN] Processing request by node 2 to begin joining.

  Opis zdarzenia (na przykład „Found the quorum resource 254ef0e8-1937-11d3-b3fe-00a0c986aa14”). W przykładzie „254ef0e8-1937-11d3-b3fe-00a0c986aa14” jest identyfikatorem GUID zasobu znalezionego przez komponent. Gdy zasób jest utworzony przez usługę Klastra, to zazwyczaj występuje zapis określający nazwę zasobu, który ułatwia późniejszą identyfikację zasobu w opisach zdarzeń zawierających GUID zasobu, na przykład:

378.380::1999/06/09-18:00:51.193 [FM] Name for Resource 254ef0e5-1937-11d3-b3fe-00a0c986aa14 is ‘Cluster IP Address’.

Znaczenia skrótów

W tabeli 20.1 przedstawione są skróty używane w dzienniku Klastra do określenia komponentów i stanów węzła.

Tabela 20.1 Skróty komponentów i stanów węzła występujące w dzienniku Klastra

Skrót Stan węzła lub komponent
[API] Wsparcie API. Oznacza zapisy pochodzące z komponentu usługi Klastra, który zapewnia wsparcie API klastra serwerowego.
[ClMsg] Zawiadamianie klastrowe. Komponent wykorzystany przez Regroup (Menedżera członkostwa – patrz niżej) do wysyłania i odbierania wiadomości.
[ClNet] Aparat sieciowy klastra. Ogólny kod ustalający sieciową konfigurację danego węzła.
[CP] Menedżer punktów kontrolnych. Jeśli zasób posiada klucz rejestrowy zarejestrowany dla punktów kontrolnych, to Menedżer punktów kontrolnych zapisuje punkt kontrolny na dysku kworum w przypadku każdej zmiany klucza dokonanej wówczas, gdy zasób jest online. W przypadku awarii, przed ponownym udostępnieniem zasobu na węźle zastępczym odpowiedni klucz rejestrowy zostaje zaktualizowany przy użyciu punktu kontrolnego.
[CS] Usługa Klastra. Skrót ten oznacza komunikaty utworzone przez usługę, nie przez jej komponenty.
[DM] Menedżer bazy danych. Agent, poprzez którego pozostałe komponenty odczytują lub modyfikują bazę danych konfiguracji klastra.
[EP] Procesor zdarzeń. Komponenty usługi Klastra rejestrują się w Procesorze zdarzeń w celu otrzymania wewnętrznych zdarzeń, takich jak odłą

czenie lub przywrócenie węzła.

[FM] Zarządca kryzysowy (Failover Manager). Koordynuje przenoszenie grup pomiędzy węzłami w przypadku awarii w oparciu o kryteria określone we właściwościach grupy.
[GUM] Menedżer globalnej aktualizacji. Mechanizm RPC służący do dystrybucji informacji do wszystkich węzłów klastra.
[INIT] Początkowy stan węzła istniejący przed jego dołączeniem do klastra.
[JOIN] Stan węzła następujący po stanie [INIT] w przypadku próby dołączenia węzła do klastra. Jeśli operacja dołączania powiedzie się, to węzeł przyjmie stan członka klastra.
[LM] Menedżer dziennika. Utrzymuje dziennik kworum.
[MM] Menedżer członkostwa, znany i zapisywany także jako Regroup ([RGP]). Patrz [RGP] dalej w tej tabeli.
[NM] Menedżer węzłów. Śledzi stan pozostałych węzłów klastra oraz ogóln

ą sieciową konfigurację klastra.

[OM] Menedżer obiektów. Utrzymuje w pamięci bazę danych obiektów (węzłów, sieci, grup itp.). Z każdym obiektem jest powiązany typ oraz zbiór metod, którymi inne komponenty mogą nim manipulować. Każdy obiekt klastra jest reprezentowany w przestrzeni Menedżera obiektów. Menedżer obiektów nie odróżnia typów obiektów
[RGP] Regroup, znany i zapisywany także jako Menedżer członkostwa ([MM]). Śledzi które węzły należą do klastra. Regroup dokonuje zapisów w dzienniku podczas inicjacji, operacji formowania i operacji dołączania oraz w przypadku zmian składu klastra.
[RM] Monitor zasobów. Może to być dowolny proces usługi Klastra (egzemplarz programu Resrcmon.exe) kontrolujący poszczególne zasoby

Zapisy dotyczące DLL zasobów

Ponieważ grupy zasobów są podstawową jednostką zastępowania awaryjnego, to zapisy dzienników dotyczące DLL zasobów są niezbędne do zrozumienia działań klastra. Poniższy przykład dotyczy procesu arbitrażu dyskowego.

15c.458::1999/06/09-18:00:47.897 Physical Disk <Disk D:>: [DISKARB] Arbitration Parameters (1 9999).

W przeciwieństwie do zapisów dotyczących zdarzeń komponentów, które zawierają skrót nazwy komponentu występujący pomiędzy znacznikiem czasu a opisem zdarzenia, zapisy dotyczące zdarzeń DLL zasobów zawierają następujące informacje:

  Typ zasobu („Physical Disk”)

  Nazwę zasobu („<Disk I:>”)

W powyższym przykładzie opisem zdarzenia jest „[DISKARB] Arbitration Parameters (1 9999)”.

Znaczenie kodów stanu i statusu

Interpretacja kodów stanu i statusu jest ważnym elementem procesu rozszyfrowywania dziennika Klastra, ale nie jest trudna. Zastosować należy dwie następujące procedury.

  Aby znaleźć znaczenie kodów statusu, należy:

  Wysłać następujące polecenie:

net helpmsg [numer_błędu]

Na przykład, w poniższym przykładzie numerem błędu jest „error 5”. Polecenie net hlpmsg zwróci „Access is denied” (dostęp odmówiony). Błąd implikuje, że problem jest związany z uprawnieniami.

388.4e8::1999/06/09-20:20:57.281 [NM] Received advice that node 2 has failed with error 5.

Aby odkryć przyczynę błędu, należy jeszcze zbadać jego kontekst.

  Aby znaleźć znaczenie kodów stanu, należy:

1. Na podstawie zawartego w dzienniku opisu zdarzenia ustalić typ obiektu (grupa, zasób, stan węzła, sieć, interfejs sieciowy) związany z danym zapisem.

Uwaga: W Windows 2000 nazwa zasobu zostaje zapisana w dzienniku wraz z jego identyfikatorem GUID po uruchomieniu usługi Klastra. Nazwa zasobu powinna więc znajdować się w jednym zapisie wraz z GUID, chyba że dany zapis już został zastąpiony. Nazwę zasobu można znaleźć także w rejestrze, pod podkluczem oznaczonym identyfikatorem GUID danego zasobu. Więcej informacji znajduje się dalej w tym rozdziale pod hasłem „Identyfikatory GUID w rejestrze”.

2. Odnaleźć znaczenie kodu w odpowiedniej tabeli (tabele są przedstawione dalej w tym rozdziale pod hasłem „Kody stanu”).

Na przykład, w poniższym przykładowym zapisie „state 129” oznacza stan zasobu klastra online i oczekującego.

388.398::1999/06/09-18:07:45.295 [FM] FmpRmOnlineResource: Returning. Resource 254ef0e8-1937-11d3-b3fe-00a0c986aa14, state 129, status 997.

Metody wykrycia źródła problemu

W wielu przypadkach przydatnym sposobem jest czytanie dziennika od końca do początku. Jednakże przy stosowaniu tej metody pierwsze odnalezione podejrzane zdarzenie może nie być prawdziwą przyczyną awarii. Początkowy błąd może wywierać skutki uboczne prowadzące do innych błędów.

Do śledzenia operacji w dzienniku Klastra służą także następujące informacje:

  Znaczniki czasu

  Identyfikatory GUID

  Zasoby

  Grupy

  Identyfikatory procesów i wątków

  Numery sekwencji GUM

  Licznik wspólnych blokad zawarty w zmiennej globalnej gdwQuoBlockingResources

Znaczniki czasu

Zauważalne w znacznikach czasu przerwy trwające więcej niż jedną sekundę oznaczają okresy bezczynności usługi Klastra. Przerwa może być spowodowana tym, że wszystkie wątki zakończyły swoje działanie.

Na przykład, rozważmy następujące zapisy dotyczące operacji formowania klastra i dołączania do klastra.

378.328::1999/06/09-18:00:52.006 [FM] FmpPropagateResourceState: resource 76d0bf88-5e2c-44b9-9bdb-3eb677487afb online event. 378.328::1999/06/09-18:00:52.006 [FM] FmpRmWorkItemHandler: Exit 378.3a8::1999/06/09-18:00:52.006 [GUM] GumSendUpdate: Locker waiting type 0 context 11 378.3a8::1999/06/09-18:00:52.006 [GUM] Thread 0x3a8 UpdateLock wait on Type 0 378.3a8::1999/06/09-18:00:52.006 [GUM] DoLockingUpdate successful, lock granted to 1 378.3a8::1999/06/09-18:00:52.006 [GUM] GumSendUpdate: Locker dispatching seq 1673 type 0 context 11 378.3a8::1999/06/09-18:00:52.006 [GUM] GumpDoUnlockingUpdate releasing lock ownership 378.3a8::1999/06/09-18:00:52.006 [GUM] GumSendUpdate: completed update seq 1673 type 0 context 11 378.3c8::1999/06/09-18:00:53.053 [GUM] GumSendUpdate: Locker waiting type 1 context 4098

Dwa pierwsze zapisy informują o inicjacji globalnej aktualizacji przez Zarządcę kryzysowego, a przedostatni zapis informuje o zakończeniu aktualizacji. Zauważyć można przerwę czasową pomiędzy przedostatnim a ostatnim zapisem.

W niektórych przypadkach znaczniki występują nie w kolejności czasowej. Na przykład, w poniższym przykładzie (dotyczącym klastra Microsoft Windows NT 4.0) zapis o znaczniku czasu 01-20:43:09.257 („[GUM] Thread 0x7f UpdateLock wait on Type 1”) występuje poza kolejnością.

07b::01-20:43:09.304 [GUM] GumSendUpdate: completed update seq 1191 type 1 context 0 07f::01-20:43:09.257 [GUM] Thread 0x7f UpdateLock wait on Type 1 07f::01-20:43:09.304 [GUM] DoLockingUpdate successful, lock granted to 2

Przyczyną jest to, że dziennik odczytuje godzinę systemową przed próbą uzyskania dostępu do pliku dziennika (uzyskania blokady zapisu). W tym przypadku wątek 07b uzyskał blokadę zapisu wcześniej niż wątek 07f, który odczytał godzinę, ale nie uzyskał blokady zapisu.

Aby dowiedzieć się, dlaczego 07f nie uzyskał blokady zapisu jednocześnie z godziną systemową, należy poszukać zapisów zawierających identyfikator wątku 07f. Dwa poniższe zapisy pokazują, że wątek 07f został przerwany przez wątek 0ae w ciągu aktualizacji GUM:

07f::01-20:43:09.257 [GUM] GumSendUpdate: Locker waiting type 1 context 4098 0ae::01-20:43:09.265 [GUM] GumSendUpdate: Locker waiting type 0 context 8

Identyfikatory GUID, zasoby i grupy

Ponieważ zapisy dziennika usługi Klastra często nie zawierają nazwy zasobu, to konieczne jest także zwrócenie uwagi na identyfikatory GUID zasobów. Zapis informujący o wywołaniu zasobu offline powinien zawierać nazwę zasobu wraz z GUID, dlatego zapis ten jest przydatnym sposobem skojarzenia GUID z nazwą zasobem.

Na przykład, poniższy zapis pokazuje, że zasób „254ef0e5-1937-11d3-b3fe-00a0c986aa14” jest zasobem adresu IP klastra:

378.130::1999/06/09-18:02:24.189 [FM] FmpOfflineResource: Offline resource <Cluster IP Address> <254ef0e5-1937-11d3-b3fe-00a0c986aa14>

Nazwa zasobu znajduje się także w zapisie dokonanym przez Zarządcę kryzysowego [FM] podczas tworzenia zasobu, na przykład:

378.380::1999/06/09-18:00:51.209 [FM] Name for Resource 191c151b-a8e5-45a6-8330-d38669845e66 is ‘testwinfile’.

Według modelu stosowanego przez usługę Klastra, zasoby zostają podłączone maksymalnie szybko. Usługa spróbuje podłączyć nawet setki zasobów jednocześnie.

Tworzenie grup i zasobów

Następujące zapisy informują o udanym utworzeniu grupy i zasobu przy uruchamianiu usługi Klastra. W obu przypadkach obiekt musi być śledzony przy użyciu jego GUID, ale należy zwrócić uwagę na zapis zawierający nazwę („Name for”) grupy lub zasobu. Komponentem odpowiedzialnym za tworzenie i inicjację grup i zasobów przy uruchamianiu usługi jest Zarządca kryzysowy.

W dwóch pierwszych zapisach Zarządca kryzysowy tworzy grupę w swojej pamięci i inicjuje ją, stosując wartości określone dla grupy w kluczu rejestrowym klastra.

378.380::1999/06/09-18:00:51.209 [FM] Creating group d103ed17-f7bc-4ff9-8a64-e692f4ecb663 378.380::1999/06/09-18:00:51.209 [FM] Initializing group d103ed17-f7bc-4ff9-8a64-e692f4ecb663 from the registry.

Zapis „Name for” grupy wygląda następująco:

378.380::1999/06/09-18:00:51.209 [FM] Name for Group d103ed17-f7bc-4ff9-8a64-e692f4ecb663 is ‘test group’.

Zarządca kryzysowy tworzy listę węzłów będących preferowanymi właścicielami grupy.

378.380::1999/06/09-18:00:51.209 [FM] Group d103ed17-f7bc-4ff9-8a64-e692f4ecb663 preferred owner 1. 378.380::1999/06/09-18:00:51.209 [FM] Group d103ed17-f7bc-4ff9-8a64-e692f4ecb663 preferred owner 2.

Zarządca kryzysowy tworzy listę zasobów, których właścicielem jest grupa.

378.380::1999/06/09-18:00:51.209 [FM] Group d103ed17-f7bc-4ff9-8a64-e692f4ecb663 contains Resource 191c151b-a8e5-45a6-8330-d38669845e66.

Po utworzeniu grupy Zarządca kryzysowy tworzy zasób 191c151b-a8e5-45a6-8330-d38669845e66 i inicjuje go, stosując wartości określone w bazie danych klastra (kluczu rejestrowym klastra).

378.380::1999/06/09-18:00:51.209 [FM] Creating resource 191c151b-a8e5-45a6-8330-d38669845e66 378.380::1999/06/09-18:00:51.209 [FM] Initializing resource 191c151b-a8e5-45a6-8330-d38669845e66 from the registry.

Zarządca kryzysowy tworzy listę możliwych właścicieli zasobu.

378.380::1999/06/09-18:00:51.209 [FM] FmpAddPossibleEntry: adding node 1
 as possible host for resource 191c151b-a8e5-45a6-8330-d38669845e66.
378.380::1999/06/09-18:00:51.209 [FM] FmpAddPossibleEntry: adding node 2
 as possible host for resource 191c151b-a8e5-45a6-8330-d38669845e66.

Zarządca kryzysowy potwierdza, że zależności zasobu są już utworzone.

378.380::1999/06/09-18:00:51.209 [FM] All dependencies for resource 191c151b-a8e5-45a6-8330-d38669845e66 created.

Identyfikatory procesów i wątków

Identyfikatory procesów i wątków pomagają śledzić działania i interakcje. W przykładzie opisanym dalej w rozdziale pod hasłem „Dołączanie do klastra (nieudana próba)”, każdy wątek utworzony w celu ustanowienia połączenia z węzłem sponsorującym posiada inny identyfikator wątku.

Uruchomienie egzemplarza pliku wykonywalnego (takiego jak usługa Klastra i Monitor zasobów) powoduje uruchomienie nowego procesu oznaczonego nowym identyfikatorem procesu. Śledzenie zdarzeń związanych z danymi identyfikatorami procesów i wątków jest szczególnie ważne podczas ustalania przyczyny zbyt długiego trwania danego procesu.

Należy pamiętać jednak, że zdarzenia zapisane w dzienniku mogą zawierać różne identyfikatory wątków nawet w przypadku, gdy są one objęte tą samą logiczną operacją.

Aktualizacje GUM i numery sekwencji

Często występującym elementem dzienników usługi Klastra jest globalna aktualizacja, wykonywana przez Menedżera globalnej aktualizacji (GUM) w przypadku zmian bazy danych klastra. Poniższy przykład składa się z zapisów związanych z typową globalną aktualizacją.

GUM przypisuje każdej transakcji unikalny numer sekwencji, zwiększając numer o jeden dla każdej nowej aktualizacji. W poniższych zapisach numerem sekwencji jest „1657”. Aktualizacja ta obejmuje dwie zmiany: zmianę członkostwa (typ 2 kontekst 17) oraz zmianę stanu zasobu (typ 0 kontekst 8). Numery kontekstów aktualizacji GUM podane są dalej w tym rozdziale pod hasłem „Numery kontekstu”.

378.380::1999/06/09-18:00:50.897 [GUM] GumSendUpdate: Locker waiting type 2 context 17 378.380::1999/06/09-18:00:50.897 [GUM] Thread 0x380 UpdateLock wait on Type 2 378.380::1999/06/09-18:00:50.897 [GUM] DoLockingUpdate successful, lock granted to 1 378.380::1999/06/09-18:00:50.897 [GUM] GumSendUpdate: Locker dispatching seq 1657 type 2 context 17 378.380::1999/06/09-18:00:50.897 [dm] DmBeginLocalUpdate Entry 378.380::1999/06/09-18:00:50.897 [dm] DmBeginLocalUpdate Exit, pLocalXsaction=0x000a0dd8 dwError=0x00000000 378.380::1999/06/09-18:00:47.928 [GUM] GumSendUpdate: Locker dispatching seq 1657 type 0 context 8 378.380::1999/06/09-18:00:47.928 [GUM] GumpDoUnlockingUpdate releasing lock ownership 378.380::1999/06/09-18:00:47.928 [GUM] GumSendUpdate: completed update seq 1657 type 0 context 8

Numery sekwencji GUM są przydatne przy korelacji działań dwóch lub więcej węzłów klastra. Na przykład, jeśli występuje komunikat „Locker dispatching seq xxx”, to w dzienniku drugiego węzła wystąpi odpowiedni komunikat „s_GumQueueLockingUpdate: dispatching seq xxx” (gdzie „xxx” reprezentuje identyczny numer sekwencji). Pomoże to skojarzyć zdarzenia w przypadku, gdy znaczniki czasu w obu dziennikach nie są dokładnie zsynchronizowane. W poniższych przykładach należy zwrócić uwagę na konsekwentne występowanie numeru sekwencji („seq 1732”) oraz na brak synchronizacji znaczników czasu (zapis „GumSendUpdate: Dispatching” na węźle wysyłającym zawiera późniejszą godzinę niż zapis „GumQueueLockingUpdate: Dispatching” na węźle odbierającym).

W tym przykładzie, na węźle wysyłającym aktualizację GUM dokonano następujących zapisów:

378.390::1999/06/09-18:16:29.671 [GUM] GumSendUpdate: Dispatching seq 1732 type 2 context 17 to node 2 . . . 378.390::1999/06/09-18:16:29.718 [GUM] GumSendUpdate: completed update seq 1732 type 2 context 17 . . . 378.390::1999/06/09-18:16:29.671 [GUM] GumSendUpdate: Dispatching seq 1732 type 2 context 17 to node 2

Na węźle odbierającym tę samą aktualizację dokonano następujących zapisów:

388.55c::1999/06/09-18:16:29.600 s_GumQueueLockingUpdate: dispatching seq 1732 type 2 context 17 . . . 388.55c::1999/06/09-18:16:29.662 s_GumQueueLockingUpdate: completed update seq 1732 type 2 context 17 result 0

Wspólne blokady i licznik gdwQuoBlockingResources

Zmienna gdwQuoBlockingResources jest licznikiem wspólnych blokad służącym do identyfikacji przyczyn problemów polegających na niemożności odłączenia zasobu kworum (na przykład, w przypadku zastąpienia węzła po awarii lub przeniesienia zasobu do drugiego węzła).

Blokada, zwana blokadą kworum, uniemożliwia dostęp do zasobu kworum komponentom nie będącym właścicielami blokady. Istnieją dwa typy blokad:

  Wspólna blokada

Zależne zasoby uzyskują wspólną blokadę kworum w przypadku, gdy potrzebują dostępu do urządzenia kworum. Wspólna blokada uniemożliwia usłudze Klastra odłączenie zasobu kworum.

  Wyłączna blokada

Usługa Klastra uzyskuje wyłączną blokadę kworum w przypadku, gdy zasób kworum ma zostać odłączony. Posiadanie wyłącznej blokady jest niezbędne dla wątku dokonującego modyfikacji informacji zawartych w zasobie kworum.

Wyłącznej blokady nie można uzyskać, o ile jeszcze istnieją wspólne blokady. Oznacza to, że usługa Klastra nie może odłączać zasobów kworum, dopóki komponenty nie skończą wszystkich operacji wymagających dostępu do zasobu.

Zmienna globalna gdwQuoBlockingResources (licznik wspólnych blokad) funkcjonuje w sposób następujący:

  Gdy proces uzyskuje wspólną blokadę, to wartość gdwQuoBlockingResources zostaje powiększona o jeden.

  Gdy proces zwalnia wspólną blokadę, to wartość gdwQuoBlockingResources zostaje pomniejszona o jeden.

  Gdy wartość gdwQuoBlockingResources spada do zera, to usługa Klastra uzyskuje wyłączną blokadę i może odłączyć zasób kworum.

Jeśli wysłano żądanie odłączenia zasobu, a wartość zmiennej nie jest równa zeru, to powstaną zapisy InterlockedIncrement i InterlockedDecrement zawierające informacje o liczbie istniejących wspólnych blokad.

W poniższym przykładzie, pomiędzy zapisami „InterlockedIncrement/InterlockedDecrement” występują zapisy informujące o uzyskaniu wspólnych blokad przez zasób Network Name podczas odłączania zasobu. Gdyby odłączenie zasobu było niemożliwe (wartość gdwQuoBlockingResources nie spadłaby do zera) to problemu należałoby poszukać w tym miejscu.

388.4e8::1999/06/09-20:20:56.640 [FM] FmpRmOfflineResource: InterlockedIncrement on gdwQuoBlockingResources for resource 254ef0e6-1937-11d3-b3fe-00a0c986aa14 4b4.450::1999/06/09-20:20:56.906 Network Name <Cluster Name>: Taking resource offline... 4b4.450::1999/06/09-20:20:56.906 Network Name <Cluster Name>: Offline of resource continuing... 4b4.450::1999/06/09-20:20:57.078 Network Name <Cluster Name>: Failed to delete server name CLUSTER1, status 2114. 4b4.450::1999/06/09-20:20:57.078 Network Name <Cluster Name>: Failed to delete server name CLUSTER1, status 2114. 4b4.450::1999/06/09-20:20:57.078 Network Name <Cluster Name>: Deleted workstation name CLUSTER1 from transport 0. 4b4.450::1999/06/09-20:20:57.187 Network Name <Cluster Name>: Resource is now offline 388.4e8::1999/06/09-20:20:57.187 [FM] FmpRmOfflineResource: InterlockedDecrement on gdwQuoBlockingResources for resource 254ef0e6-1937-11d3-b3fe-00a0c986aa14

W następnej części rozdziału opisane są sposoby interpretacji informacji dotyczących działań klastra, zawartych w dzienniku.

Zapisy dotyczące operacji formowania i dołączania

Czytając dziennik Klastra można zauważyć, że kilka kolejnych zapisów często dotyczy jednej operacji. Do operacji obejmujących duże grupy zapisów w dzienniku należą:

  Inicjacja węzła

  Dołączanie do klastra (nieudana próba)

  Próba sformowania klastra przez węzeł

  Działania następujące po udanej operacji dołączania lub formowania

W poniższych częściach zapisy związane z tymi operacjami są szczegółowo omówione.

Inicjacja węzła

Poniższe zapisy dotyczą inicjacji węzła lokalnego.

378.32c::1999/06/09-18:00:18.874 Cluster Service started - Cluster Node Version 3.2051 378.32c::1999/06/09-18:00:18.874 OS Version 5.0.2051

Powyższe zapisy zawierają godzinę uruchomienia usługi Klastra wraz z numerami wersji usługi Klastra i systemu operacyjnego węzła.

378.380::1999/06/09-18:00:18.874 [CS] Service Starting... 378.380::1999/06/09-18:00:19.210 [EP] Initialization... 378.380::1999/06/09-18:00:19.218 [DM]: Initialization 378.380::1999/06/09-18:00:19.226 [DM]: Loading cluster database from C:\WINNT\cluster\CLUSDB

W powyższym zapisie Menedżer baz danych ładuje do lokalnego rejestru bazę danych klastra. Później Menedżer baz danych aktualizuje dane zawarte w rejestrze, stosując punkty kontrolne bazy danych klastra lub zapisy zmiany dziennika kworum, o ile są one nowsze od załadowanej wersji bazy danych klastra.

378.380::1999/06/09-18:00:19.382 [DM] DmpStartFlusher: Entry 378.380::1999/06/09-18:00:19.382 [DM] DmpStartFlusher: thread created 378.380::1999/06/09-18:00:19.406 [NM] Initializing... 378.380::1999/06/09-18:00:19.429 [NM] Local node name = NODE1. 378.380::1999/06/09-18:00:19.429 [NM] Local node ID = 1.

Dwa ostatnie zapisy zawierają nazwę i identyfikator węzła, którego działań dotyczy niniejszy dziennik. Informacje te są ważne przy śledzeniu interakcji zapisanych w dziennikach na różnych węzłach.

378.380::1999/06/09-18:00:19.429 [NM] Creating object for node 1 (NODE1) 378.380::1999/06/09-18:00:19.429 [NM] Initializing networks. 378.380::1999/06/09-18:00:19.437 [NM] Initializing network interfaces. 378.380::1999/06/09-18:00:19.609 [NM] Initialization complete. 378.380::1999/06/09-18:00:19.632 [FM] Starting worker thread... 378.3a8::1999/06/09-18:00:19.632 [FM] Worker thread running 378.380::1999/06/09-18:00:19.632 [API] Initializing 378.380::1999/06/09-18:00:19.632 [lm] :LmInitialize Entry. 378.380::1999/06/09-18:00:19.640 [lm] :TimerActInitialize Entry. 378.380::1999/06/09-18:00:19.640 [CS] Service Domain Account = ITRESKIT\administrator 378.380::1999/06/09-18:00:19.640 [CS] Initializing RPC server. 378.380::1999/06/09-18:00:19.734 [INIT] Attempting to join cluster CLUSTER1

Natychmiast po inicjacji usługa Klastra próbuje dołączyć się do klastra.

Dołączanie do klastra (nieudana próba)

Poniższe zapisy są związane z nieudaną operacją JOIN. Dotyczą one prób znalezienia sponsora nowego węzła wśród dostępnych adresów i nazw węzłów.

Pierwszy zapis informuje o stanie ([INIT]) węzła próbującego dołączyć do klastra.

378.380::1999/06/09-18:00:19.734 [INIT] Attempting to join cluster CLUSTER1

We wszystkich poniższych zapisach stanem węzła jest [JOIN].

Dziewięć poniższych zapisów informuje o utworzeniu wątków w celu ustanowienia połączenia ze sponsorem oraz o próbach dołączenia do klastra przez węzeł. Usługa zawsze próbuje dołączyć do klastra poprzez:

  Adres IP klastra (172.16.64.254).

  Nazwę sponsora (NODE2).

  Interfejsy sieciowe zaznaczone na węźle sponsora jako przeznaczone dla wewnętrznej komunikacji klastra. W tym przykładzie dotyczy to adresów IP węzła sponsora: 172.16.64.2 i 10.10.0.2.

378.380::1999/06/09-18:00:19.742 [JOIN] Spawning thread to connect to sponsor 172.16.64.254 378.3c4::1999/06/09-18:00:19.742 [JOIN] Asking 172.16.64.254 to sponsor us. 378.380::1999/06/09-18:00:19.742 [JOIN] Spawning thread to connect to sponsor 172.16.64.2 378.3c8::1999/06/09-18:00:19.742 [JOIN] Asking 172.16.64.2 to sponsor us. 378.380::1999/06/09-18:00:19.742 [JOIN] Spawning thread to connect to sponsor 10.10.0.2 378.3cc::1999/06/09-18:00:19.742 [JOIN] Asking 10.10.0.2 to sponsor us. 378.380::1999/06/09-18:00:19.742 [JOIN] Spawning thread to connect to sponsor NODE2 378.380::1999/06/09-18:00:19.742 [JOIN] Waiting for all connect threads to terminate. 378.3d0::1999/06/09-18:00:19.742 [JOIN] Asking NODE2 to sponsor us.

Poniższe zapisy informują o niepowodzeniu (lub powodzeniu) prób dołączenia. Wysyłając polecenie net helpmsg numer błędu można dowiedzieć się, że „status=1722” oznacza niedostępność serwera RPC, czyli nowy węzeł nie może kontaktować się z usługą Klastra działającą na węźle docelowym.

Należy zwrócić uwagę na pojawienie się identycznego identyfikatora procesu w zapisach żądania i odpowiedzi oraz identycznego identyfikatora wątku w zapisach dotyczących danego sponsora.

378.3c8::1999/06/09-18:00:46.600 [JOIN] Sponsor 172.16.64.2 is not available (JoinVersion), status=1722. 378.3c4::1999/06/09-18:00:46.600 [JOIN] Sponsor 172.16.64.254 is not available (JoinVersion), status=1722. 378.3cc::1999/06/09-18:00:46.600 [JOIN] Sponsor 10.10.0.2 is not available (JoinVersion), status=1722. 378.3c8::1999/06/09-18:00:46.600 [JOIN] JoinVersion data for sponsor 172.16.64.2 is invalid, status 1722. 378.3c4::1999/06/09-18:00:46.600 [JOIN] JoinVersion data for sponsor 172.16.64.254 is invalid, status 1722. 378.3cc::1999/06/09-18:00:46.600 [JOIN] JoinVersion data for sponsor 10.10.0.2 is invalid, status 1722. 378.3d0::1999/06/09-18:00:46.615 [JOIN] Sponsor NODE2 is not available (JoinVersion), status=1722. 378.3d0::1999/06/09-18:00:46.615 [JOIN] JoinVersion data for sponsor NODE2 is invalid, status 1722.

Kolejne zapisy informują, że wszystkie wątki są zakończone, nie udało się znaleźć sponsora, a więc nie udała się próba dołączenia:

378.380::1999/06/09-18:00:46.615 [JOIN] All connect threads have terminated. 378.380::1999/06/09-18:00:46.615 [JOIN] Unable to connect to any sponsor node. 378.380::1999/06/09-18:00:46.615 [INIT] Failed to join cluster, status 53

Następnie usługa Klastra działająca na tym węźle próbuje utworzyć klaster.

Formowanie klastra

Proces tworzenia klastra składa się z następujących etapów:

  Uruchomienie egzemplarza Monitora zasobów (Resrcmon.exe).

  Udostępnienie zasobu kworum, co wymaga:

  Zastosowania zmian z dziennika kworum do bazy danych klastra.

  Odtworzenia grup i zasobów w bazie danych klastra.

Przy uruchamianiu usługi Klastra mogły być używane stare informacje o obiektach. Na tym etapie należy usunąć i odtworzyć wszystkie obiekty grup i zasobów w celu odświeżenia zawartych w nich informacji.

  Skonfigurowanie sieci.

  Udostępnienie zasobów, co może wymagać aktualizacji kluczy rejestrowych zasobu.

Klaster może zostać utworzony pomyślnie jeszcze przed udostępnieniem wszystkich zasobów.

Początek operacji formowania zaznaczony jest zapisem:

378.380::1999/06/09-18:00:46.615 [INIT] Attempting to form cluster CLUSTER1

Koniec operacji formowania zaznaczony jest zapisem:

378.380::1999/06/09-18:00:51.787 [INIT] Successfully formed a cluster.

W kolejnych częściach omówione są najważniejsze zapisy związane z operacją formowania.

Uruchamianie Resrcmon.exe

Poniższy zapis dotyczy uruchomienia Monitora zasobów:

15c.0d4::1999/06/09-18:00:46.694 [RM] Main: Initializing.

Udostępnianie zasobu kworum

Zapisy opisane w tej części dotyczą:

  Utworzenia grupy zawierającej zasób kworum.

  Utworzenia zasobu dysku fizycznego stanowiącego zasób kworum.

  Inicjacji zasobu kworum.

  Udostępnienia zasobu kworum.

Poniższe zapisy dotyczą udostępnienia grupy, która będzie zawierać zasób kworum. Należy zwrócić uwagę na następujące fakty:

  Komponentem tworzącym i inicjującym grupę jest Zarządca kryzysowy.

  W drugim zapisie grupa zostaje zainicjowana przy użyciu wartości wziętych z rejestru lokalnego.

  Trzeci zapis identyfikuje grupę.

  W czwartym zapisie Zarządca kryzysowy przekazuje informację, że grupa zawiera zasób numer 254ef0e8-1937-11d3-b3fe-00a0c986aa14.

378.380::1999/06/09-18:00:47.069 [FM] Creating group 254ef0e7-1937-11d3-b3fe-00a0c986aa14 378.380::1999/06/09-18:00:47.084 [FM] Initializing group 254ef0e7-1937-11d3-b3fe-00a0c986aa14 from the registry. 378.380::1999/06/09-18:00:47.100 [FM] Name for Group 254ef0e7-1937-11d3-b3fe-00a0c986aa14 is ‘Disk Group 1’. 378.380::1999/06/09-18:00:47.100 [FM] Group 254ef0e7-1937-11d3-b3fe-00a0c986aa14 contains Resource 254ef0e8-1937-11d3-b3fe-00a0c986aa14.

W poniższych zapisach zasób 254ef0e8-1937-11d3-b3fe-00a0c986aa14 (zasób dysku fizycznego, którym jest zasób kworum) zostaje utworzony i zainicjowany przy użyciu wartości wziętych z rejestru. Należy zwrócić uwagę na zapis zawierający nazwę zasobu. W konfiguracji klucza klastra związanej z zasobem określane są:

  Węzły dodawane jako ewentualni właściciele zastępczy na wypadek awarii.

  Ewentualne zależności zasobów wymagające utworzenia.

378.380::1999/06/09-18:00:47.100 [FM] Creating resource 254ef0e8-1937-11d3-b3fe-00a0c986aa14 378.380::1999/06/09-18:00:47.100 [FM] Initializing resource 254ef0e8-1937-11d3-b3fe-00a0c986aa14 from the registry. 378.380::1999/06/09-18:00:47.100 [FM] Name for Resource 254ef0e8-1937-11d3-b3fe-00a0c986aa14 is ‘Disk D:’. 378.380::1999/06/09-18:00:47.100 [FM] FmpAddPossibleEntry: adding node 1 as possible host for resource 254ef0e8-1937-11d3-b3fe-00a0c986aa14.

Zarządca kryzysowy wykorzystuje przechowywane w rejestrze dane o konfiguracji klastra do utworzenia zasobów, od których zależy zasób dysku fizycznego (D:).

378.380::1999/06/09-18:00:47.100 [FM] All dependencies for resource 254ef0e8-1937-11d3-b3fe-00a0c986aa14 created.

W poniższym zapisie węzeł wykonuje arbitraż w stosunku do własności zasobu kworum.

378.380::1999/06/09-18:00:47.115 [FM] arbitrate for quorum resource id 254ef0e8-1937-11d3-b3fe-00a0c986aa14.

Kolejne dwa zapisy związane są z dodawaniem możliwych właścicieli zasobu kworum oraz z brakiem innych węzłów aktualnie należących do klastra.

378.380::1999/06/09-18:00:47.115 [FM] FmpAddPossibleNode: adding node 1 to resource type’s possible node list 378.380::1999/06/09-18:00:47.115 [FM] FmpAddPossibleNode: Warning, node 2 not found

Poniższy zapis informuje o dodaniu zasobu kworum do listy zasobów śledzonych i zarządzanych przez Monitor zasobów. Zapis ten pojawi się po dodaniu każdego zasobu do listy.

378.380::1999/06/09-18:00:47.115 [FM] FmpRmCreateResource: creating resource 254ef0e8-1937-11d3-b3fe-00a0c986aa14 in shared resource monitor

W kolejnym zapisie, „PnP window” oznacza okno Plug and Play, które otrzymuje komunikaty o zmianach konfiguracji dyskowej.

15c.46c::1999/06/09-18:00:47.740 Physical Disk: PnP window created successfully.

W poniższym zapisie usługa Klastra wyznacza węzeł 1 jako właściciela zasobu kworum.

378.380::1999/06/09-18:00:47.897 [MM] MmSetQuorumOwner(1,1), old owner 0.

Poniżej przestawione są najważniejsze zapisy związane z arbitrażem dyskowym. Drugi zapis potwierdza, że węzeł został właścicielem zasobu kworum.

15c.458::1999/06/09-18:00:47.912 Physical Disk <Disk D:>: [DISKARB]Assume ownership of a quorum device. 15c.458::1999/06/09-18:00:47.912 Physical Disk <Disk D:>: [DISKARB]Arbitrate returned status 0.

Po udanym udostępnieniu zasobu kworum pojawiają się poniższe zapisy informujące o udanej aktualizacji [GUM]. Gdy GUM przesyła aktualizacje pozostałym węzłom, to wymagane jest, aby jeden węzeł pełnił rolę zarządcy („locker”).

Zapisy dotyczące aktualizacji można śledzić za pomocą numeru sekwencji (w tym przypadku: 1657).

378.380::1999/06/09-18:00:47.928 [GUM] GumSendUpdate: Locker waiting type 0 context 8 378.380::1999/06/09-18:00:47.928 [GUM] Thread 0x380 UpdateLock wait on Type 0 378.380::1999/06/09-18:00:47.928 [GUM] DoLockingUpdate successful, lock granted to 1 378.380::1999/06/09-18:00:47.928 [GUM] GumSendUpdate: Locker dispatching seq 1657 type 0 context 8 378.380::1999/06/09-18:00:47.928 [GUM] GumpDoUnlockingUpdate releasing lock ownership 378.380::1999/06/09-18:00:47.928 [GUM] GumSendUpdate: completed update seq 1657 type 0 context 8

Często spotykany opis „type 0 context 8” oznacza, że GUM wykonuje aktualizację dla Zarządcy kryzysowego dotyczącą zmiany stanu zasobu (w tym przypadku zasobu kworum). Poniżej przedstawione jest wytłumaczenie tego opisu.

  Wyraz „type” dotyczy typu aktualizacji. Istnieją trzy typy aktualizacji, przedstawione w tabeli 20.2.

Tabela 20.2 Typy aktualizacji

Kod typu Typ
0 GumUpdateFailoverManager (aktualizacja Zarządcy kryzysowego)
1 GumUpdateRegistry (aktualizacja rejestru)
2 GumUpdateMembership (aktualizacja członkostwa)

  Każdy typ aktualizacji obejmuje kilka procedur. Wywołana procedura oznaczona jest numerem kontekstu. Znaczenie numerów kontekstów związanych z poszczególnymi typami aktualizacji przedstawione są w tabelach, dalej w tym rozdziale, pod hasłem „Numery kontekstu”.

W poniższych zapisach informacje o stanie zasobu kworum zostają przekazane do węzłów klastra, a następnie zasób kworum zostaje udostępniony:

378.380::1999/06/09-18:00:47.928 [FM] FmpPropagateResourceState: resource 254ef0e8-1937-11d3-b3fe-00a0c986aa14 pending event. 378.380::1999/06/09-18:00:47.928 [FM] FmpRmOnlineResource: Resource 254ef0e8-1937-11d3-b3fe-00a0c986aa14 pending 378.380::1999/06/09-18:00:47.944 [FM] FmpRmOnlineResource: Returning. Resource 254ef0e8-1937-11d3-b3fe-00a0c986aa14, state 129, status 997.

Następnie, usługa Klastra sprawdza, czy wszystkie węzły klastra posiadają zgodne dane dotyczące przypisania liter napędów.

W poniższym zapisie usługa Klastra spisuje dane z tabeli partycji związane z literą napędu D:

15c.470::1999/06/09-18:00:47.944 Physical Disk <Disk D:>: Mountie[0]: 1, let=?, start=104000, len=FF9FC000.

W poniższych zapisach usługa Klastra synchronizuje informacje o literach napędów we wszystkich źródłach (HKEY_LOCAL_MACHINE\SYSTEM\Disk, \DiskInfo, \MountMgr i \MountVolumeInfo). Informacje występujące pod podkluczem HKEY_LOCAL_MACHINE\SYSTEM\Disk są nieaktualne – zapisy czwarty i piąty informują o aktualizacji podklucza.

15c.470::1999/06/09-18:00:48.037 Physical Disk <Disk D:>: MountieVerify: Registry-System\DISK.GetInfo returned 0 [0:0]. 15c.470::1999/06/09-18:00:48.037 Physical Disk <Disk D:>: MountieVerify: ClusReg-DiskInfo selected. 15c.470::1999/06/09-18:00:48.037 Physical Disk <Disk D:>: MountieVerify: DriveLetters mask is now 00000008. 15c.470::1999/06/09-18:00:48.037 Physical Disk <Disk D:>: MountieVerify: Update needed for 08. 15c.470::1999/06/09-18:00:48.053 Physical Disk <Disk D:>: FtInfo_Set: Update successful.

Poniższy zapis informuje, że wszystkie źródła informacji o literach napędów zostały zaktualizowane i zsynchronizowane. „Update needed for 00” oznacza, że nic nie wymaga aktualizacji (por. czwarty zapis poprzedniego przykładu „Update needed for 08”).

15c.470::1999/06/09-18:00:48.053 Physical Disk <Disk D:>: MountieUpdate: Update needed for 00.

W poniższym zapisie Monitor zasobów informuje usługę Klastra o dostępności zasobu dysku D:

15c.470::1999/06/09-18:00:48.240 [RM] RmpSetResourceStatus, Posting state 2 notification for resource <Disk D:>

Kolejny zapis informuje o powodzeniu operacji udostępnienia zasobu kworum.

378.3a4::1999/06/09-18:00:48.240 [DM] DmpQuoObjNotifyCb: Quorum resource is online

Zastosowanie zmian z dziennika kworum do bazy danych klastra

W dzienniku kworum (znanym także jako dziennik zmian) zapisywane są zmiany konfiguracji klastra.

Podczas operacji formowania klastra, po udostępnieniu zasobu kworum usługa Klastra wykonuje następujące zadania:

  Otwarcie dziennika kworum.

  Zatwierdzenie integralności wszystkich zapisów dziennika.

  Ustalenie które zapisy są nowsze od kopii bazy danych klastra aktualnie znajdującej się w rejestrze lokalnym.

  Zastosowanie nowych zmian do przechowywanej w rejestrze konfiguracji.

Poniższe zapisy dotyczą otwarcia dziennika kworum przez usługę Klastra:

378.3a4::1999/06/09-18:00:48.240 [DM] DmpQuoObjNotifyCb: Own quorum resource, try open the quorum log 378.3a4::1999/06/09-18:00:48.303 [DM] DmpQuoObjNotifyCb: the name of the quorum file is D:\MSCS\quolog.log 378.3a4::1999/06/09-18:00:48.303 [lm] LogCreate : Entry FileName=D:\MSCS\quolog.log MaxFileSize=0x00010000 378.3a4::1999/06/09-18:00:48.397 [lm] LogpCreate : Entry

Usługa instaluje dziennik i przygotowuje go do odczytu i zapisu:

378.3a4::1999/06/09-18:00:48.443 [lm] LogpMountLog : Entry pLog=0x000a0650 378.3a4::1999/06/09-18:00:48.443 [lm]:LogpMountLog::Quorumlog File size=0x00008000

Poniższe zapisy są typowymi zapisami dotyczącymi sprawdzania przez usługę Klastra zapisów dziennika znajdujących się w pliku, w miejscu określonym przez wartość przesunięcia.

378.3a4::1999/06/09-18:00:48.443 [lm]:LogpMountLog::checking LSN 0x00000408 . . . 378.3a4::1999/06/09-18:00:48.443 [lm]:LogpMountLog::checking LSN 0x00000a48

Podczas formowania klastra, zastosowanie zmian z dzienników kworum do bazy danych klastra obejmuje:

1.   Poszukiwanie pliku tombstone.

2.   Rozłożenie dziennika kworum i przesłanie zmian stanu do kopii bazy danych klastra przechowywanej w rejestrze lokalnym.

Poszukiwanie pliku tombstone

Plik tombstone zostaje utworzony wówczas, gdy węzeł posiada nieaktualne informacje o zasobie kworum – plik tombstone informuje usługę Klastra działającą na tym węźle, że katalog kworum znajduje się już w innym miejscu.

Na przykład, jeśli węzeł B przeniósł zasób kworum w momencie, gdy węzeł A nie działał, to węzeł A będzie posiadać nieaktualne informacje o zasobie kworum, a aktualne informacje będą znajdować się na węźle B. Jeśli wówczas węzeł B zostanie odłączony, a węzeł A zostanie dołączony, to nieaktualne informacje znajdujące się na węźle A będą wskazywać plik tombstone. Plik tombstone nie wskazuje nowego miejsca przechowywania zasobu kworum. Oznacza to, że węzeł A może dołączyć się do klastra, ale nie może formować klastra.

W poniższych zapisach Menedżer bazy danych sprawdza, czy istnieje aktualny tombstone kworum. Wartość zerowa zwrócona w drugim zapisie oznacza, że funkcja DmpChkQuoTombstone zatwierdzająca informacje o pliku tombstone nie wykryła błędów i że operacja formowania może być kontynuowana.

378.380::1999/06/09-18:00:48.459 [DM] DmpChkQuoTombStone - Entry 378.380::1999/06/09-18:00:48.459 [DM] DmpChkQuoTombStone: Exit,dwError=0x00000000

Gdyby funkcja DmpChkQuoTombstone wykryła aktualny tombstone kworum, to Menedżer bazy danych zapisałby błąd w dzienniku zdarzeń i usługa Klastra zatrzymałaby się natychmiast. W tym przypadku polecenie Exit z funkcji DmpChkQuoTombstone nie pojawiałoby się w dzienniku Klastra.

Rozłożenie dziennika kworum i przesłanie zmian stanu

Podczas rozkładania dziennika kworum, Menedżer bazy danych wykonuje następujące zadania:

  Odnalezienie ostatniego punktu kontrolnego w bazie danych klastra.

  Załadowanie punktu kontrolnego do klucza rejestrowego klastra.

  Zastosowanie do bazy danych klastra zmian zapisanych w dzienniku kworum.

Każda zmiana konfiguracji zostaje zastosowana do ewentualnych węzłów klastra. W operacji formowania klastra inne węzły nie istnieją, jednakże każda zmiana mająca miejsce podczas tej operacji powoduje wykonanie operacji aktualizacji przez GUM.

Poniższe zapisy dotyczą odnalezienia ostatniego punktu kontrolnego bazy danych klastra (numer sekwencji 1656). W pierwszym zapisie znajduje się numer sekwencji odpowiadający kluczowi klastra w rejestrze lokalnym.

378.380::1999/06/09-18:00:48.459 [DM] DmpApplyChanges: The current registry sequence number 1656 378.380::1999/06/09-18:00:48.459 [lm] LogGetLastChkPoint:: Entry 378.328::1999/06/09-18:00:48.537 [FM] HandleResourceTransition: Resource Name = 254ef0e8-1937-11d3-b3fe-00a0c986aa14 old state=129 new state=2

Po wywołaniu LogGetLastChkPoint, Menedżer dziennika zapisuje numer sekwencji. Działania tego typu należy śledzić za pomocą identyfikatora wątku. Na przykład, wśród poniższych zapisów występują także zapisy wątku numer 378.328, uruchomionego przez Zarządcę kryzysowego.

378.380::1999/06/09-18:00:48.553 [LM] LogGetLastChkPoint: ChkPt File D:\MSCS\chk678.tmp ChkPtSeq=1656 ChkPtLsn=0x00000678 Checksum=93996 378.328::1999/06/09-18:00:48.568 FmpPropagateResourceState: signalling the ghQuoOnlineEvent 378.380::1999/06/09-18:00:48.568 [LM] LogGetLastChkPoint exit, returning 0x00000000 378.328::1999/06/09-18:00:48.568 [GUM] GumSendUpdate: Locker waiting type 0 context 8 378.380::1999/06/09-18:00:48.568 [DM] DmpLogFindStartLsn: LogGetLastChkPt rets, Seq#=1656 ChkPtLsn=0x00000678

Gdy punkt kontrolny zostaje zapisany na dysku kworum, to w dzienniku kworum pojawiają się zapisy początku punktu kontrolnego i końca punktu kontrolnego. W poniższym zapisie Menedżer bazy danych odnajduje ostatnie zapisy tego typu w dzienniku kworum i na ich podstawie identyfikuje najnowszy plik punktu kontrolnego. Następnie plik ten zostaje załadowany do klucza rejestrowego klastra:

378.380::1999/06/09-18:00:48.568 [DM] DmpLogFindStartLsn: Uploading chkpt from quorum log

Poniższe zapisy dotyczą ładowania bazy danych klastra przez Menedżera bazy danych oraz wprowadzenia do niej zmian z dziennika kworum:

378.380::1999/06/09-18:00:49.365 [DM]: Loading cluster database from C:\WINNT\cluster\CLUSDB 15c.46c::1999/06/09-18:00:49.459 Physical Disk: AddVolume : \\?\Volume{89fc8c21-18ef-11d3-b1b2-806d6172696f}\ ‘C’, 7 (8419616) 378.380::1999/06/09-18:00:49.678 [DM] DmpLogFindStartLsn: chkpt uploaded from quorum log 378.380::1999/06/09-18:00:49.693 [DM] DmpLogFindStartLsn: LSN=0x00000678, dwError=0x00000000 378.380::1999/06/09-18:00:49.693 [DM] DmpApplyChanges: The LSN of the record to apply changes from 0x00000678

Zapisy dziennika kworum zostały już odczytane, zatwierdzone i przesłane do bazy danych klastra. Teraz usługa Klastra jest gotowa do odtworzenia grup i zasobów.

Odtwarzanie grup i zasobów

Przy uruchamianiu usługi Klastra wykorzystana jest baza danych klastra przechowywana w rejestrze lokalnym, która może być nieaktualna (na przykład, jeśli baza danych została zaktualizowana w momencie, gdy dany węzeł był odłączony).

Aby zapewnić wykorzystanie najnowszej kopii bazy danych klastra, usługa Klastra aktualizuje konfigurację klastra, usuwając z pamięci lokalnej kopie wszystkich bieżących obiektów (grup, zasobów itp.), a następnie odtwarzając obiekty klastra na podstawie zaktualizowanych informacji pod kluczem klastra w rejestrze. Kopia bazy danych klastra znajdująca się w rejestrze lokalnym zostaje zaktualizowana poprzez skopiowanie najnowszej wersji z dysku kworum lub (w przypadku węzła dołączającego do klastra) z węzła sponsorującego.

Usuwanie grup i zasobów

Poniższe zapisy informują o usunięciu:

  Grupy dyskowej 1 (254ef0e7-1937-11d3-b3fe-00a0c986aa14).

  Zasobu kworum (254ef0e8-1937-11d3-b3fe-00a0c986aa14).

378.380::1999/06/09-18:00:49.693 [FM] FmFormNewClusterPhase1, Entry. Quorum quorum will be deleted 378.380::1999/06/09-18:00:49.693 [FM] DestroyGroup: destroying 254ef0e7-1937-11d3-b3fe-00a0c986aa14 378.380::1999/06/09-18:00:49.693 [FM] DestroyResource: destroying 254ef0e8-1937-11d3-b3fe-00a0c986aa14 15c.46c::1999/06/09-18:00:49.693 Physical Disk: AddVolume: GetPartitionInfo(\??\Volume{89fc8c1b-18ef-11d3-b1b2-806d6172696f}), error 1 378.380::1999/06/09-18:00:49.693 [FM] FmpDestroyResource Exit. 378.380::1999/06/09-18:00:49.693 [FM] FmpDestroyGroup: Group 254ef0e7-1937-11d3-b3fe-00a0c986aa14 destroyed. 378.380::1999/06/09-18:00:49.693 [OM] Deleting object Disk Group 1 (254ef0e7-1937-11d3-b3fe-00a0c986aa14)

Tworzenie grup i zasobów

Formujący się klaster buduje bazę danych w pamięci, tworząc grupy, a następnie zasoby, na podstawie nowych informacji konfiguracyjnych.

Tak jak omówione jest to w następnej części, sieci zostają skonfigurowane po usunięciu grup zasobów, a przed ich odtworzeniem.

Odtwarzanie grup i zasobów rozpoczyna się od następującego zapisu: 378.380::1999/06/09-18:00:51.162 [FM] FmFormNewClusterPhase2, Entry.

W kolejnych zapisach (aż do zapisu „378.380::1999/06/09-18:00:51.209 [FM] All groups created”) węzeł formujący klaster:

  Odczyta listę grup z rejestru: 378.380::1999/06/09-18:00:51.193 [FM] Processing groups list.

  Odtwarza i inicjuje pierwszą grupę:

378.380::1999/06/09-18:00:51.193 [FM] Creating group 254ef0e4-1937- 11d3-b3fe-00a0c986aa14

  Inicjuje grupę na podstawie rejestru:

378.380::1999/06/09-18:00:51.193 [FM] Initializing group 254ef0e4- 1937-11d3-b3fe-00a0c986aa14 from the registry. 378.380::1999/06/09-18:00:51.193 [FM] Name for Group 254ef0e4-1937- 11d3-b3fe-00a0c986aa14 is ‘Cluster Group’.

  Tworzy i inicjuje zasoby:

378.380::1999/06/09-18:00:51.193 [FM] Group 254ef0e4-1937-11d3-b3fe-00a0c986aa14 contains Resource 254ef0e5-1937-11d3-b3fe-00a0c986aa14. 378.380::1999/06/09-18:00:51.193 [FM] Creating resource 254ef0e5-1937-11d3-b3fe-00a0c986aa14 378.380::1999/06/09-18:00:51.193 [FM] Initializing resource 254ef0e5-1937-11d3-b3fe-00a0c986aa14 from the registry. 378.380::1999/06/09-18:00:51.193 [FM] Name for Resource 254ef0e5-1937-11d3-b3fe-00a0c986aa14 is ‘Cluster IP Address’. . . . 378.380::1999/06/09-18:00:51.193 [FM] Group 254ef0e4-1937-11d3-b3fe-00a0c986aa14 contains Resource 254ef0e6-1937-11d3-b3fe-00a0c986aa14. 378.380::1999/06/09-18:00:51.193 [FM] Creating resource 254ef0e6-1937-11d3-b3fe-00a0c986aa14 378.380::1999/06/09-18:00:51.193 [FM] Initializing resource 254ef0e6-1937-11d3-b3fe-00a0c986aa14 from the registry. 378.380::1999/06/09-18:00:51.193 [FM] Name for Resource 254ef0e6-1937-11d3-b3fe-00a0c986aa14 is ‘Cluster Name’.

  Dodaje możliwych właścicieli zasobów i grup:

378.380::1999/06/09-18:00:51.193 [FM] FmpAddPossibleEntry: adding node 1 as possible host for resource 254ef0e5-1937-11d3-b3fe-00a0c986aa14. 378.380::1999/06/09-18:00:51.193 [FM] FmpAddPossibleEntry: adding node 2 as possible host for resource 254ef0e5-1937-11d3-b3fe-00a0c986aa14. 378.380::1999/06/09-18:00:51.193 [FM] All dependencies for resource 254ef0e5-1937-11d3-b3fe-00a0c986aa14 created. . . . 378.380::1999/06/09-18:00:51.193 [FM] FmpAddPossibleEntry: adding node 1 as possible host for resource 254ef0e6-1937-11d3-b3fe-00a0c986aa14. 378.380::1999/06/09-18:00:51.193 [FM] FmpAddPossibleEntry: adding node 2 as possible host for resource 254ef0e6-1937-11d3-b3fe-00a0c986aa14.

  Usługa Klastra odkryje, że zasób 254ef0e6-1937-11d3-b3fe-00a0c986aa14 (zasób nazwy klastra) zależy od zasobu 254ef0e5-1937-11d3-b3fe-00a0c986aa14 (zasobu adresu IP klastra). Usługa klastra próbuje utworzyć zasób adresu IP klastra, a po odkryciu jego istnienia tworzy ostatni zapis w poniższej grupie:

378.380::1999/06/09-18:00:51.193 [FM] Resource 254ef0e6-1937-11d3-b3fe-00a0c986aa14 depends on 254ef0e5-1937-11d3-b3fe-00a0c986aa14. Creating... 378.380::1999/06/09-18:00:51.193 [FM] CreateResource, Opened existing resource 254ef0e5-1937-11d3-b3fe-00a0c986aa14 378.380::1999/06/09-18:00:51.193 [FM] All dependencies for resource 254ef0e6-1937-11d3-b3fe-00a0c986aa14 created.

Do tworzonych grup i zasobów należy zasób kworum oraz grupa zawierająca ten zasób:

378.380::1999/06/09-18:00:51.209 [FM] Name for Group 254ef0e7-1937-11d3-b3fe-00a0c986aa14 is ‘Disk Group 1’. 378.380::1999/06/09-18:00:51.209 [FM] Group 254ef0e7-1937-11d3-b3fe-00a0c986aa14 contains Resource 254ef0e8-1937-11d3-b3fe-00a0c986aa14. 378.380::1999/06/09-18:00:51.209 [FM] CreateResource, Opened existing resource 254ef0e8-1937-11d3-b3fe-00a0c986aa14 378.380::1999/06/09-18:00:51.209 [FM] ReCreating quorum resource 254ef0e8-1937-11d3-b3fe-00a0c986aa14

Po utworzeniu przez usługę wszystkich grup i zasobów pojawia się następujący zapis:

378.380::1999/06/09-18:00:51.209 [FM] All groups created.

Po odtworzeniu i inicjacji obiektów grup i zasobów oraz dodaniu możliwych właścicieli, usługa Klastra jest gotowa do skonfigurowania informacji sieciowych.

Konfigurowanie sieci

Na tym etapie formowania klastra usługa Klastra tworzy obiekty sieci i obiekty interfejsów sieciowych oraz sprawdza poprawność i zgodność informacji dotyczących tych obiektów, przechowywanych na węzłach klastra. Aby to wykonać, aparat konfiguracji sieci:

  Tworzy obiekty na podstawie zawartych w rejestrze (czyli w bazie danych klastra zmodyfikowanej na podstawie zapisów dziennika kworum) informacji o węźle, sieci i interfejsach sieciowych.

Zbiera informacje o aktualnej konfiguracji sieciowej systemu.

  Odtwarza obiekty sieci i interfejsów.

  Rejestruje sieci i interfejsy w sterowniku transportu klastra.

  Udostępnia sieci i interfejsy za pomocą usługi Klastra i sterownika transportu.

  Wykonuje raport łączności w celu wykrycia ewentualnych błędów interfejsów sieciowych.

  Oblicza wartości NodeHighestVersion i NodeLowestVersion.

  Wykonuje operacje naprawcze.

  Notuje zmiany stanu udostępnianych interfejsów.

Konfigurowanie sieci rozpoczyna się od następującego zapisu:

378.380::1999/06/09-18:00:49.756 [NM] Synchronizing node information.

Tworzenie obiektów

Usługa Klastra tworzy obiekty węzła reprezentujące członków klastra, na podstawie bazy danych klastra.

Należy zwrócić uwagę na to, że w tym przykładzie formowany jest klaster o pojedynczym węźle.

378.380::1999/06/09-18:00:49.756 [NM] Creating node objects. 378.380::1999/06/09-18:00:49.756 [NM] Creating object for node 2 (NODE2)

Zbieranie informacji systemowych

Usługa Klastra zbiera z systemu informacje o adapterach sieciowych i o obiektach połączenia sieciowego.

Interfejsy są adresami IP. Z jednym adapterem może być powiązanych kilka adresów IP (interfejsów).

378.380::1999/06/09-18:00:49.772 [NM] Synchronizing network information. 378.380::1999/06/09-18:00:49.787 [NM] Synchronizing interface information.

W poniższym zapisie usługa Klastra porównuje aktualną konfigurację z konfiguracją zapisaną w bazie danych klastra. Odnotowane zostaną ewentualne dodania i usunięcia adapterów sieciowych lub zmiany konfiguracji sieciowej.

378.380::1999/06/09-18:00:49.818 [NM] Running network configuration engine.

W poniższych zapisach Menedżer węzłów informuje o ewentualnych wykrytych zmianach. Informacje te są wykorzystane do aktualizacji bazy danych klastra. Drugi zapis informuje, że wcześniej istniejące adaptery (w tym przypadku tylko jeden) zostały dopasowane do wcześniej istniejących sieci.

378.380::1999/06/09-18:00:50.600 [NM] Processing network configuration changes. 378.380::1999/06/09-18:00:50.600 [NM] Matched 1 networks, created 0 new networks. 378.380::1999/06/09-18:00:50.600 [NM] Resynchronizing network information. 378.380::1999/06/09-18:00:50.600 [NM] Resynchronizing interface information.

Odtwarzanie obiektów sieci i interfejsów

Usługa Klastra odtwarza, na podstawie aktualnej konfiguracji sieciowej, następujące obiekty sieci i interfejsów:

378.380::1999/06/09-18:00:50.600 [NM] Creating network objects. 378.380::1999/06/09-18:00:50.600 [NM] Creating object for network 5da3c9ea-7c25-4129-ab70-2c058de6d1fd (CPQ Netintellegent 10.10.0.2). 378.380::1999/06/09-18:00:50.600 [NM] Creating object for network d561dbcb-1936-11d3-b3fe-00a0c986aa14 ( 100b 172.16.64.1). 378.380::1999/06/09-18:00:50.600 [NM] Creating interface objects. 378.380::1999/06/09-18:00:50.600 [NM] Creating object for interface 2e12db05-2947-425f-835a-fb9e4f13f0b3 ( 100b 172.16.64.1 - NODE2).

W poniższych zapisach Menedżer węzłów zbiera informacje służące do wykrycia błędów interfejsów sieciowych:

378.380::1999/06/09-18:00:50.600 [NM] Assigned index 0 to interface 2e12db05-2947-425f-835a-fb9e4f13f0b3. 378.380::1999/06/09-18:00:50.600 [NM] Creating object for interface a6fe4897-139a-4b84-815f-8892f674afb8 (CPQ Netintellegent 10.10.0.2 - NODE2). 378.380::1999/06/09-18:00:50.600 [NM] Assigned index 0 to interface a6fe4897-139a-4b84-815f-8892f674afb8. 378.380::1999/06/09-18:00:50.600 [NM] Creating object for interface d561dbcc-1936-11d3-b3fe-00a0c986aa14 ( 100b 172.16.64.1 - NODE1). 378.380::1999/06/09-18:00:50.600 [NM] Assigned index 1 to interface d561dbcc-1936-11d3-b3fe-00a0c986aa14. Rejestracja i udostępnienie sieci i interfejsów

W zapisach omówionych w tej części Menedżer węzłów:

  Rejestruje sieć d561dbcb-1936-11d3-b3fe-00a0c986aa14 oraz jej interfejsy sieciowe w sterowniku transportu klastra.

Sterownik transportu klastra (Clusnet.sys) wykorzystuje protokół UDP (User Datagram Protocol) do przekazywania wiadomości, od usługi Klastra do pozostałych członków klastra.

Sieć jest łączem interfejsów sieciowych połączonych z tą samą podsiecią. Sieć jest uważana za dostępną wówczas, gdy dostępne są oba interfejsy.

  Tworzy obiekty dla interfejsów.

  Udostępnia sieć.

Należy zwrócić uwagę na zdarzenie „Registering interface 2e12db05-2947-425f-835a-fb9e4f13f0b3 with cluster transport, addr 172.16.64.2, endpoint 3343”, w którym:

  „endpoint 3343” określa numer gniazda UDP powiązany z sterownikiem transportu klastra (clusnet),

  „addr 172.16.64.1” jest odpowiednim adresem IP.

Zapis „Registering interface 2e12db05-2947-425f-835a-fb9e4f13f0b3 with cluster transport, addr 172.16.64.2, endpoint 3343” oznacza więc, że:

  Zarejestrowano Interfejs sieciowy węzła.

  Otwarto gniazdo 3343 na adresie IP węzła.

378.380::1999/06/09-18:00:50.600 [NM] Registering network d561dbcb-1936-11d3-b3fe-00a0c986aa14 with cluster transport. 378.380::1999/06/09-18:00:50.600 [NM] Bringing network d561dbcb-1936-11d3-b3fe-00a0c986aa14 online. 378.380::1999/06/09-18:00:50.600 [NM] Registering interfaces for network d561dbcb-1936-11d3-b3fe-00a0c986aa14 with cluster transport. 378.380::1999/06/09-18:00:50.600 [NM] Registering interface 2e12db05-2947-425f-835a-fb9e4f13f0b3 with cluster transport, addr 172.16.64.2, endpoint 3343. 378.380::1999/06/09-18:00:50.600 [NM] Registering interface d561dbcc-1936-11d3-b3fe-00a0c986aa14 with cluster transport, addr 172.16.64.1, endpoint 3343. 378.380::1999/06/09-18:00:50.615 [NM] Initializing membership...

Wykonywanie raportu łączności

Poniższe zapisy dotyczą rozpoczęcia przez Menedżera węzłów raportu łączności w celu wykrycia ewentualnych błędów interfejsów sieciowych.

378.328::1999/06/09-18:00:50.631 [NM] Scheduling connectivity report for network d561dbcb-1936-11d3-b3fe-00a0c986aa14 ( 100b 172.16.64.1) 378.328::1999/06/09-18:00:50.631 [NM] Updating local connectivity info for network d561dbcb-1936-11d3-b3fe-00a0c986aa14. 378.328::1999/06/09-18:00:50.631 [NM] Node for interface 0 is down 378.328::1999/06/09-18:00:50.631 [NM] Interface 1 is either up or unreachable

W poniższym zapisie Menedżer węzłów ignoruje raport łączności otrzymany z interfejsu 0, ponieważ węzeł interfejsu jest niedostępny.

378.328::1999/06/09-18:00:50.631 [NM] The report from interface 0 is not valid 378.328::1999/06/09-18:00:50.662 [NM] Interface 1 is Up 378.328::1999/06/09-18:00:50.662 [NM] Beginning phase 2 of state computation for network d561dbcb-1936-11d3-b3fe-00a0c986aa14

W poniższym zapisie Menedżer węzłów podsumowuje raport łączności. Niedostępnym interfejsem jest interfejs 0 (patrz wyżej).

378.328::1999/06/09-18:00:50.662 [NM] Unavailable=1, Failed = 0, Unreachable=0, Reachable=1, Up=1,

Znaczenie stanu 3 opisane jest dalej w tym rozdziale pod hasłem „Kody stanu”.

378.328::1999/06/09-18:00:50.662 [NM] Network d561dbcb-1936-11d3-b3fe- 00a0c986aa14 is now in state 3 378.328::1999/06/09-18:00:50.662 [NM] Interface d561dbcc-1936-11d3-b3fe- 00a0c986aa14 is up (node: NODE1, network: 100b 172.16.64.1). 378.328::1999/06/09-18:00:50.662 [NM] Network d561dbcb-1936-11d3-b3fe- 00a0c986aa14 ( 100b 172.16.64.1) is up. 378.380::1999/06/09-18:00:50.631 [CLSMSG] Initializing. 378.380::1999/06/09-18:00:50.881 [NM] Membership initialization complete.

NodeHighestVersion i NodeLowestVersion

Jeśli węzły klastra posiadają różne wersje Windows NT lub Windows 2000 Advanced Server, a więc różne wersje usługi Klastra, to może powstać problem kompatybilności wersji z wszystkimi węzłami. Usługa Klastra oblicza odpowiednią wersję usługi dla całego klastra na podstawie poszczególnych wersji usługi powiązanych ze wszystkimi aktywnymi członkami klastra. Gdy dołączają nowi członkowie, to istniejący członkowie klastra ponownie obliczają odpowiednią wersję usługi.

W poniższych zapisach usługa Klastra oblicza wersję usługi opartą na wersjach wszystkich aktywnych członków klastra, pomimo że istnieje tylko jeden aktywny członek klastra. Numer wersji składa się z dwóch liczb 16-bitowych:

  16 górnych bitów reprezentuje główny numer wersji.

  16 dolnych bitów reprezentuje numer kompilacji klastra.

W pierwszej kolejności usługa Klastra pobiera wartości NodeHighestVersion i NodeLowestVersion dotyczące każdego aktywnego członka klastra.

  NodeHighestVersion określa wersję usługi Klastra działającą na danym członku klastra.

  NodeLowestVersion określa najniższą wersję usługi Klastra, z którą dany aktywny członek klastra może prowadzić komunikację.

378.380::1999/06/09-18:00:50.881 [NM] NmpValidateNodeVersion: Node=1, HighestVersion=0x00030803, LowestVersion=0x000200e0

W drugiej parze zapisów usługa Klastra oblicza najwyższą wersję usługi Klastra mogącą działać niezawodnie na wszystkich węzłach klastra oraz najniższą wersję, z którą każdy węzeł potrafi prowadzić komunikację. Obliczenia dokonuje się w następujący sposób:

  Wartość ClusterHighestVersion jest równa minimum wszystkich wartości NodeHighestVersion.

  Wartość ClusterLowestVersion jest równa maksimum wszystkich wartości NodeLowestVersion. Określa ona minimalną wersję usługi Klastra, którą musi posiadać serwer próbujący dołączyć do klastra.

378.380::1999/06/09-18:00:50.881 [NM] NmpCalcClusterVersion: status = 0 ClusHighestVer=0x00030803, ClusLowestVer=0x000200e0 378.380::1999/06/09-18:00:50.881 [NM] [NmpResetClusterVersion] ClusterHighestVer=0x00030803 ClusterLowestVer=0x000200e0 378.380::1999/06/09-18:00:50.881 [NM] Disabling mixed NT4/NT5 operation.

Wersja 1 oznacza Windows NT 4.0 z pakietem obsługi 3, wersja 2 oznacza Windows NT 4.0 z pakietem obsługi 4 lub 5.

Operacje naprawcze (fixups)

W poniższym zapisie Menedżer węzłów wykonuje operacje naprawcze (fixups) w celu umożliwienia działania klastra w trybie mieszanym. W tym przypadku na węźle 1 działa Windows 2000, a na węźle 2 –Windows NT 4.0. Operacje naprawcze zostają wykonane także po pierwszym uruchomieniu usługi Klastra na nowo uaktualnionym węźle. Po wykonaniu operacji naprawczych usługa Klastra wykonuje globalną aktualizację składu klastra.

378.380::1999/06/09-18:00:50.881 [NM] NmPerformFixups Entry, dwFixupType=1

Aktualizacja lokalnej bazy danych klastra i ustawianie wpisów bazy danych

Poniższe zapisy są typowymi zapisami informującymi o rozpoczęciu i zatwierdzeniu aktualizacji lokalnych. Należy zwrócić uwagę na znaczniki czasu. Lokalne aktualizacje bazy danych klastra mogą, ale nie muszą, wystąpić na tym etapie formowania klastra.

378.380::1999/06/09-18:00:50.897 [GUM] GumSendUpdate: Locker waiting type 2 context 17 378.380::1999/06/09-18:00:50.897 [GUM] Thread 0x380 UpdateLock wait on Type 2 378.380::1999/06/09-18:00:50.897 [GUM] DoLockingUpdate successful, lock granted to 1 378.380::1999/06/09-18:00:50.897 [GUM] GumSendUpdate: Locker dispatching seq 1657 type 2 context 17 378.380::1999/06/09-18:00:50.897 [dm] DmBeginLocalUpdate Entry 378.380::1999/06/09-18:00:50.897 [dm] DmBeginLocalUpdate Exit, pLocalXsaction=0x000a0dd8 dwError=0x00000000

Udostępnianie zasobów

Na ostatnim etapie formowania klastra usługa Klastra tworzy i próbuje udostępnić zasoby. Proces ten obejmuje dwie części: dodanie do bazy danych klastra możliwych właścicieli typów zasobów, a następnie utworzenie i udostępnienie zasobów.

Dodawanie możliwych właścicieli typów zasobów

W poniższych zapisach Zarządca kryzysowy dodaje możliwych właścicieli typów zasobów.

W rzeczywistości dziennik zawiera wiele zdarzeń tego typu, ale wszystkie są bardzo zbliżone do dwóch przedstawionych poniżej przykładów:

378.380::1999/06/09-18:00:50.897 [FM] processing resource types. 378.380::1999/06/09-18:00:50.897 [FM] FmpAddPossibleNode: adding node 1 to resource type’s possible node list 378.380::1999/06/09-18:00:50.897 [FM] FmpAddPossibleNode: adding node 2 to resource type’s possible node list

Po dodaniu możliwych właścicieli typów zasobów usługa Klastra aktualizuje lokalne kopie klucza rejestrowego klastra:

378.380::1999/06/09-18:00:50.928 [NM] NmpUpdatePerformJoinFixups2: called postfixup notifycb function with status 0 378.380::1999/06/09-18:00:50.928 [DM] DmCommitLocalUpdate Entry 378.380::1999/06/09-18:00:50.928 [DM] DmCommitLocalUpdate Exit, dwError=0x00000000 378.380::1999/06/09-18:00:50.928 [GUM] GumpDoUnlockingUpdate releasing lock ownership 378.380::1999/06/09-18:00:50.928 [GUM] GumSendUpdate: completed update seq 1657 type 2 context 17

Tworzenie i udostępnianie zasobów

Poniższe zapisy dotyczą procesu tworzenia i inicjacji zasobów. Podobne zapisy wystąpią w stosunku do każdego tworzonego zasobu. W tej części usługa Klastra tworzy wszystkie grupy na podstawie listy grup przechowywanej w bazie danych klastra:

378.380::1999/06/09-18:00:51.193 [FM] Processing groups list.

W poniższych zapisach Zarządca kryzysowy tworzy i inicjuje grupę klastra:

378.380::1999/06/09-18:00:51.193 [FM] Creating group 254ef0e4-1937-11d3- b3fe-00a0c986aa14 378.380::1999/06/09-18:00:51.193 [FM] Initializing group 254ef0e4-1937- 11d3-b3fe-00a0c986aa14 from the registry. 378.380::1999/06/09-18:00:51.193 [FM] Name for Group 254ef0e4-1937-11d3- b3fe-00a0c986aa14 is ‘Cluster Group’.

Następnie Zarządca kryzysowy tworzy i udostępnia po kolei wszystkie zawarte w grupie klastra zasoby. Zarządca kryzysowy:

  Notuje, że dany zasób jest rzeczywiście zawarty w danej grupie:

378.380::1999/06/09-18:00:51.193 [FM] Group 254ef0e4-1937-11d3-b3fe- 00a0c986aa14 contains Resource 254ef0e5-1937-11d3-b3fe- 00a0c986aa14.

Tworzy zasób i inicjuje go na podstawie klucza rejestrowego klastra:

378.380::1999/06/09-18:00:51.193 [FM] Creating resource 254ef0e5- 1937-11d3-b3fe-00a0c986aa14

378.380::1999/06/09-18:00:51.193 [FM] Initializing resource 254ef0e5- 1937-11d3-b3fe-00a0c986aa14 from the registry.

  Zapisuje w dzienniku Klastra nazwę zasobu:

378.380::1999/06/09-18:00:51.193 [FM] Name for Resource 254ef0e5- 1937-11d3-b3fe-00a0c986aa14 is ‘Cluster IP Address’.

  Dodaje możliwych właścicieli zasobu do klucza rejestrowego klastra:

378.380::1999/06/09-18:00:51.193 [FM] FmpAddPossibleEntry: adding node 1 as possible host for resource 254ef0e5-1937-11d3-b3fe- 00a0c986aa14.

378.380::1999/06/09-18:00:51.193 [FM] FmpAddPossibleEntry: adding node 2 as possible host for resource 254ef0e5-1937-11d3-b3fe- 00a0c986aa14.

  Tworzy i otwiera ewentualne zależności związane z zasobem:

378.380::1999/06/09-18:00:51.193 [FM] All dependencies for resource 254ef0e5-1937-11d3-b3fe-00a0c986aa14 created.

Poniższy zapis informuje o utworzeniu kolejnego zasobu – zasobu nazwy klastra:

378.380::1999/06/09-18:00:51.193 [FM] Group 254ef0e4-1937-11d3-b3fe-

00a0c986aa14 contains Resource 254ef0e6-1937-11d3-b3fe-00a0c986aa14.

Przy tworzeniu i udostępnianiu zasobu nazwy klastra (zasobu 254ef0e6-1937-11d3-b3fe-00a0c986aa14) Zarządca kryzysowy odkrywa, że zasób ten zależy od zasobu adresu IP klastra, a więc otwiera zasób adresu IP klastra. Aby usługa Klastra mogła wykonać takie zadania jak udostępnienie zasobu i modyfikacja jego właściwości, musi ona w pierwszej kolejności otworzyć zasób i otrzymać uchwyt zasobu.

378.380::1999/06/09-18:00:51.193 [FM] Resource 254ef0e6-1937-11d3-b3fe- 00a0c986aa14 depends on 254ef0e5-1937-11d3-b3fe-00a0c986aa14. Creating... 378.380::1999/06/09-18:00:51.193 [FM] CreateResource, Opened existing resource 254ef0e5-1937-11d3-b3fe-00a0c986aa14 378.380::1999/06/09-18:00:51.193 [FM] All dependencies for resource 254ef0e6-1937-11d3-b3fe-00a0c986aa14 created.

Pozostałe zapisy związane z udostępnianiem zasobu 254ef0e6-1937-11d3-b3fe-00a0c986aa14 (zasobu nazwy klastra) są pomieszane z wieloma innymi zdarzeniami (na przykład, globalnymi aktualizacjami), których większość dotyczy tworzenia i udostępniania innych zasobów i grup.

W poniższych zapisach usługa Klastra rozpoczyna tworzenie zasobu kworum i jego grupy. Należy zwrócić uwagę na to, że usługa Klastra nie udostępnia zasobu kworum przed zasobem nazwy klastra i że sekwencja zdarzeń jest podobna w przypadku wszystkich zasobów i grup:

378.380::1999/06/09-18:00:51.193 [FM] Creating group 254ef0e7-1937-11d3- b3fe-00a0c986aa14 378.380::1999/06/09-18:00:51.209 [FM] Initializing group 254ef0e7-1937- 11d3-b3fe-00a0c986aa14 from the registry. 378.380::1999/06/09-18:00:51.209 [FM] Name for Group 254ef0e7-1937-11d3- b3fe-00a0c986aa14 is ‘Disk Group 1’. 378.380::1999/06/09-18:00:51.209 [FM] Group 254ef0e7-1937-11d3-b3fe- 00a0c986aa14 contains Resource 254ef0e8-1937-11d3-b3fe-00a0c986aa14. 378.380::1999/06/09-18:00:51.209 [FM] CreateResource, Opened existing resource 254ef0e8-1937-11d3-b3fe-00a0c986aa14 378.380::1999/06/09-18:00:51.209 [FM] ReCreating quorum resource 254ef0e8-1937-11d3-b3fe-00a0c986aa14

W klastrze działającym w trybie mieszanym różne wersje plików DLL typów zasobów mogą wymagać wykonania operacji naprawczych (fixups), podobnie jak usługa Klastra. Operacje te można wykonać po utworzeniu wszystkich grup. Informują o tym następujące zapisy:

378.380::1999/06/09-18:00:51.209 [FM] FmpFixupResourceTypes Entry. 378.380::1999/06/09-18:00:51.209 [FM] FmpFixupResourceTypes Exit

Następnie usługa Klastra otrzymuje i zapisuje informacje o stanie wszystkich grup należących do klastra.

378.380::1999/06/09-18:00:51.209 [FMX] GetGroupListState, Group <Disk Group 1> state = 0 378.380::1999/06/09-18:00:51.209 [FMX] GetGroupListState, Group <Cluster Group> state = 1 378.380::1999/06/09-18:00:51.209 [FMX] GetGroupListState, Group <test group> state = 1

W poniższych zapisach Zarządca kryzysowy inicjuje za pomocą rejestru zasób adresu IP klastra, wykonuje związaną z tym globalną aktualizację i zapisuje informacje o zmianach w dzienniku kworum:

378.380::1999/06/09-18:00:51.209 [FM] Initializing resource 254ef0e5- 1937-11d3-b3fe-00a0c986aa14 from the registry. 378.380::1999/06/09-18:00:51.225 [FM] Name for Resource 254ef0e5-1937- 11d3-b3fe-00a0c986aa14 is ‘Cluster IP Address’. 378.380::1999/06/09-18:00:51.225 [FM] FmpRmCreateResource: creating resource 254ef0e5-1937-11d3-b3fe-00a0c986aa14 in shared resource monitor 378.3c0::1999/06/09-18:00:51.240 [GUM] GumSendUpdate: Locker waiting type 1 context 0 378.3c0::1999/06/09-18:00:51.240 [GUM] Thread 0x3c0 UpdateLock wait on Type 1 378.3c0::1999/06/09-18:00:51.240 [GUM] DoLockingUpdate successful, lock granted to 1

Poniższa aktualizacja GUM dotyczy utworzenia nowego wpisu lub klucza rejestrowego:

378.3c0::1999/06/09-18:00:51.240 [GUM] GumSendUpdate: Locker dispatching seq 1659 type 1 context 0 378.3c0::1999/06/09-18:00:51.240 [dm] DmWriteToQuorumLog Entry Seq#=1659 Type=0 Size=152 378.3c0::1999/06/09-18:00:51.240 [dm] DmWriteToQuorumLog Entry Seq#=1659 Type=0 Size=152 378.3c0::1999/06/09-18:00:51.240 [GUM] GumpDoUnlockingUpdate releasing lock ownership 378.3c0::1999/06/09-18:00:51.240 [GUM] GumSendUpdate: completed update seq 1659 type 1 context 0

Poniższy zapis informuje, że interfejs sieciowy nie jest już aktualny (dostępny).

15c.458::1999/06/09-18:00:51.256 IP Address <Cluster IP Address>: NBT interface \Device\NetBt_If1 (instance 0x712F4D0A) is no longer valid.

Poniższa aktualizacja dotyczy usunięcia wpisu z klucza rejestrowego, prawdopodobnie wpisu związanego z nieaktualnym interfejsem:

378.3c0::1999/06/09-18:00:51.256 [GUM] GumSendUpdate: Locker waiting type 1 context 4099 378.3c0::1999/06/09-18:00:51.256 [GUM] Thread 0x3c0 UpdateLock wait on Type 1 378.3c0::1999/06/09-18:00:51.256 [GUM] DoLockingUpdate successful, lock granted to 1 378.3c0::1999/06/09-18:00:51.256 [GUM] GumSendUpdate: Locker dispatching seq 1660 type 1 context 4099

Usługa Klastra ponownie próbuje utworzyć i udostępnić zasób nazwy klastra (254ef0e6-1937-11d3-b3fe-00a0c986aa14), inicjując zasób na podstawie klucza rejestrowego klastra i tworząc go w Monitorze zasobów:

378.380::1999/06/09-18:00:51.256 [FM] Initializing resource 254ef0e6- 1937-11d3-b3fe-00a0c986aa14 from the registry. 378.380::1999/06/09-18:00:51.256 [FM] Name for Resource 254ef0e6-1937- 11d3-b3fe-00a0c986aa14 is ‘Cluster Name’. 378.380::1999/06/09-18:00:51.271 [FM] FmpRmCreateResource: creating resource 254ef0e6-1937-11d3-b3fe-00a0c986aa14 in shared resource monitor

Poniższe zapisy informują, że Menedżer bazy danych utworzył klucz rejestrowy zastępujący klucz, który został usunięty w powyższych zapisach oznaczonych 1999/06/09-18:00:51.256. Klucz ten może być wpisem rejestrowym lub podkluczem, jednakże jego utworzenie zostaje zapisane w dzienniku Klastra jako utworzenie klucza („key”). Po tej zmianie globalna GUM wykonuje globalną aktualizację i zmiana zostaje zapisana w dzienniku kworum przez Menedżera bazy danych. Należy zwrócić uwagę na to, że typ (0) podany przy operacji zapisu w dzienniku kworum jest dopasowany do numeru kontekstu globalnej aktualizacji. Gdyby natychmiast po wykonaniu tej operacji działająca na tym węźle usługa Klastra uległa awarii, to drugi węzeł miałby dostęp do zmian zapisanych w dzienniku kworum i mógłby zastosować je podczas procesu formowania klastra. Umożliwiłoby to zachowanie bieżącej konfiguracji klastra.

378.3c0::1999/06/09-18:00:51.271 [GUM] GumSendUpdate: Locker waiting type 1 context 0 378.3c0::1999/06/09-18:00:51.271 [GUM] Thread 0x3c0 UpdateLock wait on Type 1 378.3c0::1999/06/09-18:00:51.271 [GUM] DoLockingUpdate successful, lock granted to 1 378.3c0::1999/06/09-18:00:51.271 [GUM] GumSendUpdate: Locker dispatching seq 1662 type 1 context 0 378.3c0::1999/06/09-18:00:51.271 [dm] DmWriteToQuorumLog Entry Seq#=1662 Type=0 Size=152 378.3c0::1999/06/09-18:00:51.271 [dm] DmWriteToQuorumLog Entry Seq#=1662 Type=0 Size=152 378.3c0::1999/06/09-18:00:51.271 [GUM] GumpDoUnlockingUpdate releasing lock ownership 378.3c0::1999/06/09-18:00:51.271 [GUM] GumSendUpdate: completed update seq 1662 type 1 context 0 15c.3cc::1999/06/09-18:00:51.287 Network Name <Cluster Name>: Successful open of resid 507752 378.380::1999/06/09-18:00:51.287 [FM] FmpRmCreateResource: created resource 254ef0e6-1937-11d3-b3fe-00a0c986aa14, resid 741136

Po udostępnieniu innych zasobów usługa Klastra próbuje udostępnić grupę Klastra, która zawiera zasoby nazwy klastra i adresu IP klastra:

378.380::1999/06/09-18:00:51.318 [FM] FmpOnlineGroupFromList: Previous group state for 254ef0e4-1937-11d3-b3fe-00a0c986aa14 is 1 378.380::1999/06/09-18:00:51.318 [FM] FmpOnlineGroup: trying to bring group 254ef0e4-1937-11d3-b3fe-00a0c986aa14 online 378.380::1999/06/09-18:00:51.318 [FM] OnlineGroup for 254ef0e4-1937- 11d3-b3fe-00a0c986aa14 owner 651932

Następnie, usługa Klastra udostępnia adres IP klastra. Aby to umożliwić, Zarządca kryzysowy uzyskuje wspólną blokadę na zasobie kworum (więcej informacji o wspólnych blokadach znajduje się wcześniej w tym rozdziale pod hasłem „Wspólne blokady i licznik gdwQuoBlockingResources”).

378.380::1999/06/09-18:00:51.318 [FM] FmpRmOnlineResource: bringing resource 254ef0e5-1937-11d3-b3fe-00a0c986aa14 (resid 735200) online. 378.380::1999/06/09-18:00:51.318 [CP] CppResourceNotify for resource Cluster IP Address 378.380::1999/06/09-18:00:51.334 [FM] FmpRmOnlineResource: called InterlockedIncrement on gdwQuoBlockingResources for resource 254ef0e5-1937-11d3-b3fe-00a0c986aa14 15c.458::1999/06/09-18:00:51.334 IP Address <Cluster IP Address>: Bringing resource online...

Gdy wątek Online jeszcze działa, GUM rozpoczyna globalną aktualizację w związku ze zmianą stanu zasobu adresu IP klastra:

378.380::1999/06/09-18:00:51.334 [GUM] GumSendUpdate: Locker waiting type 0 context 8 15c.488::1999/06/09-18:00:51.334 IP Address <Cluster IP Address>: Online thread running.

Poniższy zapis należy do grupy zapisów informujących o działaniach mających miejsce wówczas, gdy zasoby adresu IP klastra i nazwy klastra pozostają w stanie oczekiwania (pending). W tym zapisie zasób adresu IP zostaje zawiadomiony o zmianie lub usunięciu powiązanego z nim interfejsu sieciowego.

15c.488::1999/06/09-18:00:51.334 IP Address <Cluster IP Address>: Created cluster notify port.

Gdy grupa klastra jest udostępniona, usługa Klastra sprawdza, czy istnieje w tej samej podsieci interfejs sieciowy, z którym powiązany może być adres IP. Jeśli nie, to adres IP zostaje osierocony.

15c.488::1999/06/09-18:00:51.350 IP Address <Cluster IP Address>: Checking if resource is orphaned: network masks 00FCFFFF=00FFFFFF and addresses FE4010AC^00000A0A.

Po zapisach dotyczących udostępniania innego zasobu następują dalsze zapisy związane z udostępnianiem zasobu adresu IP, informujące o otrzymaniu i rejestracji przez usługę Klastra uchwytu interfejsu sieciowego (rejestracja zapewnia, że zasób adresu IP będzie zawiadamiany o ewentualnych zmianach dotyczących powiązanego z nim interfejsu sieciowego).

15c.488::1999/06/09-18:00:51.365 IP Address <Cluster IP Address>: Online: Opened object handle for netinterface d561dbcc-1936-11d3- b3fe-00a0c986aa14. 15c.488::1999/06/09-18:00:51.365 IP Address <Cluster IP Address>: Online: Registered notification for netinterface d561dbcc-1936-11d3- b3fe-00a0c986aa14.

W poniższych zapisach Menedżer bazy danych tworzy punkt kontrolny bazy danych klastra (w tym przypadku klucza klastra znajdującego się w rejestrze systemu lokalnego) i Menedżer dziennika zapisuje ten punkt kontrolny w dzienniku kworum:

378.380::1999/06/09-18:00:51.412 [dm]DmUpdateFormNewCluster - taking a  checkpoint 378.380::1999/06/09-18:00:51.412 [LM] LogCheckPoint entry 378.380::1999/06/09-18:00:51.412 [LM] DmpGetSnapshotCb::checkpoint file name =D:\MSCS\chk67D.tmp Seq#=1661 378.380::1999/06/09-18:00:51.756 [dm] DmpGetSnapShotCb - DmpGetDatabase returned 0x00000000 378.380::1999/06/09-18:00:51.756 [LM] LogCheckPoint: ChkPtFile=D:\MSCS\chk67D.tmp Chkpt Trid=1661 CheckSum=86865 378.380::1999/06/09-18:00:51.756 [lm] LogpAppendPage : Writing 1024 bytes to disk at offset 0x00000800 378.380::1999/06/09-18:00:51.756 [lm] LogFlush : pLog=0x000a0650 writing the 1024 bytes for active page at offset 0x00000c00 378.380::1999/06/09-18:00:51.771 [LM] LogCheckPoint: EndChkpt written. EndChkPtLsn =0x00000c08 ChkPt Seq=1661 ChkPt FileName=D:\MSCS\chk67D.tmp 378.380::1999/06/09-18:00:51.771 [lm] LogpCheckpoint : Writing 1024 bytes to disk at offset 0x00000000 378.380::1999/06/09-18:00:51.771 [LM] LogCheckPoint Exit

Poniższy zapis informuje, że któryś węzeł jest odłączony. Oznacza to, że aktualizacje będą dokonywane w bazie danych i zapisywane w dzienniku kworum — dlatego aktualizacja zostaje dokonana przez Menedżera bazy danych. Gdyby wszystkie węzły były dostępne, to aktualizacji dokonałby GUM, replikując ewentualne zmiany do wszystkich węzłów klastra.

378.380::1999/06/09-18:00:51.771 [dm] DmUpdateFormNewCluster - some node down

Sformowanie klastra można uznać za udane:

378.380::1999/06/09-18:00:51.787 [INIT] Successfully formed a cluster. 378.380::1999/06/09-18:00:51.803 [INIT] Cluster started.

Po sformowaniu klastra usługa Klastra udostępnia dalsze zasoby, w tym zasób adresu IP klastra.

Następnie Menedżer bazy danych dokonuje kilku zmian w bazie danych klastra oraz zmienia jeden z podkluczy parametrów związanych z zasobem adresu IP klastra (zapisując informacje o wszystkich zmianach w dzienniku kworum). Następnie GUM dokonuje globalnej aktualizacji w związku za zmianą rejestru (typ 1 kontekst 4098):

378.498::1999/06/09-18:00:53.162 DM: Setting value NbtDeviceInstance for key Resources\254ef0e5-1937-11d3-b3fe-00a0c986aa14\Parameters\1 378.498::1999/06/09-18:00:53.178 [dm] DmWriteToQuorumLog Entry Seq#=1677 Type=4098 Size=180 378.498::1999/06/09-18:00:53.178 [lm] LogWrite : Entry TrId=1677 RmId=5 RmType = 4098 Size=180 378.498::1999/06/09-18:00:53.178 [lm] LogWrite : Exit returning=0x000011f0 378.498::1999/06/09-18:00:53.178 [GUM] GumpDoUnlockingUpdate releasing lock ownership 378.498::1999/06/09-18:00:53.178 [GUM] GumSendUpdate: completed update seq 1677 type 1 context 4098

W poniższych zapisach usługa Klastra tworzy interfejs NBT dla zasobu adresu IP klastra, a Monitor zasobów informuje, że zasób jest dostępny (stan 2):

15c.488::1999/06/09-18:00:53.178 IP Address <Cluster IP Address>: Created NBT interface \Device\NetBt_If1 (instance 0x7A85A0AA). 15c.488::1999/06/09-18:00:59.396 [RM] RmpSetResourceStatus, Posting state 2 notification for resource <Cluster IP Address>

Kolejny zapis dotyczy dostępności zasobu adresu IP klastra.

15c.488::1999/06/09-18:00:59.396 IP Address <Cluster IP Address>: IP Address 172.16.64.254 on adapter (R) PRO/100B PCI Adapter (TX) online

Poniższy zapis informuje o zmianie stanu zasobu adresu IP klastra z 129 (oczekiwanie) na 2 (online).

378.328::1999/06/09-18:00:59.396 [FM] HandleResourceTransition: Resource Name = 254ef0e5-1937-11d3-b3fe-00a0c986aa14 old state=129 new state=2

Proces udostępniania zasobu bf37b6a7-391d-11d2-a397-0000f803f3da (zasobu nazwy sieci klastra) jest dłuższy. W czterech pierwszych zapisach zasób próbuje się udostępnić, ale musi oczekiwać na udostępnienie zasobu 254ef0e5-1937-11d3-b3fe-00a0c986aa14 (zasobu adresu IP klastra), od którego zasób nazwy sieci jest zależny:

378.3a8::1999/06/09-18:00:59.396 [FM] OnlineWaitingTree, 254ef0e6-1937- 11d3-b3fe-00a0c986aa14 (129) depends on 254ef0e5-1937-11d3-b3fe- 00a0c986aa14 (2). Start now 378.3a8::1999/06/09-18:00:59.396 [FM] OnlineWaitingTree, Start resource 254ef0e6-1937-11d3-b3fe-00a0c986aa14 378.3a8::1999/06/09-18:00:59.490 [FM] OnlineResource: 254ef0e6-1937- 11d3-b3fe-00a0c986aa14 depends on 254ef0e5-1937-11d3-b3fe- 00a0c986aa14. Bring online first. 378.3a8::1999/06/09-18:00:59.537 [FM] FmpRmOnlineResource: bringing resource 254ef0e6-1937-11d3-b3fe-00a0c986aa14 (resid 741136) online.

Udostępnianie zasobu nazwy sieci klastra obejmuje kilka już opisanych zadań, między innymi:

  Globalne aktualizacje.

  Zmiany wartości wpisów rejestrowych i dokonanie zapisu o zmianie w dzienniku kworum.

  Uzyskanie i zwolnienie wspólnych blokad na zasobie kworum.

  Arbitraż dyskowy.

Występują także następujące zapisy dodatkowe (pod koniec, zasób nazwy sieci klastra jest udostępniony):

15c.4d4::1999/06/09-18:01:01.177 Network Name <Cluster Name>: Registered server name CLUSTER1 on transport \Device\NetBt_If1. 15c.4d4::1999/06/09-18:01:01.177 Network Name <Cluster Name>: Registered workstation name CLUSTER1 on transport \Device\NetBt_If1. . . . 15c.4d4::1999/06/09-18:01:01.615 Network Name <Cluster Name>: The zone for 254.64.16.172.in-addr.arpa. does not accept dynamic DNS registration updates. 15c.4d4::1999/06/09-18:01:01.630 Network Name <Cluster Name>: Registered DNS name cluster1.itreskit.com on IP Address 172.16.64.254. 15c.4d4::1999/06/09-18:01:01.630 Network Name <Cluster Name>: Network Name CLUSTER1 is now online 15c.4d4::1999/06/09-18:01:01.630 [RM] RmpSetResourceStatus, Posting state 2 notification for resource <Cluster Name>

Pomyślne sformowanie klastra

Usługa Klastra wykonuje następujące zadania:

  Rozpoczęcie replikacji zdarzeń z dziennika zdarzeń do wszystkich węzłów klastra.

378.380::1999/06/09-18:00:51.381 [EVT] EvOnline 378.380::1999/06/09-18:00:51.381 [EVT] Set propagation state to 0001 378.380::1999/06/09-18:00:51.381 [EVT] EvOnline : calling ElfRegisterClusterSvc 378.380::1999/06/09-18:00:51.412 [EVT] EvOnline: pPackedEventInfo- >ulSize=3284 pPackedEventInfo->ulNulEventsForLogFile=2

  Utworzenie punktu kontrolnego (migawki) bazy danych kworum i zastąpienie nim starego punktu kontrolnego przechowywanego na dysku kworum:

378.380::1999/06/09-18:00:51.412 [dm]DmUpdateFormNewCluster - taking a checkpoint 378.380::1999/06/09-18:00:51.412 [LM] LogCheckPoint entry 378.380::1999/06/09-18:00:51.412 [LM] DmpGetSnapshotCb::checkpoint file name =D:\MSCS\chk67D.tmp Seq#=1661 378.380::1999/06/09-18:00:51.756 [dm] DmpGetSnapShotCb - DmpGetDatabase returned 0x00000000 378.380::1999/06/09-18:00:51.756 [LM] LogCheckPoint: ChkPtFile=D:\MSCS\chk67D.tmp Chkpt Trid=1661 CheckSum=86865 378.380::1999/06/09-18:00:51.756 [lm] LogpAppendPage : Writing 1024 bytes to disk at offset 0x00000800 378.380::1999/06/09-18:00:51.756 [lm] LogFlush : pLog=0x000a0650 writing the 1024 bytes for active page at offset 0x00000c00 378.380::1999/06/09-18:00:51.771 [LM] LogCheckPoint: EndChkpt written. EndChkPtLsn =0x00000c08 ChkPt Seq=1661 ChkPt FileName=D:\MSCS\chk67D.tmp 378.380::1999/06/09-18:00:51.771 [lm] LogpCheckpoint : Writing 1024 bytes to disk at offset 0x00000000 378.380::1999/06/09-18:00:51.771 [LM] LogCheckPoint Exit

Poniższy zapis informuje, że usługa Klastra sprawdziła unikalność własnego adresu IP (przy użyciu polecenia ping):

15c.488::1999/06/09-18:00:59.396 IP Address <Cluster IP Address>: IP Address 172.16.64.254 on adapter (R) PRO/100B PCI Adapter (TX) online

Podsumowanie formowania klastra

Formowanie klastra przez usługę Klastra obejmuje:

  Uruchomienie Monitora zasobów, komponent odpowiedzialny za zarządzanie zasobami klastra.

  Udostępnienie zasobu kworum.

  Aktualizację lokalnych kopii bazy danych klastra.

  Odtworzenie grup i zasobów.

  Skonfigurowanie sieci, odtworzenie obiektów sieci i interfejsów, rejestrację ich w sterowniku transportu klastra oraz udostępnienie tych obiektów.

  Udostępnienie wszystkich obiektów.

  Utworzenie punktu kontrolnego bazy danych klastra.

Po zakończeniu formowania klastra udostępniane są dalsze zasoby.

Przykłady niepowodzenia

W tej części przedstawione są przykłady zapisów z dziennika Klastra, które powstały w wyniku błędów spowodowanych przez:

  Brak DLL zasobu

  Zerwanie połączenia sieciowego wewnątrz klastra

  Zmianę miejsca przechowywania kworum (uniemożliwiającą sformowanie klastra na danym węźle).

W poniższych przykładach uwzględnione są tylko zapisy, które są związane z tematem lub pomagają zorientować się w sekwencji. Pominięte zapisy oznaczone są w następujący sposób:

. . .

Brak DLL zasobu

Gdyby spróbowano uruchomić usługę Klastra w klastrze Windows NT 4.0, to pojawiłby się komunikat „Nie można uruchomić usługi Serwera Klastra na [nazwa serwera] Błąd 127: określona procedura nie została znaleziona”.

Odpowiednie zapisy dziennika Klastra wyglądają następująco. Szczególną uwagę należy zwrócić na dwa ostatnie zapisy, które informują o przyczynie nieznalezienia procedury – błędzie podczas ładowania pliku zarządzającego danym zasobem (Clusres.dll). Oznacza to, że usługa nie może zostać uruchomiona, dlatego że niemożliwe jest utworzenie zasobu zarządzającego usługą:

0ab::11-18:35:52.546 [FM] arbitrate for quorum resource id e558e4a3-320d-11d2-9b64-00805fa63b1b. 0ab::11-18:35:52.546 [FM] FmpQueryResourceInfo:initialize the resource with the registry information 0ab::11-18:35:52.562 FmpAddPossibleNodeToList:: Warning, Node 2 not found 0ab::11-18:35:52.562 FmpRmCreateResource: creating resource e558e4a3-320d-11d2-9b64-00805fa63b1b in shared resource monitor 075::11-18:35:52.593 [RM] Error loading resource dll clusres.dll, error 127. 075::11-18:35:52.593 [RM] Failed creating resource e558e4a3-320d-11d2-9b64-00805fa63b1b, error 127.

Zerwane połączenie sieciowe wewnątrz klastra

W tej części przedstawione są informacje z dzienników Klastra dwóch węzłów dotyczące sytuacji, w której wewnątrzklastrowe połączenie sieciowe (które w tym klastrze stanowi pojedynczy punkt awarii) zostało przerwane.

Dziennik węzła 2

Węzeł 2 jest właścicielem kworum w momencie przerwania połączenia.

Poniższe zapisy informują o utracie komunikacji pomiędzy węzłami. W takim przypadku usługa Klastra rozpoczyna operację wstrzymania I/O.

0000()00::1999/10/21-23:09:01.999 [NM] Holding I/O. . . . 0000()7c::1999/10/21-23:09:02.108 [NM] Checking if we own the quorum resource. . . . 0000()7c::1999/10/21-23:09:02.124 [FM] Successfully arbitrated quorum resource a83b4084-3391-4618-890e-8794d4df923b. . . . 0000()00::1999/10/21-23:09:04.905 [ClMsg] Received interface unreachable event for node 1 network 1 0000()00::1999/10/21-23:09:04.905 [ClMsg] Received interface unreachable event for node 1 network 2 0000()2c::1999/10/21-23:09:04.905 [NM] Communication was lost with interface 0bd641f7-7d8c-4d94-9279-d461846b299b (node: NODE1, network: clients(1)) . . . 0000()2c::1999/10/21-23:09:04.905 [NM] Communication was lost with interface ddda464e-7c6d-4439-b27b-cd0da7957162 (node: NODE1, network: interconnect) . . . 0000()7c::1999/10/21-23:09:09.123 [NM] Resuming I/O. . . . 0000()7c::1999/10/21-23:09:09.123 [EP] Nodes down event received . . . 0000()64::1999/10/21-23:09:09.139 [DM] DmpEventHandler - Node is down, turn quorum logging on...

Dziennik węzła 1

Poniższe zapisy pochodzą z dziennika węzła 1, a dotyczą tego samego wydarzenia: utraty połączenia obsługującego komunikację wewnątrz klastra. Poniższe zapisy, dotyczące niedostępności interfejsu sieciowego, są pierwszymi wskaźnikami awarii. Uznanie drugiego węzła za niedostępny z powodu niedostępności interfejsu jest powodem występujących poniżej zdarzeń oznaczonych RGP (Regroup).

0000()e4::1999/10/21-23:10:38.039 [ClMsg] Received interface unreachable event for node 2 network 2 0000()90::1999/10/21-23:10:38.039 [NM] Communication was lost with interface 198ffe74-b7b9-41e5-b95a-25f618eb0c43 (node: NODE2, network: interconnect) 0000()e4::1999/10/21-23:10:42.914 [ClMsg] Received node down event for node 2, epoch 0 . . . 0000()74::1999/10/21-23:10:46.711 [NM] Checking if we own the quorum resource.

W poniższym zapisie „error 1” oznacza „Niewłaściwa funkcja”. Działająca na tym węźle usługa Klastra nie mogła odczytać informacji o partycjach z dysku kworum przed dokonaniem rezerwacji, ponieważ drugi węzeł zarezerwował dysk kworum po udanym resecie szyny zgłoszonym we wcześniejszym zapisie.

0000()9c::1999/10/21-23:10:50.351 Physical Disk <Disk E:>: [DiskArb]Failed to write (sector 12), error 1.

W poniższym zapisie „status 1” oznacza niepowodzenie arbitrażu dysku kworum (E:). Oznacza to, że drugi węzeł obronił swoją rezerwację dysku. Zapisy drugi i trzeci dotyczą tego samego błędu:

0000()9c::1999/10/21-23:10:50.351 Physical Disk <Disk E:>: [DiskArb]Arbitrate returned status 1. . . . 0000()74::1999/10/21-23:10:50.351 [FM] Failed to arbitrate quorum resource a83b4084-3391-4618-890e-8794d4df923b, error 1. . . . 0000()74::1999/10/21-23:10:50.351 [RGP] Node 1: REGROUP ERROR: arbitration failed.

Ponieważ arbitraż nie powiódł się i węzły są partycjonowane, to usługa Klastra działająca na tym węźle zamyka się w celu wycofania węzła z klastra.

0000()74::1999/10/21-23:10:50.351 [NM] Halting this node due to membership or communications error. Halt code = 1000 . . . 0000()cc::1999/10/21-23:10:51.117 [RM] Going away, Status = 1, Shutdown = 0. . . . 0000()2c::1999/10/21-23:10:51.148 [RM] NotifyChanges shutting down.

Węzeł nie może sformować klastra z powodu zmiany miejsca kworum

Poniższy dziennik dotyczy sytuacji, w której miejsce przechowywania kworum zostało zmienione w momencie, gdy usługa Klastra na węźle 1 nie działała. Następnie usługa Klastra została wyłączona na drugim węźle, jeszcze przed jej ponownym uruchomieniem na węźle 1. Wcześniejsze zapisy tego dziennika, dotyczące inicjacji usługi Klastra i formowania klastra, były normalne (patrz „Formowanie klastra” wcześniej w tym rozdziale).

Przedstawiona poniżej część dziennika Klastra rozpoczyna się po wykonaniu przez usługę Klastra następujących zadań:

  Nieudane poszukiwanie węzła, który odgrywałby rolę sponsora przy dołączaniu niniejszego węzła do klastra.

  Rozpoczęcie operacji formowania.

  Utworzenie i udostępnienie grupy klastra oraz zawartych w niej zasobów.

  Rozpoczęcie arbitrażu w stosunku do zasobu kworum, ustanowienie posiadania zasobu i udostępnienie tego zasobu.

Następnie, usługa Klastra próbuje otworzyć dziennik kworum:

0000()98::1999/10/21-23:58:30.621 [INIT] Attempting to form cluster CLUSTER10 0000()98::1999/10/21-23:58:30.746 [FMX] Found the quorum resource a83b4084-3391-4618-890e-8794d4df923b. . . .

Poniższy zapis informuje o tym, że według lokalnej kopii bazy danych konfiguracji klastra, kworum znajduje się pod ścieżką E:\MSCS\Quolog.log. Jednakże w momencie, gdy ten węzeł był odłączony, katalog kworum został przeniesiony, a następnie odłączony został drugi węzeł klastra, dlatego pierwszy węzeł nie ma teraz dostępu do aktualnych informacji o miejscu przechowywania kworum.

0000()2c::1999/10/21-23:58:31.152 [DM] DmpQuoObjNotifyCb: the name of the quorum file is E:\MSCS\quolog.log . . .

W poniższych zapisach, zanim Menedżer bazy danych poinformuje o odnalezieniu pliku tombstone kworum, wydaje się, że nic nie stoi na drodze do pomyślnego sformowania klastra przez ten węzeł.

0000()2c::1999/10/21-23:58:31.168 [LM] LogpCreate : Exit with success 0000()2c::1999/10/21-23:58:31.184 [DM] DmpQuoObjNotifyCb: Quorum log opened 0000()2c::1999/10/21-23:58:31.184 [FM] HandleResourceTransition: Resource Name = a83b4084-3391-4618-890e- 8794d4df923b old state=129 new state=2 0000()2c::1999/10/21-23:58:31.184 [FM] FmpPropagateResourceState: signalling the ghQuoOnlineEvent 0000()98::1999/10/21-23:58:31.184 [DM] DmpChkQuoTombStone - Entry . . .

W dwóch poniższych zapisach Menedżer bazy danych informuje o odnalezieniu pliku tombstone odpowiadającego staremu miejscu przechowywania katalogu kworum. Więcej informacji o plikach tombstone znajduje się wcześniej w tym rozdziale pod hasłem „Zastosowanie zmian z dziennika kworum do bazy danych klastra”.

0000()98::1999/10/21-23:58:31.199 [DM] DmpChkQuoTombStone:A tombstone for this resource, and quorum log file was found here. 0000()98::1999/10/21-23:58:31.199 [DM] DmpChkQuoTombStone:This is node is only allowed to do a join, make sure another node forms . . .

Na końcu występuje zapis informujący o zamknięciu usługi Klastra.

000001bc.000004dc::1999/10/21-23:58:32.902 [RM] NotifyChanges shutting down.

Wskazówki

Strategie omówione w tej części pomogą odczytać dziennik usługi Klastra.

Odczytywanie dziennika w Word lub WordPad

Większość dzienników usługi Klastra jest zbyt duża, aby otworzyć je w programie Notatnik (Notepad).

Jeśli dziennik jest otwarty w Microsoft Word lub w Microsoft WordPad, to funkcje wyszukiwania i inne mogą być wykorzystane do śledzenia wielokrotnie występujących w dzienniku identyfikatorów wątków oraz identyfikatorów lub nazw zasobów i grup.

Korelacja dziennika zdarzeń Windows 2000 z dziennikiem usługi Klastra

Aby umożliwić skupienie się na zapisach związanych z danym problemem, należy wykorzystać numery aktualizacji GUM do skojarzenia zapisów dziennika Klastra z zapisami dziennika zdarzeń Windows 2000. Alternatywną metodą jest użycie znaczników czasu, ale prawdopodobnie nie będą one dokładnie zsynchronizowane.

Identyfikatory GUID w rejestrze

W Windows 2000 nazwy zasobów i grup wraz z identyfikatorami GUID zostają zapisane bezpośrednio w dzienniku usługi Klastra, jednakże w niektórych sytuacjach poniższa procedura może być przydatna. Procedura ta wymaga Regedt32.exe.

Uwaga: Nie należy modyfikować rejestru bezpośrednio za pomocą edytora rejestru, chyba że nie ma innej możliwości. Edytory rejestru omijają standardowe zabezpieczenia dostarczone przez narzędzia administracyjne. Zabezpieczenia uniemożliwiają wprowadzenie ustawień sprzecznych albo mogących zmniejszyć wydajność lub uszkodzić system. Bezpośrednia edycja rejestru może mieć poważne, niespodziewane skutki uniemożliwiające uruchomienie systemu i wymagające ponownej instalacji Windows 2000. Aby skonfigurować lub dostosować Windows 2000, należy skorzystać z programów w Panelu sterowania lub Microsoft Management Console (MMC), gdy to tylko możliwe.

  Aby odnaleźć GUID w kluczu rejestrowym klastra, należy:

1. W edytorze rejestru:

  Kliknąć poddrzewo HKEY_LOCAL_MACHINE.

–lub –

  Wybrać HKEY_LOCAL_MACHINE z menu.

2. Otworzyć poddrzewo HKEY_LOCAL_MACHINE.

  Jeśli klucz klastra jest obecny, przejść do etapu 5.

  Jeśli od momentu ostatniego restartu komputera usługa Klastra nie została uruchomiona, załadować klucz rejestrowy klastra.

3. Aby załadować gałąź klastra (klucz Cluster wraz z jego podkluczami):

  Kliknąć poddrzewo HKEY_LOCAL_MACHINE.

   menu rejestru wybrać Załaduj gałąź Rejestru (Load Hive).

  Odnaleźć katalog klastra (prawdopodobnie %SystemRoot%\Cluster\).

  Wybrać CLUSDB (nie: Clusdb.log).

4. W oknie dialogowym Załaduj gałąź Rejestru (Load Hive) wpisać następującą nazwę klucza:

Cluster

5. Otworzyć klucz Cluster.

Identyfikatory GUID znajdują się w podkluczach Groups, NetworkInterfaces, Networks i Resources.

6. Otworzyć odpowiednie podklucze, otworzyć żądany GUID i zanotować wartość wpisu Name.

Zapisywanie w dziennikach po uruchomieniu usługi Klastra z zastosowaniem opcji -debug

Jeśli usługi Klastra nie można uruchomić z powodu błędu związanego z logowaniem konta usługi lub innego błędu systemowego, to dziennik może pozostać pusty.

Alternatywnym rozwiązaniem jest tymczasowe uruchomienie usługi Klastra z wiersza polecenia, z zastosowaniem opcji -debug. Przed zastosowaniem tej metody należy rozważyć następujące kwestie:

  Usługa Klastra działałaby poza normalnym środowiskiem dostarczonym przez Menedżera sterowania usługą.

  Osoba stosująca te procedury musi być zalogowana pod kontem posiadającym pełne prawa administracyjne (kontem zwykle używanym do uruchomienia usługi Klastra lub lokalnym kontem administratora.

  Nie należy stosować opcji -debug podczas normalnego użytkowania usługi Klastra. Opcja ta zmniejsza skuteczność usługi.

  Aby uruchomić usługę Klastra z wiersza polecenia, należy:

1. Otworzyć nowe okno zachęty polecenia.

2. Przejść do katalogu %SystemRoot%\Cluster (katalogu klastra na systemie lokalnym).

3. Wpisać następujące polecenie:

CLUSSVC -debug

W oknie zachęty polecenia usługa Klastra będzie wyświetlać informacje przypominające zapisy dokonywane w dziennikach podczas normalnego działania usługi Klastra.

  Aby skierować produkt usługi Klastra do pliku, należy:

  Uruchomić usługę Klastra przy użyciu następującego polecenia:

CLUSSVC -debug > c:\debug.log\

Uwaga: Gdy program Clussvc.exe zostaje uruchomiony z okna polecenia, to Monitor zasobów nie zapisuje danych w tym oknie (Monitor zasobów jest odrębnym procesem).

Kody stanu

Poniższe kody stanu pochodzą z plików nagłówkowych usługi Klastra.

Kody stanu węzłów klastra

Tabela 20.3 Kody stanu węzłów klastrów

Kod stanu Stan
-1 ClusterNodeStateUnknown (stan nieznany)
0 ClusterNodeUp (węzeł dostępny)
1 ClusterNodeDown (węzeł odłączony)
2 ClusterNodePaused (węzeł wstrzymany)
3 ClusterNodeJoining (węzeł dołączający się do klastra)

Kody stanu grup klastra

Tabela 20.4 Kody stanu grup klastra

Kod stanu Stan
-1 ClusterGroupStateUnknown (stan nieznany)
0 ClusterGroupOnline (grupa dostępna)
1 ClusterGroupOffline (grupa niedostępna)
2 ClusterGroupFailed (grupa nieudana)
3 ClusterGroupPartialOnline (grupa częściowo dostępna)

Kody stanu zasobów klastra

Tabela 20.5 Kody stanu zasobów klastra

Kod stanu Stan
-1 ClusterResourceStateUnknown (stan nieznany)
0 ClusterResourceInherited (zasób odziedziczony)
1 ClusterResourceInitializing (zasób inicjowany)
2 ClusterResourceOnline (zasób dostępny)
3 ClusterResourceOffline (zasób niedostępny)
4 ClusterResourceFailed (zasób nieudany)
128 ClusterResourcePending (zasób oczekujący)
129 ClusterResourceOnlinePending (zasób dostępny oczekujący)
130 ClusterResourceOfflinePending (zasób niedostępny oczekujący)

Kody stanu interfejsów sieciowych

Tabela 20.6 Kody stanu interfejsów sieciowych

Kod stanu Stan
-1 ClusterNetInterfaceStateUnknown (stan nieznany)
0 ClusterNetInterfaceUnavailable (interfejs niedostępny)
1 ClusterNetInterfaceFailed (interfejs nieudany)
2 ClusterNetInterfaceUnreachable (interfejs nieosiągalny)
3 ClusterNetInterfaceUp (interfejs dostępny)

Kody stanu sieci

Tabela 20.7 Kody stanu sieci

Kod stanu Stan
-1 ClusterNetworkStateUnknown (stan nieznany)
0 ClusterNetworkUnavailable (sieć niedostępna
1 ClusterNetworkDown (sieć odłączona
2 ClusterNetworkPartitioned (sieć partycjonowana
3 ClusterNetworkUp (sieć dostępna

Numery kontekstu

W tabeli 20.8 przedstawione są funkcje aktualizacji odpowiadające typowi aktualizacji GUM „FailoverManager” (Zarządca kryzysowy).

Tabela 20.8 Funkcje aktualizacji typu FailoverManager (typ aktualizacji GUM 0)

Numer kontekstu Nazwa aktualizacji
0 ChangeResourceName (zmiana nazwy zasobu)
1 ChangeGroupName (zmiana nazwy grupy)
2 DeleteResource (usunięcie zasobu)
3 DeleteGroup (usunięcie grupy)
4 AddDependency (dodanie zależności)
5 RemoveDependency (usunięcie zależności)
6 ChangeClusterName (zmiana nazwy klastra)
7 ChangeQuorumResource (zmiana zasobu kworum)
8 ResourceState (stan zasobu)
9 GroupState (stan grupy)
10 PostClusterWideEvent (wysłanie zdarzenia całego klastra)
11 GroupNode (węzeł grupy)
12 PossibleNodeForResType (możliwy węzeł dla typu zasobu)
13 GroupIntendedOwner (zaplanowany właściciel grupy)
14 AssignOwnerToGroup (przypisanie właściciela grupy)
15 ApproveJoin (zatwierdzenie dołączenia)
16 CompleteGroupMove (zakończenie przesunię

cia grupy)

17 CheckAndSetGroupOwner (sprawdzenie i ustawienie właściciela grupy)
65537 FailureCount (licznik niepowodzeń)
65538 GroupOwner (właściciel grupy)
65539 CreateGroup (utworzenie grupy)
65540 CreateResource (utworzenie zasobu)
65541 Join (dołączenie)
65542 AddPossibleNode (dodanie możliwego węzła)
65543 RemovePossibleNode (usunięcie możliwego węzła)
65544 CreateResourceType (utworzenie typu zasobu)
65545 DeleteResourceType (usunięcie typu zasobu)
65546 ChangeGroup (zmiana grupy)

W tabeli 20.9 przedstawione są funkcje aktualizacji odpowiadające typowi aktualizacji GUM „GumUpdateRegistry” (aktualizacja rejestru).

Tabela 20.9 Funkcje aktualizacji typu GumUpdateRegistry (typ aktualizacji GUM 1)

Numer kontekstu Nazwa aktualizacji
0 CreateKey (utworzenie klucza)
1 SetSecurity (ustawienie zabezpieczeń)
4097 DeleteKey (usunięcie klucza)
4098 SetValue (ustawienie wartości)
4099 DeleteValue (usunięcie wartości)
4100 Join (dołączenie)

W tabeli 20.10 przedstawione są funkcje aktualizacji odpowiadające typowi aktualizacji GUM „GumUpdateMembership” (aktualizacja członkostwa).

Tabela 20.10 Funkcje aktualizacji typu GumUpdateMembership (typ aktualizacji GUM 2)

Numer kontekstu  Nazwa aktualizacji
0 CreateNode (utworzenie węzła)
1 PauseNode (wstrzymanie węzła)
2 ResumeNode (wznowienie węzła)
3 EvictNode (eksmisja węzła)
4 CreateNetwork (utworzenie sieci)
5 SetNetworkName (ustawienie nazwy sieci)
6 SetNetworkPriorityOrder (ustawienie kolejności priorytetów sieci)
7 SetNetworkCommonProperties (ustawienie wspólnych właściwości sieci)
8 CreateInterface (utworzenie interfejsu)
9 SetInterfaceInfo (ustawienie informacji o interfejsie)
10 SetInterfaceCommonProperties (ustawienie wspólnych właściwości interfejsu)
11 DeleteInterface (usunięcie interfejsu)
12 JoinBegin (rozpoczęcie dołączania)
13 JoinAbort (przerwanie dołączania)
14 JoinBegin2 (rozpoczęcie dołączania 2)
15 SetNetworkAndInterfaceStates (ustawienie stanów sieci i interfejsów)
16 PerformFixups (wykonanie operacji naprawczych)
17 PerformFixups2 (wykonanie operacji naprawczych 2)
18 AddNode (dodanie węzła)
19 ExtendedNodeState (rozszerzony stan węzła)
65537 JoinComplete (zakończenie dołączania)

Zasoby dodatkowe

  Więcej informacji o usłudze Klastra znajduje się pod odsyłaczami do Microsoft Platform SDK i Microsoft TechNet na stronie http://www.microsoft.com/windows2000/techinfo/reskit/default.asp.