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 Flytta data mellan utskalade molndatabaser.
Kommentar
Verktyget för delningssammanslagning är avsett att fungera med Cloud Services (klassisk) och inte App Services.
Ladda ned Split-Merge-paketen
Ladda ned den senaste NuGet-versionen från NuGet.
Öppna en kommandotolk och gå till katalogen där du laddade ned nuget.exe. Nedladdningen innehåller PowerShell-kommandon.
Ladda ned det senaste Split-Merge-paketet till den aktuella katalogen med kommandot nedan:
nuget install Microsoft.Azure.SqlDatabase.ElasticScale.Service.SplitMerge
Filerna placeras i en katalog med namnet Microsoft.Azure.SqlDatabase.ElasticScale.Service.SplitMerge.x.x.xxx.x där x.x.xxx.x återspeglar versionsnumret. Leta upp tjänstfilerna för delad sammanslagning i underkatalogen content\splitmerge\service och PowerShell-skripten Split-Merge (och nödvändiga klientdllar) i underkatalogen content\splitmerge\powershell .
Förutsättningar
Skapa en Azure SQL Database-databas som ska användas som statusdatabas för delad sammanslagning. Gå till Azure-portalen. Skapa en ny SQL Database. Ge databasen ett namn och skapa en ny administratör och ett nytt lösenord. Se till att registrera namn och lösenord för senare användning.
Se till att din server tillåter att Azure Services ansluter till den. I portalen i brandväggen Inställningar kontrollerar du att inställningen Tillåt åtkomst till Azure Services är inställd på På. Klicka på ikonen "spara".
Skapa ett Azure Storage-konto för diagnostikutdata.
Skapa en Azure Cloud Service för din split-merge-tjänst.
Konfigurera split-merge-tjänsten
Tjänstkonfiguration för delad sammanslagning
Skapa en kopia av filen ServiceConfiguration.Template.cscfg som levererades tillsammans med SplitMergeService.cspkg och byt namn på den till ServiceConfiguration.cscfg i mappen där du laddade ned splitmergeService.cspkg.
Öppna ServiceConfiguration.cscfg i en textredigerare, till exempel Visual Studio som validerar indata, till exempel formatet på certifikatets tumavtryck.
Skapa en ny databas eller välj en befintlig databas som ska fungera som statusdatabas för split-merge-åtgärder och hämta databasens anslutningssträng.
Viktigt!
För närvarande måste statusdatabasen använda den latinska sorteringen (SQL_Latin1_General_CP1_CI_AS). Mer information finns i Windows Collation Name (Transact-SQL).
Med Azure SQL Database är anslutningssträng vanligtvis av formuläret:
Server=<serverName>.database.windows.net; Database=<databaseName>;User ID=<userId>; Password=<password>; Encrypt=True; Connection Timeout=30
Ange den här anslutningssträng i .cscfg-filen i rollavsnitten SplitMergeWeb och SplitMergeWorker i inställningen ElasticScaleMetadata.
För rollen SplitMergeWorker anger du en giltig anslutningssträng till Azure Storage för inställningen WorkerRoleSynchronizationStorageAccount Anslut ionString.
Konfigurera säkerhet
Detaljerade instruktioner för att konfigurera tjänstens säkerhet finns i säkerhetskonfigurationen Dela samman.
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
Skapa en ny katalog och kör följande kommando från den här katalogen med hjälp av en kommandotolk för utvecklare för 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
Du uppmanas att ange ett lösenord för att skydda den privata nyckeln. Ange ett starkt lösenord och bekräfta det. Sedan uppmanas du att lösenordet ska användas en gång till efter det. Klicka på Ja i slutet för att importera det till rotarkivet Betrodda certifikatutfärdare.
Skapa en PFX-fil
Kör följande kommando från samma fönster där makecert kördes. använd samma lösenord som du använde för att skapa certifikatet:
pvk2pfx -pvk MyCert.pvk -spc MyCert.cer -pfx MyCert.pfx -pi <password>
Importera klientcertifikatet till det personliga arkivet
- Dubbelklicka på MyCert.pfx i Utforskaren i Windows.
- I guiden Importera certifikat väljer du Aktuell användare och klickar på Nästa.
- Bekräfta filsökvägen och klicka på Nästa.
- Skriv lösenordet, låt Inkludera alla utökade egenskaper vara markerat och klicka på Nästa.
- Låt Automatiskt välja certifikatarkivet[...] markerat och klicka på Nästa.
- Klicka på Slutför och OK.
Ladda upp PFX-filen till molntjänsten
- Gå till Azure-portalen.
- Välj Molntjänster.
- Välj den molntjänst som du skapade ovan för tjänsten Split/Merge.
- Klicka på Certifikat på den översta menyn.
- Klicka på Ladda upp i det nedre fältet.
- Välj PFX-filen och ange samma lösenord som ovan.
- När du är klar kopierar du certifikatets tumavtryck från den nya posten i listan.
Uppdatera tjänstkonfigurationsfilen
Klistra in certifikatets tumavtryck som kopierats ovan i tumavtrycks-/värdeattributet för de här inställningarna. För arbetsrollen:
<Setting name="DataEncryptionPrimaryCertificateThumbprint" value="" />
<Certificate name="DataEncryptionPrimary" thumbprint="" thumbprintAlgorithm="sha1" />
För webbrollen:
<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" />
Observera att separata certifikat för produktionsdistributioner ska användas för certifikatutfärdare för kryptering, servercertifikat och klientcertifikat. Detaljerade anvisningar om detta finns i Säkerhetskonfiguration.
Distribuera din tjänst
- Gå till Azure Portal
- Välj den molntjänst som du skapade tidigare.
- Klicka på Översikt.
- Välj mellanlagringsmiljön och klicka sedan på Ladda upp.
- I dialogrutan anger du en distributionsetikett. För både "Package" och "Configuration" klickar du på "Från lokal" och väljer filen SplitMergeService.cspkg och cscfg-filen som du konfigurerade tidigare.
- Kontrollera att kryssrutan Distribuera även om en eller flera roller innehåller en enda instans är markerad.
- Tryck på bockknappen längst ned till höger för att påbörja distributionen. Räkna med att det tar några minuter att slutföra.
Felsöka distributionen
Om webbrollen inte är online är det troligtvis ett problem med säkerhetskonfigurationen. Kontrollera att TLS/SSL har konfigurerats enligt beskrivningen ovan.
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äng i cscfg ä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äng vara av formuläret:
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å På**.
Testa tjänstdistributionen
Anslut med en webbläsare
Fastställa webbslutpunkten för din split-merge-tjänst. Du hittar detta i portalen genom att gå till Översikt över din molntjänst och titta under Webbplats-URL till höger. Ersätt http:// med https:// eftersom standardsäkerhetsinställningarna inaktiverar HTTP-slutpunkten. Läs in sidan för den här URL:en i webbläsaren.
Testa med PowerShell-skript
Distributionen och din miljö kan testas genom att köra de inkluderade PowerShell-exempelskripten.
Viktigt!
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:
SetupSampleSplitMergeEnvironment.ps1 – konfigurerar en testdatanivå för Split/Merge (se tabellen nedan för detaljerad beskrivning)
ExecuteSampleSplitMerge.ps1 – kör teståtgärder på testdatanivån (se tabellen nedan för detaljerad beskrivning)
GetMappings.ps1 – exempelskript på den översta nivån som skriver ut det aktuella tillståndet för shardmappningarna.
ShardManagement.psm1 – hjälpskript som omsluter ShardManagement-API:et
SqlDatabaseHelpers.psm1 – hjälpskript för att skapa och hantera databaser i SQL Database
PowerShell-fil Steg SetupSampleSplitMergeEnvironment.ps1 1. Skapar en shard map manager-databas 2. Skapar 2 sharddatabaser. 3. Skapar en fragmentkarta för dessa databaser (tar bort eventuella befintliga fragmentkartor på dessa databaser). 4. Skapar en liten exempeltabell i båda fragmenten och fyller i tabellen i en av shardsna. 5. Deklarerar SchemaInfo för den fragmenterade tabellen. PowerShell-fil Steg ExecuteSampleSplitMerge.ps1 1. Skickar en delad begäran till webbklientdelen Split-Merge Service, som delar upp hälften av data från den första fragmentet till det andra fragmentet. 2. Avsöker webbklientdelen efter status för delad begäran och väntar tills begäran har slutförts. 3. Skickar en kopplingsbegäran till webbklientdelen Split-Merge Service, som flyttar data från den andra fragmentet tillbaka till den första fragmentet. 4. Avsöker webbklientdelen efter status för sammanslagningsbegäran och väntar tills begäran har slutförts.
Använda PowerShell för att verifiera distributionen
Öppna ett nytt PowerShell-fönster och navigera till katalogen där du laddade ned paketet Split-Merge och navigera sedan till katalogen "PowerShell".
Skapa en server (eller välj en befintlig server) där shard map manager och shards skapas.
Kommentar
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 behö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.
Kör skriptet SetupSampleSplitMergeEnvironment.ps1 för att skapa exempelmiljön.
Om du kör det här skriptet rensas alla befintliga datastrukturer för hantering av fragmentkartor i shard map manager-databasen och shards. Det kan vara användbart att köra skriptet igen om du vill initiera om fragmentkartan eller shards.
Exempel på kommandorad:
.\SetupSampleSplitMergeEnvironment.ps1 -UserName 'mysqluser' -Password 'MySqlPassw0rd' -ShardMapManagerServerName 'abcdefghij.database.windows.net'
Kör skriptet Getmappings.ps1 för att visa de mappningar som för närvarande finns i exempelmiljön.
.\GetMappings.ps1 -UserName 'mysqluser' -Password 'MySqlPassw0rd' -ShardMapManagerServerName 'abcdefghij.database.windows.net'
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:
.\ExecuteSampleSplitMerge.ps1 -UserName 'mysqluser' -Password 'MySqlPassw0rd' -ShardMapManagerServerName 'abcdefghij.database.windows.net' -SplitMergeServiceEndpoint 'https://mysplitmergeservice.cloudapp.net' -CertificateThumbprint '0123456789abcdef0123456789abcdef01234567'
Om du får felet nedan ä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 lyckades bör utdata se ut så här:
> .\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. >
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.
Startförfrågan
Tjänsten kan användas antingen med hjälp av webbgränssnittet eller genom att importera och använda PowerShell-modulen SplitMerge.psm1 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 split-merge-åtgärd måste du deklarera de fragmenterade tabeller och referenstabeller som du vill ha flyttat. Detta görs med SchemaInfo-API:et. Det här API:et finns i namnområdet Microsoft.Azure.SqlDatabase.ElasticScale.ShardManagement.Schema .
- 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.
- För varje referenstabell skapar du ett ReferenceTableInfo-objekt som beskriver tabellens överordnade schemanamn (valfritt, standardvärdet "dbo") och tabellnamnet.
- Lägg till ovanstående TableInfo-objekt i ett nytt SchemaInfo-objekt .
- Hämta en referens till ett ShardMapManager-objekt och anropa GetSchemaInfoCollection.
- Lägg till SchemaInfo i SchemaInfoCollection och ange shardkartans namn.
Ett exempel på detta kan visas i skriptet SetupSampleSplitMergeEnvironment.ps1.
Tjänsten Split-Merge skapar inte måldatabasen (eller schemat för några tabeller i databasen) åt dig. De måste skapas i förväg innan en begäran skickas till tjänsten.
Felsökning
Du kan se meddelandet nedan 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 ing with a web browser".
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 WorkerRoleSynchronizationStorageAccount Anslut ionString. Det här felet anger vanligtvis att arbetsrollen inte kunde initiera metadatadatabasen vid första användningen.
Ytterligare resurser
Använder du inte elastiska databasverktyg än? Kolla in vår komma igång-guide. Om du har frågor kan du kontakta oss på microsofts Q&A-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.