Serwisanci dostępni teraz · czynne całą dobę, także w weekendy i świętaWarszawa i okolice · dojazd bezpłatny
Darmowa diagnoza laptopa
Darmowa diagnoza laptopa
Dojazd do klienta bezpłatnie
Dojazd do klienta bezpłatnie
Laptopy zastępcze bezpłatnie
Laptopy zastępcze bezpłatnie
Odbiór i zwrot sprzętu bezpłatnie
Odbiór i zwrot sprzętu bezpłatnie

FILESTREAM w klastrze

Termin Definicja
FILESTREAM w klastrze

FILESTREAM w klastrze opisuje specyfikę konfiguracji tego mechanizmu w środowisku klastra pracy awaryjnej.

FILESTREAM w instancji klastra pracy awaryjnej

FILESTREAM w klastrze pracy awaryjnej SQL Server łączy relacyjną bazę danych z systemem plików, ale wymaga uwzględnienia sposobu przenoszenia zasobów między węzłami. W klasycznej konfiguracji Failover Cluster Instance, czyli instancji SQL Server uruchamianej jako zasób klastra Windows Server Failover Clustering, baza danych może zawierać filegroup typu FILESTREAM. Dane przechowywane w takim filegroupie nie są umieszczane bezpośrednio w tabeli jako duże wartości binarne. SQL Server zapisuje je w specjalnym kontenerze FILESTREAM, natomiast w tabeli przechowuje powiązanie z obiektem systemu plików oraz metadane potrzebne do zachowania spójności transakcyjnej.

Kontener FILESTREAM musi znajdować się na magazynie dostępnym dla całej instancji klastra. W zależności od architektury może to być wolumin dyskowy zarządzany przez klaster, udział plikowy SMB albo inny wspierany zasób magazynowy wskazany podczas konfiguracji SQL Server. Nie wystarczy, że katalog istnieje lokalnie na jednym serwerze. Po przełączeniu instancji na inny węzeł SQL Server musi uzyskać dostęp do tego samego kontenera, ponieważ pliki FILESTREAM są częścią trwałego stanu bazy danych. Lokalna ścieżka dostępna wyłącznie dla bieżącego węzła nie zapewnia poprawnego działania mechanizmu podczas awarii.

Powiązanie filegroupu, kontenera i udziału FILESTREAM

Konfiguracja obejmuje kilka niezależnych elementów. W bazie danych należy utworzyć filegroup FILESTREAM, a następnie dodać do niego kontener wskazujący lokalizację przechowywania danych. Przykładowa definicja bazy może zawierać klauzulę FILESTREAM_ON przy tworzeniu tabeli, jeżeli tabela ma przechowywać kolumnę typu varbinary(max) z atrybutem FILESTREAM. Sama kolumna musi być powiązana z kolumną ROWGUIDCOL typu uniqueidentifier oraz posiadać unikatowy indeks. Ten identyfikator jest używany przez SQL Server do jednoznacznego wiązania wiersza z obiektem zapisanym w kontenerze FILESTREAM.

Dostęp aplikacji do zawartości może odbywać się zwykłym mechanizmem Transact-SQL albo przez strumieniowanie Win32 za pomocą uchwytu zwracanego przez funkcję PathName() i blokady uzyskanej przez GET_FILESTREAM_TRANSACTION_CONTEXT(). Dostęp do systemu plików nie oznacza jednak swobodnego otwierania plików poza SQL Server. Operacje FILESTREAM muszą być wykonywane w kontekście transakcji SQL Server, ponieważ silnik kontroluje zgodność zmian w wierszu i zmian w danych plikowych. W konfiguracji klastrowej istotne jest także poprawne rozpoznawanie nazwy udziału FILESTREAM po przełączeniu zasobu na inny węzeł. Klienci powinni korzystać z nazwy sieciowej instancji lub skonfigurowanego punktu dostępu klastra, a nie z nazwy konkretnego serwera.

Usługa FILESTREAM jest włączana na poziomie instancji SQL Server, a następnie konfiguruje się dla niej udział plikowy oraz poziom dostępu, na przykład dostęp wyłączony, tylko Transact-SQL albo dostęp pełny. Ustawienie instancji nie zastępuje jednak konfiguracji konkretnej bazy danych. Baza musi mieć filegroup FILESTREAM i odpowiedni kontener, a tabela musi używać właściwego typu kolumny. W praktyce błąd może wynikać zarówno z wyłączonego dostępu FILESTREAM, braku udziału, niedostępnego magazynu, jak i z niepoprawnej definicji tabeli.

