Dela via


Distribuera en split-merge-tjänst för att flytta data mellan fragmenterade databaser

gäller för:Azure SQL Database

Med verktyget för delad sammanfogning kan du flytta data mellan fragmenterade databaser. Se avsnitt för dataöverföring mellan fördelade molndatabaser.

Not

Verktyget för delningssammanslagning är avsett för Azure Web Apps. Slutet på livet för Cloud Services (klassisk) är 31 augusti 2024. Om du använde verktyget för delad sammanslagning i Cloud Services (klassisk) migrerar du till Azure Web Apps före den 31 augusti 2024.

Förutsättningar

  1. Skapa en SQL-databas som ska användas som statusdatabas för delad sammanslagning. Gå till Azure-portalen. Skapa en ny SQL-databas. Namnge databasen och skapa en ny administratör och ett nytt lösenord. Se till att registrera namn och lösenord för senare användning.

  2. Se till att din logiska servern i Azure tillåter att Azure Services ansluter till den. I Azure-portalen i Brandväggsinställningar för den logiska servern kontrollerar du att inställningen Tillåt åtkomst till Azure Services är inställd på . Välj ikonen Spara.

  3. Skapa ett Azure Storage-konto för diagnostikutdata.

  4. Använd de offentliga split-merge-dockeravbildningarna, eller ladda upp split-merge-dockeravbildningar till antingen Azure Container Service eller ditt dockerregister.

Skapa två Azure Web Apps för din tjänst

Skapa två Webbappar – en worker och UI webbapp.

Arbetswebbapp

  1. Skapa en -webbapp i Azure-portalen.

  2. I fältet Publicera väljer du Container.

  3. För operativsystemväljer du Windows.

  4. Fortsätt till fliken Docker.

  5. Fyll i följande information:
    Bildkälla: Docker hub
    Åtkomsttyp: Public
    Bild och tag: mcr.microsoft.com/splitmerge/splitmergeworker:20240812.1

  6. Använd Granska + skapa för att skapa webbapplikationen.

Webbapp för användargränssnitt

Om du vill skapa webbappen för användargränssnittet följer du samma steg som du använde för att skapa arbetswebbappen med en skillnad:

  • En annan docker-avbildning i Image och tag-fältet: mcr.microsoft.com/splitmerge/splitmergeweb:20240812.1

Konfigurera dina Split-Merge webbappar

Konfigurera säkerhet

Detaljerade anvisningar för att konfigurera tjänstens säkerhet finns i Split-Merge säkerhetskonfiguration.

För en enkel testdistribution för den här självstudien utförs en minimal uppsättning konfigurationssteg för att få igång tjänsten. Med de här stegen kan endast en dator/ett konto köra dem för att kommunicera med tjänsten.

Skapa ett självsignerat certifikat och en PFX-fil

Använd PowerShell för att skapa ett självsignerat certifikat och EN PFX-fil.

Skapa först en ny katalog. Ersätt sedan de infogade värdena och kör följande PowerShell-kommandon från den nya katalogen. Ersätt <password> med ett giltigt lösenord.

  $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

Ladda upp PFX-filen till webbapparna och aktivera certifikatanvändning

Upprepa följande steg för både worker och UI Web Apps.

  1. Gå till Azure-portalen.
  2. Välj App Services.
  3. Välj den webbapp som du skapade ovan för split-merge-verktyget.
  4. Välj Certifikat på menyn.
  5. Välj Ta med egna certifikat (.pfx).
  6. Välj Lägg till certifikat i fältet.
  7. Välj PFX-filen och ange samma lösenord som ovan.
  8. När du är klar kopierar du certifikatets tumavtryck från den nya posten i listan.
  9. Öppna Inställningar / Konfigurationpå menyn Webbapp.
  10. Ange klientcertifikatläge till Require.

Konfiguration av webbapp

Upprepa följande steg för både worker och UI webbappar.

  1. Öppna den distribuerade webbappen och gå till Inställningar>Miljövariabler>Appinställningar. Välj Lägg till.

  2. Lägg till en variabel med namnet ElasticScaleMetadata och värdet med anslutningssträngen för den tidigare distribuerade statusdatabasen.

    Viktig

    För närvarande måste statusdatabasen använda den latinska sorteringen (SQL\_Latin1\_General\_CP1\_CI\_AS). Mer information finns i Windows-sorteringsnamn.

    Med Azure SQL Database är anslutningssträngen vanligtvis i formatet:

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

  3. Lägg till ytterligare variabler:

    Namn Värde
    WorkerRoleSynchronizationStorageAccountConnectionString Giltig anslutningssträng till den tidigare skapade Azure-lagringen.
    DataEncryptionPrimärCertifikatThumbprint Tidigare genererat fingeravtryck för certifikat.
    Utgångsperiod för metadata i minuter 20160
    Maximalt antal försök 5
    Webbplats_ladda_certifikat *
    Webbplats_Hämta_Bild_Över_VNET 0
  4. Välj Tillämpa och starta om programmet.

  5. Upprepa samma steg för både worker och UI webbapp.

