Een service voor splitsen samenvoegen implementeren om gegevens tussen sharddatabases te verplaatsen

Van toepassing op: Azure SQL Database

Met het hulpprogramma voor splitsen en samenvoegen kunt u gegevens verplaatsen tussen sharddatabases. Zie Gegevens verplaatsen tussen uitgeschaalde clouddatabases.

Notitie

Het hulpprogramma voor splitsen en samenvoegen is bedoeld om te werken met Cloud Services (klassiek) en niet met App Services.

De pakketten splitsen en samenvoegen downloaden

  1. Download de nieuwste NuGet-versie van NuGet.

  2. Open een opdrachtprompt en navigeer naar de map waarin u nuget.exe hebt gedownload. De download bevat PowerShell-opdrachten.

  3. Download het meest recente pakket Split-Merge in de huidige map met de onderstaande opdracht:

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

De bestanden worden in een map met de naam Microsoft.Azure.SqlDatabase.ElasticScale.Service.SplitMerge.x.x.xxx.x geplaatst, waarbij x.x.xxx.x het versienummer weerspiegelt. Zoek de servicebestanden voor splitsen en samenvoegen in de submap content\splitmerge\service en de PowerShell-scripts splitsen en samenvoegen (en vereiste client-dll's) in de submap content\splitmerge\powershell .

Vereisten

  1. Maak een Azure SQL Database-database die wordt gebruikt als de statusdatabase voor splitsen en samenvoegen. Ga naar de Azure-portal. Maak een nieuwe SQL Database. Geef de database een naam en maak een nieuwe beheerder en wachtwoord. Noteer de naam en het wachtwoord voor later gebruik.

  2. Zorg ervoor dat uw server Azure-services toestaat om er verbinding mee te maken. Controleer in de portal in de firewall Instellingen of de instelling Toegang tot Azure-services toestaan is ingesteld op Aan. Klik op het pictogram Opslaan.

  3. Maak een Azure Storage-account voor diagnostische uitvoer.

  4. Maak een Azure-cloudservice voor uw Split-Merge-service.

De splitssamenvoegservice configureren

Serviceconfiguratie splitsen en samenvoegen

  1. Maak in de map waarin u de assembly's split-merge hebt gedownload een kopie van het bestand ServiceConfiguration.Template.cscfg dat samen met SplitMergeService.cspkg is verzonden en wijzigt u de naam ServiceConfiguration.cscfg.

  2. Open ServiceConfiguration.cscfg in een teksteditor, zoals Visual Studio, waarmee invoer wordt gevalideerd, zoals de indeling van vingerafdruk van het certificaat.

  3. Maak een nieuwe database of kies een bestaande database die moet fungeren als de statusdatabase voor bewerkingen voor splitsen samenvoegen en haal de verbindingsreeks van die database op.

    Belangrijk

    Op dit moment moet de statusdatabase de Latijnse sortering (SQL_Latin1_General_CP1_CI_AS) gebruiken. Zie Windows-sorteringsnaam (Transact-SQL) voor meer informatie.

    Met Azure SQL Database heeft de verbindingsreeks doorgaans de volgende vorm:

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

  4. Voer deze verbindingsreeks in het CSCFG-bestand in zowel de rolsecties SplitMergeWeb als SplitMergeWorker in de instelling ElasticScaleMetadata.

  5. Voer voor de rol SplitMergeWorker een geldige verbindingsreeks in bij Azure Storage voor de instelling WorkerRoleSynchronizationStorageAccount Verbinding maken ionString.

Beveiliging configureren

Raadpleeg de beveiligingsconfiguratie Splitsen samenvoegen voor gedetailleerde instructies voor het configureren van de beveiliging van de service.

Voor een eenvoudige testimplementatie voor deze zelfstudie wordt een minimale set configuratiestappen uitgevoerd om de service actief te maken. Met deze stappen kan slechts één computer/account worden uitgevoerd om met de service te communiceren.

Een zelfondertekend certificaat maken

Maak een nieuwe map en voer vanuit deze map de volgende opdracht uit met behulp van een opdrachtprompt voor ontwikkelaars voor het Visual Studio-venster :

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

U wordt gevraagd om een wachtwoord om de persoonlijke sleutel te beveiligen. Voer een sterk wachtwoord in en bevestig dit. Vervolgens wordt u gevraagd om het wachtwoord nogmaals te gebruiken. Klik op Ja aan het einde om het te importeren in het basisarchief van vertrouwde certificeringsinstanties.

Een PFX-bestand maken

Voer de volgende opdracht uit vanuit hetzelfde venster waarin makecert is uitgevoerd; gebruik hetzelfde wachtwoord dat u hebt gebruikt om het certificaat te maken:

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

Het clientcertificaat importeren in het persoonlijke archief

  1. Dubbelklik in Windows Verkenner op MyCert.pfx.
  2. Selecteer huidige gebruiker in de wizard Certificaat importeren en klik op Volgende.
  3. Bevestig het bestandspad en klik op Volgende.
  4. Typ het wachtwoord, laat alle uitgebreide eigenschappen ingeschakeld en klik op Volgende.
  5. Laat het certificaatarchief automatisch ingeschakeld en klik op Volgende.
  6. Klik op Voltooien en OK.

Het PFX-bestand uploaden naar de cloudservice

  1. Ga naar de Azure-portal.
  2. Selecteer Cloud Services.
  3. Selecteer de cloudservice die u hierboven hebt gemaakt voor de Split/Merge-service.
  4. Klik op Certificaten in het bovenste menu.
  5. Klik op Uploaden in de onderste balk.
  6. Selecteer het PFX-bestand en voer hetzelfde wachtwoord in als hierboven.
  7. Als het certificaat is voltooid, kopieert u de vingerafdruk van het certificaat uit de nieuwe vermelding in de lijst.

Het serviceconfiguratiebestand bijwerken

Plak de hierboven gekopieerde vingerafdruk van het certificaat in het kenmerk vingerafdruk/waarde van deze instellingen. Voor de werkrol:

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

Voor de webrol:

 <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" />

Houd er rekening mee dat voor productie-implementaties afzonderlijke certificaten moeten worden gebruikt voor de CA, voor versleuteling, het servercertificaat en clientcertificaten. Zie Beveiligingsconfiguratie voor gedetailleerde instructies hierover.

Uw service implementeren

  1. Ga naar de Azure-portal
  2. Selecteer de cloudservice die u eerder hebt gemaakt.
  3. Klik op Overzicht.
  4. Kies de faseringsomgeving en klik vervolgens op Uploaden.
  5. Voer in het dialoogvenster een implementatielabel in. Voor zowel Pakket als Configuratie klikt u op Lokaal en kiest u het bestand SplitMergeService.cspkg en het cscfg-bestand dat u eerder hebt geconfigureerd.
  6. Zorg ervoor dat het selectievakje Deploy is ingeschakeld , zelfs als een of meer rollen één exemplaar bevatten.
  7. Druk op de maatstreep in de rechterbenedenhoek om de implementatie te starten. Verwacht dat het enkele minuten duurt voordat het is voltooid.

Problemen met de implementatie oplossen

Als uw webrol niet online komt, is het waarschijnlijk een probleem met de beveiligingsconfiguratie. Controleer of tls/SSL is geconfigureerd zoals hierboven beschreven.

Als uw werkrol niet online komt, maar uw webrol slaagt, is het waarschijnlijk een probleem met het maken van verbinding met de statusdatabase die u eerder hebt gemaakt.

  • Zorg ervoor dat de verbindingsreeks in uw cscfg juist is.

  • Controleer of de server en database bestaan en of de gebruikers-id en het wachtwoord juist zijn.

  • Voor Azure SQL Database moet de verbindingsreeks van het formulier zijn:

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

  • Zorg ervoor dat de servernaam niet begint met https://.

  • Zorg ervoor dat uw server Azure-services toestaat om er verbinding mee te maken. Hiervoor opent u uw database in de portal en zorgt u ervoor dat de instelling Toegang tot Azure Services toestaan is ingesteld op Aan**.

De service-implementatie testen

Verbinding maken met een webbrowser

Bepaal het webeindpunt van uw Split-Merge-service. U vindt dit in de portal door naar het overzicht van uw cloudservice te gaan en aan de rechterkant de URL van de site te bekijken. Vervang http:// door https:// omdat de standaardbeveiligingsinstellingen het HTTP-eindpunt uitschakelen. Laad de pagina voor deze URL in uw browser.

Testen met PowerShell-scripts

De implementatie en uw omgeving kunnen worden getest door de opgenomen PowerShell-voorbeeldscripts uit te voeren.

Belangrijk

De voorbeeldscripts worden uitgevoerd in PowerShell 5.1. Ze worden momenteel niet uitgevoerd op PowerShell 6 of hoger.

De scriptbestanden zijn:

  1. SetupSampleSplitMergeEnvironment.ps1 - stelt een testgegevenslaag in voor Split/Merge (zie de onderstaande tabel voor gedetailleerde beschrijving)

  2. ExecuteSampleSplitMerge.ps1 - voert testbewerkingen uit op de testgegevenslaag (zie de onderstaande tabel voor gedetailleerde beschrijving)

  3. GetMappings.ps1 - voorbeeldscript op het hoogste niveau waarmee de huidige status van de shardtoewijzingen wordt afgedrukt.

  4. ShardManagement.psm1 - helperscript dat de ShardManagement-API verpakt

  5. SqlDatabaseHelpers.psm1 - helperscript voor het maken en beheren van databases in SQL Database

    PowerShell-bestand Stappen
    SetupSampleSplitMergeEnvironment.ps1 1. Hiermee maakt u een shard-toewijzingsbeheerdatabase
    2. Hiermee maakt u twee sharddatabases.
    3. Hiermee maakt u een shard-toewijzing voor deze databases (verwijdert alle bestaande shard-toewijzingen op deze databases).
    4. Hiermee maakt u een kleine voorbeeldtabel in zowel de shards als vult u de tabel in een van de shards.
    5. Declareert de SchemaInfo voor de shard-tabel.
    PowerShell-bestand Stappen
    ExecuteSampleSplitMerge.ps1 1. Hiermee wordt een splitsaanvraag verzonden naar de webfront-end splitst de helft van de gegevens van de eerste shard naar de tweede shard.
    2. Pollt de webfront-end voor de status van de gesplitste aanvraag en wacht totdat de aanvraag is voltooid.
    3. Hiermee verzendt u een samenvoegaanvraag naar de webfront-end split-mergeservice, waarmee de gegevens van de tweede shard naar de eerste shard worden verplaatst.
    4. Peilt de webfront-end voor de status van de samenvoegaanvraag en wacht totdat de aanvraag is voltooid.

PowerShell gebruiken om uw implementatie te verifiëren

  1. Open een nieuw PowerShell-venster en navigeer naar de map waarin u het pakket Split-Merge hebt gedownload en navigeer vervolgens naar de map PowerShell.

  2. Maak een server (of kies een bestaande server) waar shardtoewijzingsbeheer en shards worden gemaakt.

    Notitie

    Het script SetupSampleSplitMergeEnvironment.ps1 maakt standaard al deze databases op dezelfde server om het script eenvoudig te houden. Dit is geen beperking van de Split-Merge-service zelf.

    Een SQL-verificatieaanmelding met lees-/schrijftoegang tot de DB's is nodig voor de split-merge-service om gegevens te verplaatsen en de shard-toewijzing bij te werken. Omdat de Split-Merge-service wordt uitgevoerd in de cloud, biedt deze momenteel geen ondersteuning voor geïntegreerde verificatie.

    Zorg ervoor dat de server is geconfigureerd om toegang toe te staan vanaf het IP-adres van de computer waarop deze scripts worden uitgevoerd. U vindt deze instelling onder SQL Server/Firewalls en virtuele netwerken/IP-adressen van clients.

  3. Voer het script SetupSampleSplitMergeEnvironment.ps1 uit om de voorbeeldomgeving te maken.

    Als u dit script uitvoert, worden alle bestaande shard-toewijzingsbeheergegevensstructuren in de shard-toewijzingsbeheerdatabase en de shards gewist. Het kan handig zijn om het script opnieuw uit te voert als u de shard-toewijzing of shards opnieuw wilt initialiseren.

    Voorbeeld van opdrachtregel:

    .\SetupSampleSplitMergeEnvironment.ps1
     -UserName 'mysqluser' -Password 'MySqlPassw0rd' -ShardMapManagerServerName 'abcdefghij.database.windows.net'
    
  4. Voer het script Getmappings.ps1 uit om de toewijzingen weer te geven die momenteel aanwezig zijn in de voorbeeldomgeving.

    .\GetMappings.ps1
     -UserName 'mysqluser' -Password 'MySqlPassw0rd' -ShardMapManagerServerName 'abcdefghij.database.windows.net'
    
  5. Voer het script ExecuteSampleSplitMerge.ps1 uit om een splitsbewerking uit te voeren (de helft van de gegevens op de eerste shard naar de tweede shard verplaatsen) en vervolgens een samenvoegbewerking (de gegevens weer verplaatsen naar de eerste shard). Als u TLS hebt geconfigureerd en het HTTP-eindpunt uitgeschakeld hebt gelaten, moet u ervoor zorgen dat u in plaats daarvan het https://-eindpunt gebruikt.

    Voorbeeld van opdrachtregel:

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

    Als u de onderstaande fout ontvangt, is het waarschijnlijk een probleem met het certificaat van uw webeindpunt. Probeer verbinding te maken met het webeindpunt met uw favoriete webbrowser en controleer of er een certificaatfout optreedt.

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

    Als dit is gelukt, moet de uitvoer er als volgt uitzien:

    > .\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. Experimenteer met andere gegevenstypen. Al deze scripts hebben een optionele parameter -ShardKeyType waarmee u het sleuteltype kunt opgeven. De standaardwaarde is Int32, maar u kunt ook Int64, Guid of Binair opgeven.

Aanvragen maken

De service kan worden gebruikt met behulp van de webgebruikersinterface of door de PowerShell-module SplitMerge.psm1 te importeren en te gebruiken, waarmee uw aanvragen via de webrol worden verzonden.

De service kan gegevens in zowel shardtabellen als referentietabellen verplaatsen. Een shard-tabel heeft een sharding-sleutelkolom en bevat verschillende rijgegevens op elke shard. Een verwijzingstabel is niet sharded, zodat deze dezelfde rijgegevens op elke shard bevat. Referentietabellen zijn handig voor gegevens die niet vaak worden gewijzigd en worden gebruikt voor JOIN met shard-tabellen in query's.

Als u een bewerking voor splitsen samenvoegen wilt uitvoeren, moet u de shardtabellen en verwijzingstabellen declareren die u wilt verplaatsen. Dit wordt bereikt met de SchemaInfo-API . Deze API bevindt zich in de naamruimte Microsoft.Azure.SqlDatabase.ElasticScale.ShardManagement.Schema .

  1. Maak voor elke shard-tabel een ShardedTableInfo-object met een beschrijving van de bovenliggende schemanaam van de tabel (optioneel, standaard 'dbo'), de tabelnaam en de kolomnaam in die tabel die de shardingsleutel bevat.
  2. Maak voor elke referentietabel een ReferenceTableInfo-object met een beschrijving van de bovenliggende schemanaam van de tabel (optioneel, standaard ingesteld op 'dbo') en de tabelnaam.
  3. Voeg de bovenstaande TableInfo-objecten toe aan een nieuw SchemaInfo-object .
  4. Haal een verwijzing op naar een ShardMapManager-object en roep GetSchemaInfoCollection aan.
  5. Voeg de SchemaInfo toe aan de SchemaInfoCollection en geef de naam van de shard-kaart op.

Een voorbeeld hiervan is te zien in het script SetupSampleSplitMergeEnvironment.ps1.

De service Split-Merge maakt de doeldatabase (of het schema voor tabellen in de database) niet voor u. Ze moeten vooraf worden gemaakt voordat een aanvraag naar de service wordt verzonden.

Problemen oplossen

Mogelijk ziet u het onderstaande bericht bij het uitvoeren van de PowerShell-voorbeeldscripts:

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

Deze fout betekent dat uw TLS/SSL-certificaat niet juist is geconfigureerd. Volg de instructies in de sectie 'Verbinding maken met een webbrowser'.

Als u geen aanvragen kunt indienen, ziet u mogelijk het volgende:

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

Controleer in dit geval uw configuratiebestand, met name de instelling voor WorkerRoleSynchronizationStorageAccount Verbinding maken ionString. Deze fout geeft doorgaans aan dat de werkrol de metagegevensdatabase bij eerste gebruik niet kan initialiseren.

Aanvullende bronnen

Gebruikt u nog geen hulpprogramma's voor elastische databases? Bekijk de handleiding Aan de slag. Neem voor vragen contact met ons op op de microsoft Q&A-vragenpagina voor SQL Database en voor functieaanvragen, voeg nieuwe ideeën toe of stem op bestaande ideeën in het feedbackforum van SQL Database.