Przełączenie awaryjne i ograniczenia operacyjne

Podczas failover SQL Server zatrzymuje zasoby instancji na dotychczasowym węźle i uruchamia je na węźle przejmującym. Zasób zawierający dane FILESTREAM musi być dostępny przed zakończeniem uruchamiania instancji. Jeżeli magazyn nie zostanie zamontowany, udział FILESTREAM nie będzie osiągalny albo konto usługi nie otrzyma wymaganych uprawnień, baza może pozostać niedostępna mimo poprawnego działania samego systemu Windows. Weryfikacja powinna obejmować stan grupy klastra, stan zasobu dyskowego lub udziału, dostępność nazwy sieciowej, usługę SQL Server FILESTREAM oraz komunikaty w dzienniku SQL Server i dzienniku zdarzeń klastra.

Ważnym rozróżnieniem jest Failover Cluster Instance i Availability Groups. FILESTREAM może być używany w bazach objętych grupą dostępności, ale dane FILESTREAM nie są synchronizowane przez mechanizm strumieniowania grup dostępności w taki sposób jak zwykłe pliki danych. W przypadku Always On Availability Groups zawartość FILESTREAM i FileTable nie jest replikowana do replik pomocniczych. Dlatego konfiguracja wykorzystująca grupę dostępności wymaga osobnej oceny architektury magazynu i sposobu zapewnienia dostępu do plików. Nie należy zakładać, że utworzenie repliki bazy automatycznie zapewni dostęp do wszystkich obiektów FILESTREAM na serwerze pomocniczym.

Po przełączeniu należy sprawdzić nie tylko połączenie z bazą, lecz także operacje odczytu i zapisu przez przewidziany interfejs. Test powinien potwierdzić, że zapytanie zwracające PathName() wskazuje prawidłowy udział, transakcja uzyskuje kontekst FILESTREAM, a aplikacja może otworzyć strumień pod właściwą nazwą sieciową. Warto również sprawdzić zachowanie podczas przerwania transakcji, ponieważ częściowo wykonana operacja nie powinna pozostawić niespójnego powiązania między rekordem a plikiem. Kopie zapasowe bazy powinny obejmować filegroup FILESTREAM; pominięcie tego elementu oznaczałoby brak części danych potrzebnych do odtworzenia kompletnej bazy.

Diagnostyka spójności danych FILESTREAM w klastrze

Analizę problemu należy rozpocząć od ustalenia, jaki typ klastra jest używany i gdzie fizycznie znajduje się kontener FILESTREAM. Następnie trzeba porównać konfigurację wszystkich węzłów: wersję i edycję SQL Server, stan składnika FILESTREAM, konfigurację udziału, konto usługi oraz uprawnienia do magazynu. W przypadku Failover Cluster Instance należy potwierdzić, że ścieżka kontenera jest widoczna po uruchomieniu instancji na każdym węźle, a zasoby zależne mają prawidłową kolejność startu. Nie powinno się ręcznie przenosić, kopiować ani zmieniać nazw plików w kontenerze FILESTREAM, ponieważ jego struktura jest zarządzana przez SQL Server.

Po stronie bazy warto sprawdzić, czy filegroup FILESTREAM jest online, czy kontener należy do właściwej bazy oraz czy tabela zawiera wymagane ograniczenia dla kolumny FILESTREAM. Pomocne są katalogi systemowe SQL Server, między innymi widoki opisujące pliki i filegroupy bazy, a także polecenia administracyjne pokazujące stan bazy i jej plików. Weryfikacja powinna rozdzielać problemy relacyjne od problemów ścieżki Win32: zapytanie przez Transact-SQL może działać, gdy aplikacja nie ma dostępu do udziału FILESTREAM, albo odwrotnie. Dopiero zgodność obu ścieżek potwierdza poprawną konfigurację.

Naprawa zależy od przyczyny. Przy niedostępnym magazynie trzeba przywrócić dostępność zasobu klastra i sprawdzić zależności, a przy błędzie uprawnień skontrolować konto usługi SQL Server oraz uprawnienia udziału i systemu plików. Jeżeli problem dotyczy nazwy używanej przez aplikację, należy poprawić konfigurację klienta tak, aby odwoływał się do właściwego punktu dostępu instancji. W środowisku produkcyjnym każdą zmianę powinno się przetestować podczas kontrolowanego przełączenia, a następnie potwierdzić odczyt, zapis, rollback transakcji i wykonanie kopii zapasowej zawierającej dane FILESTREAM.

+48 22 100 48 29Zadzwoń teraz · serwisant w 1 godzinę