Felsöka driftsättningen

Om webbrollen inte är online är det troligtvis ett problem med säkerhetskonfigurationen. Kontrollera att TLS/SSL har konfigurerats enligt beskrivningen tidigare.

Om din arbetsroll inte är online, men webbrollen lyckas, är det troligtvis ett problem med att ansluta till statusdatabasen som du skapade tidigare.

  • Kontrollera att anslutningssträngen är korrekt.

  • Kontrollera att servern och databasen finns och att användar-ID och lösenord är korrekta.

  • För Azure SQL Database ska anslutningssträngen vara i formatet:

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

  • Kontrollera att servernamnet inte börjar med https://.

  • Se till att din server tillåter att Azure Services ansluter till den. Det gör du genom att öppna databasen i portalen och se till att inställningen Tillåt åtkomst till Azure Services är inställd på .

Testa tjänstdistributionen

Ansluta med en webbläsare

Gå till Översikt för din UI-webbapp och välj Bläddra. Välj rätt certifikat om du uppmanas att göra det.

Testa med PowerShell-skript

Distributionen och din miljö kan testas genom att köra de inkluderade PowerShell-exempelskripten.

Viktig

Exempelskripten körs på PowerShell 5.1. De körs för närvarande inte på PowerShell 6 eller senare.

Skriptfilerna som ingår är:

  1. SetupSampleSplitMergeEnvironment.ps1 – konfigurerar en testdatanivå för delningssammanslagning.

    1. Skapar en shard map manager-databas.
    2. Skapar två sharddatabaser.
    3. Skapar en fragmentkarta för dessa databaser (tar bort eventuella befintliga shardkartor på dessa databaser).
    4. Skapar en liten exempeltabell i båda shardsna och fyller i tabellen i en av shardsna.
    5. Deklarerar SchemaInfo för den fragmenterade tabellen.
  2. ExecuteSampleSplitMerge.ps1 – kör teståtgärder på testdatanivån.

    1. Skickar en delningsbegäran till webbgränssnittet för Split-Merge Service, som delar upp hälften av data från det första fragmentet till det andra fragmentet.
    2. Söker i webbklientdelen efter status för delad begäran och väntar tills begäran har slutförts.
    3. Skickar en sammanslagningsbegäran till webbtjänstens Split-Merge-frontdel, som flyttar data från det andra fragmentet tillbaka till det första fragmentet.
    4. Söker i webbklientdelen efter status för sammanslagningsbegäran och väntar tills begäran har slutförts.
  3. GetMappings.ps1 – exempelskript på den översta nivån som skriver ut det aktuella tillståndet för shardmappningarna.

  4. ShardManagement.psm1 – hjälpskript som omsluter ShardManagement-API:et.

  5. SqlDatabaseHelpers.psm1 – hjälpskript för att skapa och hantera databaser i SQL Database.

