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 do pracy z usługami Cloud Services (wersja klasyczna), a nie z usługami App Services.

Pobieranie pakietów Split-Merge

  1. Pobierz najnowszą wersję narzędzia NuGet z narzędzia NuGet.

  2. Otwórz wiersz polecenia i przejdź do katalogu, w którym pobrano plik nuget.exe. Pobieranie zawiera polecenia programu PowerShell.

  3. Pobierz najnowszy pakiet Split-Merge do bieżącego katalogu za pomocą poniższego polecenia:

    nuget install Microsoft.Azure.SqlDatabase.ElasticScale.Service.SplitMerge
    

Pliki są umieszczane w katalogu o nazwie Microsoft.Azure.SqlDatabase.ElasticScale.Service.SplitMerge.x.x.xxx.x , gdzie x.x.xxx.x odzwierciedla numer wersji. Znajdź pliki usługi split-merge w podkatalogu content\splitmerge\service oraz skrypty programu PowerShell Split-Merge (i wymagane biblioteki DLL klienta) w podkatalogu content\splitmerge\powershell .

Wymagania wstępne

  1. Utwórz bazę danych usługi Azure SQL Database, która będzie używana jako baza danych stanu podziału scalania. Przejdź do portalu Azure Portal. Utwórz nową bazę danych SQL Database. 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 umożliwia usługom platformy Azure łączenie się z nim. W portalu w Ustawienia zapory upewnij się, że ustawienie Zezwalaj na dostęp do usług platformy Azure ma wartość Włączone. Kliknij ikonę "zapisz".

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

  4. Utwórz usługę w chmurze platformy Azure dla usługi split-merge.

Konfigurowanie usługi Split-Merge

Konfiguracja usługi split-merge

  1. W folderze, w którym pobrano zestawy Split-Merge, utwórz kopię pliku ServiceConfiguration.Template.cscfg , który został wysłany wraz z elementem SplitMergeService.cspkg i zmień jego nazwę na ServiceConfiguration.cscfg.

  2. Otwórz plik ServiceConfiguration.cscfg w edytorze tekstów, takim jak Program Visual Studio, który weryfikuje dane wejściowe, takie jak format odcisków palca certyfikatu.

  3. Utwórz nową bazę danych lub wybierz istniejącą bazę danych, która będzie służyć jako baza danych stanu dla operacji split-merge i pobierz parametry połączenia tej bazy danych.

    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 (Transact-SQL).

    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

  4. Wprowadź tę parametry połączenia w pliku cscfg w sekcjach ról SplitMergeWeb i SplitMergeWorker w ustawieniu ElasticScaleMetadata.

  5. W przypadku roli SplitMergeWorker wprowadź prawidłowe parametry połączenia do usługi Azure Storage dla ustawienia WorkerRoleSynchronizationStorageAccount Połączenie ionString.

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 zostanie wykonany 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

Utwórz nowy katalog i z tego katalogu wykonaj następujące polecenie przy użyciu wiersza polecenia dla deweloperów dla programu Visual Studio :

makecert ^
 -n "CN=*.cloudapp.net" ^
 -r -cy end -sky exchange -eku "1.3.6.1.5.5.7.3.1,1.3.6.1.5.5.7.3.2" ^
 -a sha256 -len 2048 ^
 -sr currentuser -ss root ^
 -sv MyCert.pvk MyCert.cer

Zostanie wyświetlony monit o podanie hasła w celu ochrony klucza prywatnego. Wprowadź silne hasło i potwierdź je. Następnie zostanie wyświetlony monit o podanie hasła do użycia jeszcze raz po tym. Kliknij przycisk Tak na końcu, aby zaimportować go do głównego magazynu zaufanych urzędów certyfikacji.

Tworzenie pliku PFX

Wykonaj następujące polecenie w tym samym oknie, w którym wykonano program makecert; użyj tego samego hasła, które zostało użyte do utworzenia certyfikatu:

pvk2pfx -pvk MyCert.pvk -spc MyCert.cer -pfx MyCert.pfx -pi <password>

Importowanie certyfikatu klienta do magazynu osobistego

  1. W Eksploratorze Windows kliknij dwukrotnie plik MyCert.pfx.
  2. W Kreatorze importu certyfikatów wybierz pozycję Bieżący użytkownik, a następnie kliknij przycisk Dalej.
  3. Potwierdź ścieżkę pliku i kliknij przycisk Dalej.
  4. Wpisz hasło, pozostaw zaznaczoną opcję Uwzględnij wszystkie właściwości rozszerzone, a następnie kliknij przycisk Dalej.
  5. Pozostaw pole Wyboru Automatycznie zaznacz magazyn certyfikatów[...] i kliknij przycisk Dalej.
  6. Kliknij przycisk Zakończ i OK.

Przekazywanie pliku PFX do usługi w chmurze

  1. Przejdź do portalu Azure Portal.
  2. Wybierz pozycję Usługi w chmurze.
  3. Wybierz usługę w chmurze utworzoną powyżej dla usługi Split/Merge.
  4. Kliknij pozycję Certyfikaty w górnym menu.
  5. Kliknij pozycję Przekaż na dolnym pasku.
  6. Wybierz plik PFX i wprowadź to samo hasło, co powyżej.
  7. Po zakończeniu skopiuj odcisk palca certyfikatu z nowego wpisu na liście.

