Sdílet prostřednictvím


Nasazení služby rozdělené sloučení pro přesun dat mezi horizontálně dělenými databázemi

Platí pro: Azure SQL Database

Nástroj pro rozdělení sloučení umožňuje přesouvat data mezi horizontálně dělenými databázemi. Viz Přesun dat mezi cloudovými databázemi se škálováním na více systémů.

Poznámka:

Nástroj pro rozdělení a sloučení je určený pro Azure Web Apps. Konec životnosti cloudových služeb (Classic) je 31. srpna 2024. Pokud jste v Cloud Services (Classic) používali nástroj pro rozdělení a slučování, proveďte migraci do Azure Web Apps před 31. srpnem 2024.

Požadavky

  1. Vytvořte databázi SQL, která se použije jako stavová databáze s rozdělením sloučení. Přejděte na Azure Portal. Vytvořte novou databázi SQL. Pojmenujte databázi a vytvořte nový správce a heslo. Nezapomeňte zaznamenat jméno a heslo pro pozdější použití.

  2. Ujistěte se, že váš logický server v Azure umožňuje službám Azure připojit se k němu. Na webu Azure Portal v nastavení brány firewall pro logický server se ujistěte, že je nastavení Povolit přístup ke službám Azure nastavené na Zapnuto. Vyberte ikonu Uložit.

  3. Vytvořte účet Azure Storage pro výstup diagnostiky.

  4. Použijte veřejné image Dockeru s rozdělením sloučení nebo nasdílejte image Dockeru rozdělené sloučení do služby Azure Container Service nebo do registru Dockeru podle svého výběru.

Vytvoření dvou webových aplikací Azure pro vaši službu

Vytvořte dvě webové aplikace – worker a UI webovou aplikaci.

Webová aplikace pracovního procesu

  1. Vytvořte webovou aplikaci na webu Azure Portal.

  2. V poli Publikovat vyberte Kontejner.

  3. V operačním systému vyberte Windows.

  4. Přejděte na kartu Dockeru .

  5. Vyplňte následující informace:
    Zdroj obrázku: Docker hub
    Typ přístupu: Public
    Obrázek a značka: mcr.microsoft.com/splitmerge/splitmergeworker:20240812.1

  6. K vytvoření webové aplikace použijte funkci Zkontrolovat a vytvořit .

Webová aplikace uživatelského rozhraní

Pokud chcete vytvořit webovou aplikaci uživatelského rozhraní, postupujte stejně jako při vytváření webové aplikace Worker s jedním rozdílem:

  • Jiná image Dockeru v poli Image a značka : mcr.microsoft.com/splitmerge/splitmergeweb:20240812.1

Konfigurace webových aplikací rozdělené hromadné korespondence

Konfigurace zabezpečení

Podrobné pokyny ke konfiguraci zabezpečení služby najdete v konfiguraci zabezpečení split-merge.

Pro účely jednoduchého testovacího nasazení pro účely tohoto kurzu se provede minimální sada kroků konfigurace pro zprovoznění služby. Tyto kroky umožňují komunikaci se službou pouze jedním počítačem nebo účtem, který je spouští.

Vytvoření certifikátu podepsaného svým držitelem a souboru PFX

Pomocí PowerShellu vytvořte certifikát podepsaný svým držitelem a soubor PFX.

Nejprve vytvořte nový adresář. Potom nahraďte vložené hodnoty odpovídajícím způsobem a spusťte následující příkazy PowerShellu z nového adresáře:

  $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 "{myPassword}" -Force -AsPlainText  ## Replace {myPassword}
  Export-PfxCertificate -Cert $cert -FilePath "C:\Users\admin\Desktop\$certname.pfx" -Password $mypwd   ## Specify your preferred location

Nahrání souboru PFX do webových aplikací a povolení využití certifikátů

