Udostępnij za pośrednictwem


Wdrażanie usługi scalania podzielonego w celu przenoszenia danych między bazami danych podzielonych na fragmenty

Dotyczy:Azure SQL Database

Narzędzie split-merge umożliwia przenoszenie danych między podzielonymi bazami danych. Zobacz Przenoszenie danych między skalowalnymi bazami danych w chmurze.

Uwaga

Narzędzie do dzielenia i scalania jest przeznaczone dla aplikacji internetowych Azure. Koniec życia usług w chmurze (klasyczny) to 31 sierpnia 2024 r. Jeśli używasz narzędzia do dzielenia i scalania w klasycznych usługach w chmurze, przeprowadź migrację do usługi Azure Web Apps przed 31 sierpnia 2024 roku.

Wymagania wstępne

  1. Utwórz bazę danych SQL, która będzie używana jako baza danych do śledzenia stanu operacji podziału i scalania. Przejdź do portalu Azure Portal. Utwórz nową bazę danych SQL. Nadaj bazie danych nazwę i utwórz nowego administratora i hasło. Pamiętaj, aby zarejestrować nazwę i hasło do późniejszego użycia.

  2. Upewnij się, że serwer logiczny na platformie Azure umożliwia usługom platformy Azure łączenie się z nim. W portalu Azure, w Ustawieniach zapory dla serwera logicznego, upewnij się, że Zezwalaj na dostęp do usług platformy Azure jest ustawione na włączony. Wybierz ikonę Zapisz.

  3. Utwórz konto usługi Azure Storage na potrzeby danych wyjściowych diagnostyki.

  4. Użyj publicznych obrazów Docker split-merge lub wypychaj obrazy Docker split-merge do usługi Azure Container Service lub wybranego rejestru Docker.

Utwórz dwie aplikacje webowe Azure dla swojej usługi.

Utwórz dwie aplikacje internetowe — aplikację internetową worker i UI .

Aplikacja internetowa dla pracowników

  1. Utwórz aplikację internetową w witrynie Azure Portal.

  2. W polu Publikuj wybierz pozycję Kontener.

  3. W polu System operacyjny wybierz pozycję Windows.

  4. Przejdź do zakładki Docker.

  5. Wypełnij następujące informacje:
    Źródło obrazu: Docker hub
    Typ dostępu: Public
    Obraz i tag: mcr.microsoft.com/splitmerge/splitmergeworker:20240812.1

  6. Użyj opcji Przeglądanie i tworzenie , aby utworzyć aplikację internetową.

Webowa aplikacja UI

Aby utworzyć aplikację webową interfejsu użytkownika, wykonaj te same kroki, które użyto do utworzenia aplikacji webowej Worker, z jedną różnicą:

  • Inny obraz Docker w polu Obraz i tag : mcr.microsoft.com/splitmerge/splitmergeweb:20240812.1

Skonfiguruj swoje aplikacje internetowe typu "Split-Merge"

Konfigurowanie zabezpieczeń

Aby uzyskać szczegółowe instrukcje dotyczące konfigurowania zabezpieczeń usługi, zapoznaj się z konfiguracją zabezpieczeń Split-Merge.

Na potrzeby prostego wdrożenia testowego na potrzeby tego samouczka wykonywany jest minimalny zestaw kroków konfiguracji w celu uruchomienia usługi. Te kroki umożliwiają komunikowanie się z usługą tylko jednej maszyny/konta wykonującego je.

Tworzenie certyfikatu z podpisem własnym i pliku PFX

Użyj programu PowerShell, aby utworzyć certyfikat z podpisem własnym i plik PFX.

Najpierw utwórz nowy katalog. Następnie zastąp odpowiednio wartości w linii i uruchom następujące polecenia programu PowerShell z nowego katalogu. Zastąp <password> prawidłowym hasłem.

  $cert = New-SelfSignedCertificate -Subject "CN=*.cloudapp.net" -CertStoreLocation "Cert:\CurrentUser\My" -KeyExportPolicy Exportable -KeySpec Signature -KeyLength 2048 -KeyAlgorithm RSA -HashAlgorithm SHA256
  $mypwd = ConvertTo-SecureString -String "<password>" -Force -AsPlainText  ## Replace <password>
  Export-PfxCertificate -Cert $cert -FilePath "C:\Users\admin\Desktop\$certname.pfx" -Password $mypwd   ## Specify your preferred location