Använda PowerShell för att verifiera distributionen

  1. Öppna ett nytt PowerShell-fönster och navigera till katalogen där du laddade ned Split-Merge-paketet och navigera sedan till katalogen "PowerShell".

  2. Skapa en server (eller välj en befintlig server) där shard map manager och shards skapas.

    Obs

    Skriptet SetupSampleSplitMergeEnvironment.ps1 skapar alla dessa databaser på samma server som standard för att hålla skriptet enkelt. Det här är inte en begränsning av själva Split-Merge-tjänsten.

    En SQL-autentiseringsinloggning med läs-/skrivåtkomst till databaserna krävs för att Split-Merge-tjänsten ska kunna flytta data och uppdatera fragmentkartan. Eftersom Split-Merge-tjänsten körs i molnet har den för närvarande inte stöd för integrerad autentisering.

    Kontrollera att servern är konfigurerad för att tillåta åtkomst från IP-adressen för den dator som kör dessa skript. Du hittar den här inställningen under SQL Server/Brandväggar och virtuella nätverk/Klientens IP-adresser.

  3. Kör skriptet SetupSampleSplitMergeEnvironment.ps1 för att skapa exempelmiljön.

    Om du kör det här skriptet rensas alla befintliga shard map management-datastrukturer i shard map manager-databasen och shards. Det kan vara användbart att köra skriptet igen om du vill återinitiera fragmentkartan eller skärvorna.

    Exempel på kommandorad. Ersätt <password> med ett giltigt lösenord.

    .\SetupSampleSplitMergeEnvironment.ps1 ^
    -UserName 'mysqluser' -Password '<password>' -ShardMapManagerServerName 'abcdefghij.database.windows.net'
    
  4. Kör Getmappings.ps1 skriptet för att visa de mappningar som för närvarande finns i exempelmiljön. Ersätt <password> med ett giltigt lösenord.

    .\GetMappings.ps1 ^
    -UserName 'mysqluser' -Password '<password>' -ShardMapManagerServerName 'abcdefghij.database.windows.net'
    
  5. Kör skriptet ExecuteSampleSplitMerge.ps1 för att köra en delningsåtgärd (flytta hälften av data på den första fragmentet till den andra fragmentet) och sedan en sammanslagningsåtgärd (flytta tillbaka data till den första fragmentet). Om du har konfigurerat TLS och lämnat http-slutpunkten inaktiverad kontrollerar du att du använder https:// slutpunkten i stället.

    Exempel på kommandorad. Ersätt <password> med ett giltigt lösenord.

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

    Om du får följande fel är det troligtvis ett problem med webbslutpunktens certifikat. Prova att ansluta till webbslutpunkten med din favoritwebbläsare och kontrollera om det finns ett certifikatfel.

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

    Om det lyckas bör resultatet se ut som följande. Ersätt <password> med ett giltigt lösenord.

    .\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. Experimentera med andra datatyper. Alla dessa skript har en valfri -ShardKeyType parameter som gör att du kan ange nyckeltypen. Standardvärdet är Int32, men du kan också ange Int64, Guid eller Binary.

Skapa begäranden

Tjänsten kan användas antingen med hjälp av webbgränssnittet eller genom att importera och använda SplitMerge.psm1 PowerShell-modulen, som skickar dina begäranden via webbrollen.

Tjänsten kan flytta data i både fragmenterade tabeller och referenstabeller. En fragmenterad tabell har en partitioneringsnyckelkolumn och har olika raddata på varje fragment. En referenstabell är inte fragmenterad så den innehåller samma raddata på varje shard. Referenstabeller är användbara för data som inte ändras ofta och som används för att koppla med fragmenterade tabeller i frågor.

För att kunna utföra en delningskopplingsåtgärd måste du deklarera de fragmenterade tabeller och referenstabeller som du vill flytta. Detta görs med API:et SchemaInfo. Det här API:et finns i Microsoft.Azure.SqlDatabase.ElasticScale.ShardManagement.Schema namnrymd.

  1. För varje fragmenterad tabell skapar du ett ShardedTableInfo objekt som beskriver tabellens överordnade schemanamn (valfritt, standardvärdet "dbo"), tabellnamnet och kolumnnamnet i tabellen som innehåller fragmenteringsnyckeln.
  2. För varje referenstabell skapar du ett ReferenceTableInfo- objekt som beskriver tabellens överordnade schemanamn (valfritt, standardvärdet "dbo") och tabellnamnet.
  3. Lägg till föregående TableInfo-objekt i ett nytt SchemaInfo- objekt.
  4. Hämta en referens till ett ShardMapManager--objekt och anropa GetSchemaInfoCollection.
  5. Lägg till SchemaInfo- i SchemaInfoCollection-, och ange namnet på sharden.

Ett exempel på detta kan visas i skriptet SetupSampleSplitMergeEnvironment.ps1.

Tjänsten Split-Merge skapar inte måldatabasen (eller schemat för tabeller i databasen) åt dig. De måste skapas i förväg innan en begäran skickas till tjänsten.

Kända fel

Du kan se följande meddelande när du kör PowerShell-exempelskripten:

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

Det här felet innebär att TLS/SSL-certifikatet inte är korrekt konfigurerat. Följ anvisningarna i avsnittet Anslut med en webbläsare.

Om du inte kan skicka begäranden kan du se följande:

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

I det här fallet kontrollerar du konfigurationsfilen, särskilt inställningen för WorkerRoleSynchronizationStorageAccountConnectionString. Det här felet indikerar vanligtvis att arbetsrollen inte kunde initiera metadatadatabasen vid första användningen.

Använder du inte elastiska databasverktyg än? Kolla in vår komma igång-guide. För frågor kan du kontakta oss på Microsoft Q&En frågesida för SQL Database och för funktionsförfrågningar, lägga till nya idéer eller rösta på befintliga idéer i SQL Database-feedbackforumet.