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 scalania jest przeznaczone dla usługi Azure Web Apps. Koniec życia usług w chmurze (klasyczny) to 31 sierpnia 2024 r. Jeśli używasz narzędzia do dzielenia scalania w usługach Cloud Services (wersja klasyczna), przeprowadź migrację do usługi Azure Web Apps przed 31 sierpnia 2024 r.

Wymagania wstępne

  1. Utwórz bazę danych SQL, która ma być używana jako baza danych stanu podziału 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 witrynie Azure Portal w obszarze Ustawienia zapory dla serwera logicznego upewnij się, że ustawienie Zezwalaj na dostęp do usług platformy Azure ma wartość Włączone. Wybierz ikonę Zapisz.

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

  4. Użyj publicznych obrazów platformy Docker z podziałem scalania lub wypychaj obrazy platformy Docker z podziałem do usługi Azure Container Service lub wybranego rejestru platformy Docker.

Tworzenie dwóch usługi Azure Web Apps dla usługi

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

Aplikacja internetowa procesu roboczego

  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 karty Platformy 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ą.

Aplikacja internetowa interfejsu użytkownika

Aby utworzyć aplikację internetową interfejsu użytkownika, wykonaj te same kroki, które użyto do utworzenia aplikacji internetowej Proces roboczy z jedną różnicą:

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

Konfigurowanie aplikacji internetowych z podziałem scalania

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 wbudowane i uruchom następujące polecenia programu PowerShell z nowego katalogu:

  $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 "{myPassword}" -Force -AsPlainText  ## Replace {myPassword}
  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 usługi worker Web Apps i UI .

  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 pozycję 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 Requirewartość .

Konfiguracja aplikacji internetowej

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

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

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

    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 sortowania systemu 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ść
    WorkerRoleSynchronizationStorageAccountConnectionString Prawidłowe parametry połączenia do wcześniej utworzonego magazynu platformy Azure.
    DataEncryptionPrimaryCertificateThumbprint Wcześniej wygenerowany odcisk palca certyfikatu.
    MetadataExpirationPeriodInMinutes 20160
    MaxRetryCount 5
    WEBSITE_LOAD_CERTIFICATES *
    WEBSITE_PULL_IMAGE_OVER_VNET 0
  4. Wybierz pozycję Zastosuj i uruchom ponownie aplikację.

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

Rozwiązywanie problemów z wdrożeniem

Jeśli rola sieci Web nie powiedzie się w trybie online, prawdopodobnie wystąpi problem z konfiguracją zabezpieczeń. Sprawdź, czy protokół TLS/SSL został skonfigurowany zgodnie z wcześniejszym opisem.

Jeśli rola procesu roboczego nie powiedzie się w trybie online, ale rola sieci Web powiedzie się, najprawdopodobniej jest to problem podczas nawiązywania połączenia z utworzoną wcześniej bazą danych stanu.

  • Upewnij się, że parametry 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ąd UI 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 scalania.

    1. Tworzy bazę danych menedżera map fragmentów.
    2. Tworzy dwie bazy danych fragmentów.
    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. Sonduje fronton internetowy pod kątem stanu żądania podzielonego i czeka na zakończenie żądania.
    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 serwer), na którym zostanie utworzony menedżer map fragmentów i 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 przenosiła dane i aktualizowała mapę fragmentów, wymagany jest identyfikator logowania uwierzytelniania 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 wyczyszczenie wszystkich istniejących struktur danych zarządzania mapami fragmentów w bazie danych menedżera map fragmentów i fragmentów. Może być przydatne ponowne uruchomienie skryptu, jeśli chcesz ponownie zainicjować mapę fragmentów lub fragmenty.

    Przykładowy wiersz polecenia:

    .\SetupSampleSplitMergeEnvironment.ps1 ^
    -UserName 'mysqluser' -Password 'MySqlPassw0rd' -ShardMapManagerServerName 'abcdefghij.database.windows.net'
    
  4. Wykonaj skrypt Getmappings.ps1, aby wyświetlić mapowania, które obecnie istnieją w przykładowym środowisku.

    .\GetMappings.ps1 ^
    -UserName 'mysqluser' -Password 'MySqlPassw0rd' -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:

    .\ExecuteSampleSplitMerge.ps1 ^
    -UserName 'mysqluser' -Password 'MySqlPassw0rd' ^
    -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:

    .\ExecuteSampleSplitMerge.ps1 -UserName 'mysqluser' -Password 'MySqlPassw0rd' -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.

Żądania utworzenia

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 podzielonych na fragmenty zawiera kolumnę klucza fragmentowania i zawiera 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 dołączania do tabel podzielonych na fragmenty w zapytaniach.

Aby wykonać operację dzielenia scalania, należy zadeklarować tabele podzielone i 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 tabeli (opcjonalnie, wartości domyślne do "dbo") i nazwę tabeli.
  3. Dodaj poprzednie obiekty TableInfo do nowego obiektu SchemaInfo .
  4. Uzyskaj odwołanie do obiektu ShardMapManager i wywołaj metodę GetSchemaInfoCollection.
  5. Dodaj informacje o schemacie do elementu 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 dla WorkerRoleSynchronizationStorageAccountConnectionStringelementu . Ten błąd zazwyczaj wskazuje, że rola procesu roboczego nie mogła pomyślnie 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.