Opakujte následující kroky pro obě worker aplikace i UI webovou aplikaci.

  1. Přejděte na Azure Portal.
  2. Vyberte App Services.
  3. Vyberte webovou aplikaci, kterou jste vytvořili výše pro nástroj rozdělené sloučení.
  4. V nabídce vyberte Certifikáty .
  5. Vyberte Možnost Přineste si vlastní certifikáty (.pfx).
  6. Na panelu vyberte Přidat certifikát .
  7. Vyberte soubor PFX a zadejte stejné heslo jako výše.
  8. Po dokončení zkopírujte kryptografický otisk certifikátu z nové položky v seznamu.
  9. V nabídce Webové aplikace otevřete Konfiguraci nastavení / .
  10. Nastavte režim klientského certifikátu na Requirehodnotu .

Konfigurace webové aplikace

Opakujte následující kroky pro obě worker i UI webové aplikace.

  1. Otevřete nasazenou webovou aplikaci a přejděte na >Nastavení proměnných>prostředí Aplikace. Vyberte Přidat.

  2. Přidejte proměnnou s názvem ElasticScaleMetadata a hodnotou s připojovací řetězec pro dříve nasazenou stavovou databázi.

    Důležité

    V tuto chvíli musí stavová databáze používat kolaci latinky (SQL\_Latin1\_General\_CP1\_CI\_AS). Další informace naleznete v tématu Název kolace systému Windows.

    Ve službě Azure SQL Database je připojovací řetězec obvykle ve formě:

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

  3. Přidejte další proměnné:

    Jméno Hodnota
    WorkerRoleSynchronizationStorageAccountConnectionString Platné připojovací řetězec do dříve vytvořeného úložiště Azure.
    DataEncryptionPrimaryCertificateThumbprint Dříve vygenerovaný kryptografický otisk certifikátu.
    MetadataExpirationPeriodInMinutes 20160
    MaxRetryCount 5
    WEBSITE_LOAD_CERTIFICATES *
    WEBSITE_PULL_IMAGE_OVER_VNET 0
  4. Vyberte Použít a restartujte aplikaci.

  5. Stejný postup opakujte pro webovou worker aplikaci i UI pro webovou aplikaci.

Řešení potíží s nasazením

Pokud se vaší webové roli nepodaří převést do online režimu, pravděpodobně se jedná o problém s konfigurací zabezpečení. Zkontrolujte, jestli je protokol TLS/SSL nakonfigurovaný, jak je popsáno výše.

Pokud se vaše role pracovního procesu nepodaří převést do režimu online, ale vaše webová role bude úspěšná, pravděpodobně se jedná o problém s připojením k dříve vytvořené stavové databázi.

  • Ujistěte se, že je připojovací řetězec přesná.

  • Zkontrolujte, jestli server a databáze existují a jestli je ID uživatele a heslo správné.

  • Pro Azure SQL Database by připojovací řetězec měla být ve formátu:

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

  • Ujistěte se, že název serveru nezačíná https://na .

  • Ujistěte se, že váš server umožňuje službám Azure připojit se k němu. Pokud to chcete udělat, otevřete databázi na portálu a ujistěte se, že je nastavení Povolit přístup ke službám Azure nastavené na Zapnuto.

Otestování nasazení služby

Připojení pomocí webového prohlížeče

Přejděte do přehledu webové UI aplikace a vyberte Procházet. Pokud se zobrazí výzva, zvolte správný certifikát.

Testování pomocí skriptů PowerShellu

Nasazení a vaše prostředí je možné otestovat spuštěním zahrnutých ukázkových skriptů PowerShellu.

Důležité

Ukázkové skripty běží v PowerShellu 5.1. Momentálně neběží v PowerShellu 6 nebo novějším.