Aktualizowanie pliku konfiguracji usługi

Wklej odcisk palca certyfikatu skopiowany powyżej do atrybutu odcisku palca/wartości tych ustawień. Dla roli procesu roboczego:

 <Setting name="DataEncryptionPrimaryCertificateThumbprint" value="" />
 <Certificate name="DataEncryptionPrimary" thumbprint="" thumbprintAlgorithm="sha1" />

Dla roli sieci Web:

 <Setting name="AdditionalTrustedRootCertificationAuthorities" value="" />
 <Setting name="AllowedClientCertificateThumbprints" value="" />
 <Setting name="DataEncryptionPrimaryCertificateThumbprint" value="" />
 <Certificate name="SSL" thumbprint="" thumbprintAlgorithm="sha1" />
 <Certificate name="CA" thumbprint="" thumbprintAlgorithm="sha1" />
 <Certificate name="DataEncryptionPrimary" thumbprint="" thumbprintAlgorithm="sha1" />

Należy pamiętać, że w przypadku wdrożeń produkcyjnych należy używać oddzielnych certyfikatów dla urzędu certyfikacji, szyfrowania, certyfikatu serwera i certyfikatów klienta. Aby uzyskać szczegółowe instrukcje na ten temat, zobacz Konfiguracja zabezpieczeń.

Wdrażanie usługi

  1. Przejdź do witryny Azure Portal.
  2. Wybierz utworzoną wcześniej usługę w chmurze.
  3. Kliknij pozycję Przegląd.
  4. Wybierz środowisko przejściowe, a następnie kliknij pozycję Przekaż.
  5. W oknie dialogowym wprowadź etykietę wdrożenia. W przypadku opcji "Package" i "Configuration" kliknij pozycję "From Local" (Od lokalnego ), a następnie wybierz plik SplitMergeService.cspkg i skonfigurowany wcześniej plik cscfg.
  6. Upewnij się, że pole wyboru z etykietą Wdróż, nawet jeśli co najmniej jedna rola zawiera jedno wystąpienie , jest zaznaczone.
  7. Naciśnij przycisk znacznika w prawym dolnym rogu, aby rozpocząć wdrażanie. Poczekaj kilka minut.

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 powyższym opisem.

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

  • Upewnij się, że parametry połączenia w pliku cscfg jest dokładne.

  • 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 powinien 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

Połączenie za pomocą przeglądarki internetowej

Określ internetowy punkt końcowy usługi Split-Merge. Tę pozycję można znaleźć w portalu, przechodząc do sekcji Przegląd usługi w chmurze i patrząc w obszarze Adres URL witryny po prawej stronie. Zastąp http:// https://, ponieważ domyślne ustawienia zabezpieczeń wyłączają punkt końcowy HTTP. Załaduj stronę dla tego adresu URL do przeglądarki.

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 — konfigurowanie warstwy danych testowych dla podziału/scalania (zobacz tabelę poniżej, aby uzyskać szczegółowy opis)

  2. ExecuteSampleSplitMerge.ps1 — wykonuje operacje testowe w warstwie danych testowych (zobacz poniższą tabelę, aby uzyskać szczegółowy opis)

  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 w usłudze SQL Database i zarządzania nimi

    Plik programu PowerShell Kroki
    SetupSampleSplitMergeEnvironment.ps1 1. Tworzy bazę danych menedżera map fragmentów
    2. Tworzy 2 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.
    Plik programu PowerShell Kroki
    ExecuteSampleSplitMerge.ps1 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 podzielonego żądania 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.

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 bazy danych na tym samym serwerze, aby zachować prostotę skryptu. Nie jest to ograniczenie samej usługi split-merge.

    Do przeniesienia danych i zaktualizowania mapy fragmentów będzie potrzebny 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 wszelkich 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 poniższy błąd, najprawdopodobniej występuje 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ę powiodło, dane wyjściowe powinny wyglądać następująco:

    > .\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 będzie 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 na fragmenty i tabele odwołań, które chcesz przenieść. Jest to realizowane za pomocą interfejsu API SchemaInfo . Ten interfejs API znajduje się w przestrzeni nazw Microsoft.Azure.SqlDatabase.ElasticScale.ShardManagement.Schema .

  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 powyższe 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ć.

Rozwiązywanie problemów

Podczas uruchamiania przykładowych skryptów programu PowerShell może zostać wyświetlony poniższy 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 "Połączenie z przeglądarką internetową".

Jeśli nie możesz przesłać żądań, może być wyświetlany następujący komunikat:

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

W takim przypadku sprawdź plik konfiguracji, w szczególności ustawienie WorkerRoleSynchronizationStorageAccount Połączenie ionString. Ten błąd zazwyczaj wskazuje, że rola procesu roboczego nie mogła pomyślnie zainicjować bazy danych metadanych podczas pierwszego użycia.

Dodatkowe zasoby

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.