Een split-en-samenvoeg service implementeren om gegevens tussen geshardde databases 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 voor Azure Web Apps. Het einde van de levensduur voor cloudservices (klassiek) is 31 augustus 2024. Als u het hulpprogramma voor splitsen samenvoegen in Cloud Services (klassiek) gebruikt, migreert u vóór 31 augustus 2024 naar Azure Web Apps.
Voorwaarden
Maak een SQL-database die moet worden 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 een nieuw wachtwoord. Noteer de naam en het wachtwoord voor later gebruik.
Zorg ervoor dat uw logische server in Azure Azure-services toestaat om er verbinding mee te maken. Controleer in Azure Portal in de firewallinstellingen voor uw logische server of de instelling Toegang tot Azure Services toestaan is ingesteld op Aan. Selecteer het pictogram Opslaan.
Maak een Azure Storage-account voor diagnostische uitvoer.
Gebruik de openbare split-merge docker-installatiekopieën, of push split-merge docker-installatiekopieën naar Azure Container Service of naar een docker-register naar keuze.
Twee Azure Web Apps voor uw service maken
Maak twee web-apps: een worker
en UI
web-app.
Werknemer webapplicatie
Selecteer in het veld Publiceren de Container.
Voor besturingssysteemselecteert u Windows.
Ga naar het tabblad Docker.
Vul de volgende gegevens in:
afbeeldingsbron:Docker hub
Access-type:Public
Afbeelding en tag:mcr.microsoft.com/splitmerge/splitmergeworker:20240812.1
Gebruik Beoordelen en maken om de web-app te maken.
Gebruikersinterface-web-app
Om de UI web-app te maken, volgt u dezelfde stappen die u hebt gebruikt om de Worker-web-app te maken, met één verschil:
- Een andere Docker-afbeelding in het veld Afbeelding en tag:
mcr.microsoft.com/splitmerge/splitmergeweb:20240812.1
Uw Split-Merge-web-apps configureren
Beveiliging configureren
Raadpleeg de Split-Merge beveiligingsconfiguratievoor 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 die ze uitvoert, communiceren met de service.
Een zelfondertekend certificaat en PFX-bestand maken
Gebruik PowerShell om een zelfondertekend certificaat en PFX-bestand te maken.
Maak eerst een nieuwe map. Vervang vervolgens de inlinewaarden dienovereenkomstig en voer de volgende PowerShell-opdrachten uit vanuit de nieuwe map. Vervang <password>
door een geldig wachtwoord.
$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
Het PFX-bestand uploaden naar de web-apps en het gebruik van certificaten inschakelen
Herhaal de volgende stappen voor zowel worker
als UI
Web Apps.
- Ga naar de Azure Portal.
- Selecteer App Services-.
- Selecteer de web-app die u hierboven hebt gemaakt voor het hulpprogramma voor splitsen en samenvoegen.
- Selecteer Certificaten in het menu.
- Selecteer Breng uw eigen certificaten (.pfx).
- Selecteer Certificaat toevoegen in de balk.
- Selecteer het PFX-bestand en voer hetzelfde wachtwoord in als hierboven.
- Als u klaar bent, kopieert u de vingerafdruk van het certificaat uit de nieuwe invoer in de lijst.
- Open in het menu Web App Instellingen / Configuratie.
- Stel clientcertificaatmodus op
Require
.
Configuratie van web-apps
Herhaal de volgende stappen voor zowel worker
als UI
web-apps.
Open de geïmplementeerde web-app en ga naar Instellingen>Omgevingsvariabelen>App-instellingen. Selecteer toevoegen.
Voeg een variabele toe met de naam ElasticScaleMetadata en de waarde met de verbindingsreeks voor de eerder geïmplementeerde statusdatabase.
Belangrijk
Op dit moment moet de statusdatabase de Latijnse sortering (
SQL\_Latin1\_General\_CP1\_CI\_AS
) gebruiken. Voor meer informatie, zie Windows-sorteringsnaam .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
Aanvullende variabelen toevoegen:
Naam Waarde WorkerRolSynchronisatieOpslagAccountVerbindingsString Geldige verbindingsreeks voor de eerder gemaakte Azure-opslag. Data-encryptie Primaire Certificaat Vingerafdruk Eerder gegenereerde vingerafdruk van certificaat. VervalperiodeMetadataInMinuten 20160 MaxRetryCount 5 WEBSITE_CERTIFICATEN_LADEN * WEBSITE_PULL_IMAGE_OVER_VNET 0 Selecteer toepassen en start de toepassing opnieuw.
Herhaal dezelfde stappen voor zowel
worker
alsUI
web-app.
Problemen met de implementatie oplossen
Als uw webrol niet online komt, is het waarschijnlijk een probleem met de beveiligingsconfiguratie. Controleer of TLS/SSL correct is ingesteld zoals eerder beschreven.
Als uw werkrol niet online komt, maar uw webrol wel slaagt, is het waarschijnlijk een probleem met verbinden met de statusdatabase die u eerder hebt aangemaakt.
Zorg ervoor dat de verbindingsreeks 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 de volgende vorm hebben:
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 Op.
De service-implementatie testen
Verbinding maken met een webbrowser
Ga naar het Overzicht van uw UI
webapp en selecteer Bladeren. Kies het juiste certificaat als u hierom wordt gevraagd.
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:
SetupSampleSplitMergeEnvironment.ps1
: stelt een testgegevenslaag in voor splitssamenvoeging.- Maakt een shard-toewijzingsbeheerdatabase aan.
- Hiermee worden twee shard-databases gemaakt.
- Hiermee maakt u een shard-toewijzing voor deze databases (verwijdert alle bestaande shard-toewijzingen op die databases).
- Hiermee wordt een kleine voorbeeldtabel aangemaakt in beide shards en wordt deze tabel in een van de shards gevuld.
- Verklaart de SchemaInfo voor de geshardde tabel.
ExecuteSampleSplitMerge.ps1
: voert testbewerkingen uit op de testgegevenslaag.- Hiermee wordt een splitsaanvraag verzonden naar de webfront-end van de Split-Merge Service, waarmee de helft van de gegevens van de eerste shard naar de tweede shard wordt gesplitst.
- Hiermee wordt de webfront-end gecontroleerd op de status van de gesplitste aanvraag en wordt gewacht totdat de aanvraag is voltooid.
- Hiermee wordt een samenvoegaanvraag verzonden naar de webfront-end van de Split-Merge Service, waarmee de gegevens van de tweede shard naar de eerste shard worden verplaatst.
- De webinterface vraagt naar de status van de merge-aanvraag en wacht totdat de aanvraag is voltooid.
GetMappings.ps1
- voorbeeldscript op het hoogste niveau waarmee de huidige status van de shardtoewijzingen wordt afgedrukt.ShardManagement.psm1
- helperscript waarmee de ShardManagement-API wordt verpakt.SqlDatabaseHelpers.psm1
- helperscript voor het maken en beheren van databases in SQL Database.
PowerShell gebruiken om uw implementatie te verifiëren
Open een nieuw PowerShell-venster en navigeer naar de map waarin u het Split-Merge-pakket hebt gedownload en navigeer vervolgens naar de map PowerShell.
Maak een server (of kies een bestaande server) waar de shard map manager en shards zullen worden aangemaakt.
Notitie
Het
SetupSampleSplitMergeEnvironment.ps1
script 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 databases 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.
Voer het
SetupSampleSplitMergeEnvironment.ps1
script 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 voeren als u de shard-kaart of shards opnieuw wilt initialiseren.
Voorbeeld van opdrachtregel. Vervang
<password>
door een geldig wachtwoord..\SetupSampleSplitMergeEnvironment.ps1 ^ -UserName 'mysqluser' -Password '<password>' -ShardMapManagerServerName 'abcdefghij.database.windows.net'
Voer het Getmappings.ps1 script uit om de toewijzingen weer te geven die momenteel aanwezig zijn in de voorbeeldomgeving. Vervang
<password>
door een geldig wachtwoord..\GetMappings.ps1 ^ -UserName 'mysqluser' -Password '<password>' -ShardMapManagerServerName 'abcdefghij.database.windows.net'
Voer het
ExecuteSampleSplitMerge.ps1
script uit om een splitsbewerking uit te voeren (de helft van de gegevens op de eerste shard naar de tweede shard te verplaatsen) en vervolgens een samenvoegbewerking (de gegevens terug te 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. Vervang
<password>
door een geldig wachtwoord..\ExecuteSampleSplitMerge.ps1 ^ -UserName 'mysqluser' -Password '<password>' ^ -ShardMapManagerServerName 'abcdefghij.database.windows.net' ^ -SplitMergeServiceEndpoint 'https://mysplitmergeservice.cloudapp.net' ^ -CertificateThumbprint '0123456789abcdef0123456789abcdef01234567'
Als u de volgende fout krijgt, 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 is opgetreden.
Invoke-WebRequest : The underlying connection was closed: Could not establish trust relationship for the SSL/TLSsecure channel.
Als dit lukt, moet de uitvoer eruitzien als de volgende uitvoer. Vervang
<password>
door een geldig wachtwoord..\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.
Experimenteer met andere gegevenstypen. Al deze scripts hebben een optionele -ShardKeyType parameter 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 SplitMerge.psm1
PowerShell-module te importeren en te gebruiken, waarmee uw aanvragen via de webrol worden verzonden.
De service kan gegevens in zowel shardtabellen als referentietabellen verplaatsen. Een geshardde tabel heeft een shardingsleutelkolom en bevat verschillende rijgegevens op elke shard. Een verwijzingstabel wordt niet gesplitst, waardoor deze dezelfde rijgegevens bevat op elke schijf. Referentietabellen zijn handig voor gegevens die niet vaak worden gewijzigd en worden gebruikt voor JOIN met shardtabellen in query's.
Om een splits- en samenvoegbewerking uit te voeren, moet u de shardtabellen en referentietabellen die u wilt verplaatsen declareren. Dit wordt bereikt met de SchemaInfo API. Deze API bevindt zich in de Microsoft.Azure.SqlDatabase.ElasticScale.ShardManagement.Schema
naamruimte.
- Maak voor elke shard-tabel een ShardedTableInfo object waarin de bovenliggende schemanaam van de tabel wordt beschreven (optioneel, standaard ingesteld op 'dbo'), de tabelnaam en de kolomnaam in die tabel die de shardingsleutel bevat.
- Maak voor elke verwijzingstabel een ReferenceTableInfo object met een beschrijving van de bovenliggende schemanaam van de tabel (optioneel, standaard 'dbo') en de tabelnaam.
- Voeg de vorige TableInfo-objecten toe aan een nieuw SchemaInfo-object.
- Haal een verwijzing op naar een ShardMapManager--object en roep GetSchemaInfoCollection-aan.
- Voeg de SchemaInfo toe aan de SchemaInfoCollectionen geef de shardmap-naam op.
Een voorbeeld hiervan is te zien in het SetupSampleSplitMergeEnvironment.ps1 script.
De Split-Merge-service maakt niet de doeldatabase (of het schema voor tabellen in de database) voor u. Ze moeten vooraf worden aangemaakt voordat een aanvraag naar de service wordt verzonden.
Bekende fouten
Mogelijk ziet u het volgende 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 WorkerRoleSynchronizationStorageAccountConnectionString
. Deze fout geeft meestal aan dat de werkrol de metagegevensdatabase bij eerste gebruik niet kan initialiseren.
Verwante inhoud
Gebruikt u nog geen hulpprogramma's voor elastische databases? Bekijk onze Aan de slag-handleiding. 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 SQL Database-feedbackforum.