Przekazywanie pliku PFX do aplikacji internetowych i włączanie użycia certyfikatu

Powtórz następujące kroki dla obu worker i UI aplikacji internetowych.

  1. Przejdź do portalu Azure Portal.
  2. Wybierz pozycję App Services.
  3. Wybierz aplikację internetową utworzoną powyżej dla narzędzia split-merge.
  4. Wybierz pozycję Certyfikaty z menu.
  5. Wybierz Przynieś własne certyfikaty (.pfx).
  6. Wybierz pozycję Dodaj certyfikat na pasku.
  7. Wybierz plik PFX i wprowadź to samo hasło, co powyżej.
  8. Po zakończeniu skopiuj odcisk palca certyfikatu z nowego wpisu na liście.
  9. W menu Aplikacja internetowa otwórz pozycję Konfiguracja ustawień / .
  10. Ustaw tryb certyfikatu klienta na Require.

Konfiguracja aplikacji internetowej

Powtórz następujące kroki dla obu aplikacji internetowych worker i UI.

  1. Otwórz wdrożona aplikację internetową i przejdź do pozycji Ustawienia>>Ustawienia Ustawienia aplikacji. Wybierz Dodaj.

  2. Dodaj zmienną o nazwie ElasticScaleMetadata i wartość z łańcuchem połączenia dla wcześniej wdrożonej bazy danych statusu.

    Ważne

    W tej chwili baza danych stanu musi używać sortowania łacińskiego (SQL\_Latin1\_General\_CP1\_CI\_AS). Aby uzyskać więcej informacji, zobacz Nazwa porządkowania Windows.

    W przypadku usługi Azure SQL Database parametry połączenia zazwyczaj ma postać:

    Server=<serverName>.database.windows.net; Database=<databaseName>;User ID=<userId>; Password=<password>; Encrypt=True; Connection Timeout=30

  3. Dodaj dodatkowe zmienne:

    Nazwa/nazwisko Wartość
    WorkerRoleSynchronizationStorageAccountCiągPołączenia Prawidłowe parametry połączenia do wcześniej utworzonego magazynu platformy Azure.
    Odcisk palca głównego certyfikatu szyfrowania danych Wcześniej wygenerowany skrót certyfikatu.
    OkresWygaśnięciaMetadanychWMMinutach 20160
    MaksymalnaLiczbaPrób 5
    Wczytaj certyfikaty strony internetowej *
    Pobieranie obrazu witryny przez sieć VNET 0
  4. Wybierz pozycję Zastosuj i uruchom ponownie aplikację.

  5. Powtórz te same kroki zarówno dla aplikacji internetowych worker, jak i UI.

Rozwiązywanie problemów z wdrożeniem

Jeśli rola sieci Web nie może przejść do trybu online, prawdopodobnie wystąpi problem z konfiguracją zabezpieczeń. Sprawdź, czy protokół TLS/SSL został skonfigurowany zgodnie z wcześniejszym opisem.

Jeśli rola robocza nie zostanie uruchomiona, ale rola internetowa działa prawidłowo, najprawdopodobniej jest to problem z nawiązaniem połączenia z utworzoną wcześniej bazą danych statusu.

  • Upewnij się, że ciąg połączenia jest dokładny.

  • Sprawdź, czy serwer i baza danych istnieją oraz czy identyfikator użytkownika i hasło są poprawne.

  • W przypadku usługi Azure SQL Database parametry połączenia powinny mieć postać:

    Server=<serverName>.database.windows.net; Database=<databaseName>;User ID=<user>; Password=<password>; Encrypt=True; Connection Timeout=30

  • Upewnij się, że nazwa serwera nie zaczyna się od https://.

  • Upewnij się, że serwer umożliwia usługom platformy Azure łączenie się z nim. W tym celu otwórz bazę danych w portalu i upewnij się, że ustawienie Zezwalaj na dostęp do usług platformy Azure ma wartość Włączone.

Testowanie wdrożenia usługi

Nawiązywanie połączenia za pomocą przeglądarki internetowej

Przejdź do obszaru PrzeglądUI aplikacji internetowej i wybierz pozycję Przeglądaj. Wybierz prawidłowy certyfikat, jeśli zostanie wyświetlony monit.