Zahrnuté soubory skriptu:

  1. SetupSampleSplitMergeEnvironment.ps1 – nastaví testovací datovou vrstvu pro rozdělení a sloučení.

    1. Vytvoří databázi správce mapování horizontálních oddílů.
    2. Vytvoří dvě databáze horizontálních oddílů.
    3. Vytvoří pro tyto databáze mapování horizontálních oddílů (odstraní všechny existující mapy horizontálních oddílů v těchto databázích).
    4. Vytvoří malou ukázkovou tabulku v horizontálních oddílech a naplní tabulku v jednom z horizontálních oddílů.
    5. Deklaruje SchemaInfo pro horizontálně dělenou tabulku.
  2. ExecuteSampleSplitMerge.ps1 – provádí testovací operace na datové vrstvě testu.

    1. Odešle rozdělený požadavek na front-end služby Split-Merge Service, který rozdělí polovinu dat z prvního horizontálního oddílu na druhý horizontální oddíl.
    2. Dotazuje webový front-end na stav rozdělené žádosti a čeká na dokončení požadavku.
    3. Odešle žádost o sloučení na front-end služby Split-Merge Service, která přesune data z druhého horizontálního oddílu zpět do prvního horizontálního oddílu.
    4. Dotazuje webový front-end na stav žádosti o sloučení a čeká na dokončení požadavku.
  3. GetMappings.ps1 – ukázkový skript nejvyšší úrovně, který vytiskne aktuální stav mapování horizontálních oddílů.

  4. ShardManagement.psm1 – pomocný skript, který zabalí rozhraní API ShardManagement.

  5. SqlDatabaseHelpers.psm1 – pomocný skript pro vytváření a správu databází ve službě SQL Database.

Ověření nasazení pomocí PowerShellu

  1. Otevřete nové okno PowerShellu a přejděte do adresáře, do kterého jste stáhli balíček Split-Merge, a pak přejděte do adresáře PowerShell.

  2. Vytvořte server (nebo zvolte existující server), ve kterém se vytvoří správce mapování horizontálních oddílů a horizontální oddíly.

    Poznámka:

    Skript SetupSampleSplitMergeEnvironment.ps1 ve výchozím nastavení vytvoří všechny tyto databáze na stejném serveru, aby byl skript jednoduchý. Nejedná se o omezení samotné služby Split-Merge Service.

    Pro přesun dat a aktualizaci mapy horizontálních oddílů je potřeba přihlášení k ověřování SQL s přístupem pro čtení a zápis k databázím. Vzhledem k tomu, že služba Split-Merge běží v cloudu, v současné době nepodporuje integrované ověřování.

    Ujistěte se, že je server nakonfigurovaný tak, aby umožňoval přístup z IP adresy počítače, na kterém jsou spuštěné tyto skripty. Toto nastavení najdete v části SQL Server / Brány firewall a virtuální sítě / IP adresy klienta.

  3. Spuštěním SetupSampleSplitMergeEnvironment.ps1 skriptu vytvořte ukázkové prostředí.

    Spuštěním tohoto skriptu se vymažou všechny existující datové struktury mapování horizontálních oddílů v databázi správce mapování horizontálních oddílů a horizontálních oddílech. Pokud chcete znovu inicializovat mapu horizontálních oddílů nebo horizontální oddíly, může být užitečné skript spustit znovu.

    Ukázkový příkazový řádek:

    .\SetupSampleSplitMergeEnvironment.ps1 ^
    -UserName 'mysqluser' -Password 'MySqlPassw0rd' -ShardMapManagerServerName 'abcdefghij.database.windows.net'
    
  4. Spuštěním skriptu Getmappings.ps1 zobrazte mapování, která aktuálně existují v ukázkovém prostředí.

    .\GetMappings.ps1 ^
    -UserName 'mysqluser' -Password 'MySqlPassw0rd' -ShardMapManagerServerName 'abcdefghij.database.windows.net'
    
  5. ExecuteSampleSplitMerge.ps1 Spusťte skript, který provede operaci rozdělení (přesune polovinu dat z prvního horizontálního oddílu do druhého horizontálního oddílu) a pak operaci sloučení (přesun dat zpět do prvního horizontálního oddílu). Pokud jste nakonfigurovali protokol TLS a nechali koncový bod HTTP zakázaný, ujistěte se, že místo toho použijete koncový bod https://.

    Ukázkový příkazový řádek:

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

    Pokud se zobrazí následující chyba, pravděpodobně se jedná o problém s certifikátem webového koncového bodu. Zkuste se připojit k webovému koncovému bodu pomocí oblíbeného webového prohlížeče a zkontrolujte, jestli nedošlo k chybě certifikátu.

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

    Pokud bude úspěšný, výstup by měl vypadat jako následující výstup:

    .\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. Experimentujte s jinými datovými typy. Všechny tyto skripty mají volitelný parametr -ShardKeyType, který umožňuje zadat typ klíče. Výchozí hodnota je Int32, ale můžete také zadat Int64, Guid nebo Binary.