Testowanie za pomocą skryptów programu PowerShell

Wdrożenie i środowisko można przetestować, uruchamiając dołączone przykładowe skrypty programu PowerShell.

Ważne

Przykładowe skrypty są uruchamiane w programie PowerShell 5.1. Obecnie nie są one uruchamiane w programie PowerShell 6 lub nowszym.

Dołączone pliki skryptu to:

  1. SetupSampleSplitMergeEnvironment.ps1 — konfiguruje testową warstwę danych na potrzeby dzielenia i scalania.

    1. Tworzy bazę danych menedżera map fragmentów.
    2. Tworzy dwie bazy danych z segmentami.
    3. Tworzy mapę fragmentów dla tych baz danych (usuwa wszystkie istniejące mapy fragmentów w tych bazach danych).
    4. Tworzy małą przykładową tabelę w obu fragmentach i wypełnia tabelę w jednym z fragmentów.
    5. Deklaruje wartość SchemaInfo dla tabeli podzielonej na fragmenty.
  2. ExecuteSampleSplitMerge.ps1 — wykonuje operacje testowe w warstwie danych testowych.

    1. Wysyła żądanie podziału do frontonu internetowego usługi Split-Merge Service, który dzieli połowę danych z pierwszego fragmentu na drugi fragment.
    2. Regularnie sprawdza interfejs internetowy pod kątem statusu żądania podziału i czeka, aż żądanie zostanie zakończone.
    3. Wysyła żądanie scalania do frontonu internetowego usługi Split-Merge Service, który przenosi dane z drugiego fragmentu z powrotem do pierwszego fragmentu.
    4. Sonduje fronton internetowy pod kątem stanu żądania scalania i czeka na zakończenie żądania.
  3. GetMappings.ps1 — przykładowy skrypt najwyższego poziomu, który wyświetla bieżący stan mapowań fragmentów.

  4. ShardManagement.psm1 — skrypt pomocnika, który opakowuje interfejs API ShardManagement.

  5. SqlDatabaseHelpers.psm1 — skrypt pomocnika do tworzenia baz danych i zarządzania nimi w usłudze SQL Database.