Požadavky na vytvoření

Službu můžete použít buď pomocí webového uživatelského rozhraní, nebo importem a použitím SplitMerge.psm1 modulu PowerShellu, který odesílá vaše požadavky prostřednictvím webové role.

Služba může přesouvat data v horizontálně dělených tabulkách i v referenčních tabulkách. Horizontálně dělená tabulka obsahuje sloupec klíče horizontálního dělení a v každém horizontálním oddílu má různá data řádků. Referenční tabulka není horizontálně dělená, takže obsahuje stejná data řádků v každém horizontálním oddílu. Referenční tabulky jsou užitečné pro data, která se často nemění, a používá se k připojení s horizontálně dělenými tabulkami v dotazech.

Chcete-li provést operaci rozdělení sloučení, je nutné deklarovat horizontální tabulky a referenční tabulky, které chcete přesunout. To se provádí pomocí rozhraní SchemaInfo API. Toto rozhraní API je v Microsoft.Azure.SqlDatabase.ElasticScale.ShardManagement.Schema oboru názvů.

  1. Pro každou horizontálně dělenou tabulku vytvořte objekt ShardedTableInfo popisující název nadřazeného schématu tabulky (volitelné, výchozí hodnota je "dbo"), název tabulky a název sloupce v této tabulce, který obsahuje klíč horizontálního dělení.
  2. Pro každou referenční tabulku vytvořte objekt ReferenceTableInfo popisující název nadřazeného schématu tabulky (volitelné, výchozí hodnoty "dbo") a název tabulky.
  3. Přidejte předchozí objekty TableInfo do nového objektu SchemaInfo .
  4. Získejte odkaz na objekt ShardMapManager a volání GetSchemaInfoCollection.
  5. Přidejte schemaInfo do SchemaInfoCollection a zadejte název mapování horizontálních oddílů.

Příklad je vidět ve skriptu SetupSampleSplitMergeEnvironment.ps1.

Služba Split-Merge pro vás nevytvoří cílovou databázi (ani schéma pro žádné tabulky v databázi). Před odesláním požadavku do služby je nutné je předem vytvořit.

Známé chyby

Při spuštění ukázkových skriptů PowerShellu se může zobrazit následující zpráva:

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

Tato chyba znamená, že váš certifikát TLS/SSL není správně nakonfigurovaný. Postupujte podle pokynů v části Připojení pomocí webového prohlížeče.

Pokud nemůžete odesílat žádosti, může se zobrazit toto:

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

V tomto případě zkontrolujte konfigurační soubor, zejména nastavení pro WorkerRoleSynchronizationStorageAccountConnectionString. Tato chyba obvykle značí, že role pracovního procesu nemohla při prvním použití úspěšně inicializovat databázi metadat.

Ještě nepoužíváte nástroje elastické databáze? Podívejte se na naši příručku Začínáme. Pokud máte dotazy, kontaktujte nás na stránce otázek Microsoft Q&A pro SLUŽBU SQL Database a žádosti o funkce, přidejte nové nápady nebo hlasujte pro stávající nápady ve fóru pro zpětnou vazbu ke službě SQL Database.