Weryfikowanie wdrożenia przy użyciu programu PowerShell

  1. Otwórz nowe okno programu PowerShell i przejdź do katalogu, w którym pobrano pakiet Split-Merge, a następnie przejdź do katalogu "PowerShell".

  2. Utwórz serwer (lub wybierz istniejący), na którym powstanie menedżer map fragmentów oraz same fragmenty.

    Uwaga

    Skrypt SetupSampleSplitMergeEnvironment.ps1 domyślnie tworzy wszystkie te bazy danych na tym samym serwerze, aby zachować prostotę skryptu. Nie jest to ograniczenie samej usługi split-merge.

    Aby usługa Split-Merge mogła przenosić dane i aktualizować mapę fragmentów, wymagany jest login uwierzytelniający SQL z dostępem do odczytu/zapisu do baz danych. Ponieważ usługa split-merge działa w chmurze, obecnie nie obsługuje zintegrowanego uwierzytelniania.

    Upewnij się, że serwer jest skonfigurowany do zezwalania na dostęp z adresu IP maszyny, na którym są uruchomione te skrypty. To ustawienie można znaleźć w obszarze Serwer SQL / Zapory i sieci wirtualne / Adresy IP klienta.

  3. Wykonaj skrypt, SetupSampleSplitMergeEnvironment.ps1 aby utworzyć przykładowe środowisko.

    Uruchomienie tego skryptu spowoduje usunięcie wszystkich istniejących struktur danych do zarządzania mapami podziału w bazie danych menedżera map podziału oraz na fragmentach. Może być przydatne ponowne uruchomienie skryptu, jeśli chcesz ponownie zainicjować mapę fragmentów lub same fragmenty.

    Przykładowy wiersz polecenia. Zastąp <password> prawidłowym hasłem.

    .\SetupSampleSplitMergeEnvironment.ps1 ^
    -UserName 'mysqluser' -Password '<password>' -ShardMapManagerServerName 'abcdefghij.database.windows.net'
    
  4. Wykonaj skrypt Getmappings.ps1, aby wyświetlić mapowania, które obecnie istnieją w przykładowym środowisku. Zastąp <password> prawidłowym hasłem.

    .\GetMappings.ps1 ^
    -UserName 'mysqluser' -Password '<password>' -ShardMapManagerServerName 'abcdefghij.database.windows.net'
    
  5. Wykonaj skrypt, ExecuteSampleSplitMerge.ps1 aby wykonać operację podziału (przeniesienie połowy danych na pierwszy fragment do drugiego fragmentu), a następnie operację scalania (przeniesienie danych z powrotem na pierwszy fragment). Jeśli skonfigurowano protokół TLS i pozostawiono wyłączony punkt końcowy http, upewnij się, że zamiast tego używasz punktu końcowego https://.

    Przykładowy wiersz polecenia. Zastąp <password> prawidłowym hasłem.

    .\ExecuteSampleSplitMerge.ps1 ^
    -UserName 'mysqluser' -Password '<password>' ^
    -ShardMapManagerServerName 'abcdefghij.database.windows.net' ^
    -SplitMergeServiceEndpoint 'https://mysplitmergeservice.cloudapp.net' ^
    -CertificateThumbprint '0123456789abcdef0123456789abcdef01234567'
    

    Jeśli wystąpi następujący błąd, najprawdopodobniej wystąpi problem z certyfikatem internetowego punktu końcowego. Spróbuj nawiązać połączenie z punktem końcowym sieci Web przy użyciu ulubionej przeglądarki sieci Web i sprawdź, czy wystąpił błąd certyfikatu.

    Invoke-WebRequest : The underlying connection was closed: Could not establish trust relationship for the SSL/TLSsecure channel.

    Jeśli to się powiedzie, dane wyjściowe powinny wyglądać podobnie do następujących danych wyjściowych. Zastąp <password> prawidłowym hasłem.

    .\ExecuteSampleSplitMerge.ps1 -UserName 'mysqluser' -Password '<password>' -ShardMapManagerServerName 'abcdefghij.database.windows.net' -SplitMergeServiceEndpoint 'http://mysplitmergeservice.cloudapp.net' -CertificateThumbprint 0123456789abcdef0123456789abcdef01234567
    Sending split request
    Began split operation with id dc68dfa0-e22b-4823-886a-9bdc903c80f3
    Polling split-merge request status. Press Ctrl-C to end
    Progress: 0% | Status: Queued | Details: [Informational] Queued request
    Progress: 5% | Status: Starting | Details: [Informational] Starting split-merge state machine for request.
    Progress: 5% | Status: Starting | Details: [Informational] Performing data consistency checks on target     shards.
    Progress: 20% | Status: CopyingReferenceTables | Details: [Informational] Moving reference tables from     source to target shard.
    Progress: 20% | Status: CopyingReferenceTables | Details: [Informational] Waiting for reference tables copy     completion.
    Progress: 20% | Status: CopyingReferenceTables | Details: [Informational] Moving reference tables from     source to target shard.
    Progress: 44% | Status: CopyingShardedTables | Details: [Informational] Moving key range [100:110) of     Sharded tables
    Progress: 44% | Status: CopyingShardedTables | Details: [Informational] Successfully copied key range     [100:110) for table [dbo].[MyShardedTable]
    ...
    ...
    Progress: 90% | Status: Completing | Details: [Informational] Successfully deleted shardlets in table     [dbo].[MyShardedTable].
    Progress: 90% | Status: Completing | Details: [Informational] Deleting any temp tables that were created     while processing the request.
    Progress: 100% | Status: Succeeded | Details: [Informational] Successfully processed request.
    Sending merge request
    Began merge operation with id 6ffc308f-d006-466b-b24e-857242ec5f66
    Polling request status. Press Ctrl-C to end
    Progress: 0% | Status: Queued | Details: [Informational] Queued request
    Progress: 5% | Status: Starting | Details: [Informational] Starting split-merge state machine for request.
    Progress: 5% | Status: Starting | Details: [Informational] Performing data consistency checks on target     shards.
    Progress: 20% | Status: CopyingReferenceTables | Details: [Informational] Moving reference tables from     source to target shard.
    Progress: 44% | Status: CopyingShardedTables | Details: [Informational] Moving key range [100:110) of     Sharded tables
    Progress: 44% | Status: CopyingShardedTables | Details: [Informational] Successfully copied key range     [100:110) for table [dbo].[MyShardedTable]
    ...
    ...
    Progress: 90% | Status: Completing | Details: [Informational] Successfully deleted shardlets in table     [dbo].[MyShardedTable].
    Progress: 90% | Status: Completing | Details: [Informational] Deleting any temp tables that were created     while processing the request.
    Progress: 100% | Status: Succeeded | Details: [Informational] Successfully processed request.
    
  6. Eksperymentuj z innymi typami danych. Wszystkie te skrypty przyjmują opcjonalny parametr -ShardKeyType, który umożliwia określenie typu klucza. Wartość domyślna to Int32, ale można również określić Int64, Guid lub Binary.

Twórz żądania

Usługa może być używana za pomocą internetowego interfejsu użytkownika lub przez zaimportowanie i użycie modułu SplitMerge.psm1 programu PowerShell, który przesyła żądania za pośrednictwem roli internetowej.

Usługa może przenosić dane zarówno w tabelach podzielonych na fragmenty, jak i w tabelach referencyjnych. Tabela podzielona na fragmenty ma kolumnę klucza fragmentowania oraz różne dane wierszy w poszczególnych fragmentach. Tabela referencyjna nie jest fragmentowana, więc zawiera te same dane wierszy w każdym fragmentze. Tabele referencyjne są przydatne w przypadku danych, które nie zmieniają się często i są używane do łączenia z tabelami podzielonymi na fragmenty w zapytaniach.

Aby wykonać operację podziału i scalania, należy zadeklarować tabele szardowane oraz tabele referencyjne, które chcesz przenieść. Jest to realizowane za pomocą interfejsu API SchemaInfo . Ten interfejs API znajduje się w Microsoft.Azure.SqlDatabase.ElasticScale.ShardManagement.Schema przestrzeni nazw.

  1. Dla każdej tabeli podzielonej na fragmenty utwórz obiekt ShardedTableInfo opisujący nadrzędną nazwę schematu tabeli (opcjonalnie wartość domyślną "dbo"), nazwę tabeli i nazwę kolumny w tej tabeli, która zawiera klucz fragmentowania.
  2. Dla każdej tabeli referencyjnej utwórz obiekt ReferenceTableInfo, opisujący nadrzędną nazwę schematu (opcjonalnie, domyślnie "dbo") i nazwę samej tabeli.
  3. Dodaj poprzednie obiekty TableInfo do nowego obiektu SchemaInfo .
  4. Uzyskaj odwołanie do obiektu ShardMapManager i wywołaj metodę GetSchemaInfoCollection.
  5. Dodaj SchemaInfo do SchemaInfoCollection, podając nazwę mapy fragmentu.

Przykład tego można zobaczyć w skrypcie SetupSampleSplitMergeEnvironment.ps1.

Usługa Split-Merge nie tworzy docelowej bazy danych (ani schematu dla żadnych tabel w bazie danych). Przed wysłaniem żądania do usługi należy je wstępnie utworzyć.

Znane błędy

Podczas uruchamiania przykładowych skryptów programu PowerShell może zostać wyświetlony następujący komunikat:

Invoke-WebRequest : The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel.

Ten błąd oznacza, że certyfikat TLS/SSL nie jest poprawnie skonfigurowany. Postępuj zgodnie z instrukcjami w sekcji Nawiązywanie połączenia z przeglądarką internetową.

Jeśli nie możesz przesłać żądań, możesz zobaczyć następujące elementy:

[Exception] System.Data.SqlClient.SqlException (0x80131904): Could not find stored procedure 'dbo.InsertRequest'.

W takim przypadku sprawdź plik konfiguracji, w szczególności ustawienie elementu WorkerRoleSynchronizationStorageAccountConnectionString. Ten błąd zazwyczaj wskazuje, że rola robocza nie zdołała skutecznie zainicjować bazy danych metadanych podczas pierwszego użycia.

Jeszcze nie korzystasz z narzędzi elastycznych baz danych? Zapoznaj się z naszym przewodnikiem Wprowadzenie. W przypadku pytań skontaktuj się z nami na stronie pytań i odpowiedzi dotyczących usługi SQL Database oraz w przypadku żądań funkcji, dodaj nowe pomysły lub zagłosuj na istniejące pomysły na forum opinii usługi SQL Database.