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í slučování je určený pro práci se službami Cloud Services (Classic) a nikoli s App Services.

Stažení balíčků Split-Merge

  1. Stáhněte si nejnovější verzi NuGetu z NuGetu.

  2. Otevřete příkazový řádek a přejděte do adresáře, do kterého jste stáhli soubor nuget.exe. Stažení zahrnuje příkazy PowerShellu.

  3. Stáhněte si nejnovější balíček Split-Merge do aktuálního adresáře pomocí následujícího příkazu:

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

Soubory jsou umístěny v adresáři s názvem Microsoft.Azure.SqlDatabase.ElasticScale.Service.SplitMerge.x.x.xxx.x , kde x.x.xxx.x odráží číslo verze. V podadresáři content\splitmerge\service vyhledejte soubory služby split-merge a skripty Prostředí PowerShell (a požadované klientské knihovny DLL) v podadresáři content\splitmerge\powershell.

Požadavky

  1. Vytvořte databázi Azure SQL Database, která se použije jako stavová databáze s rozdělením sloučení. Přejděte na Azure Portal. Vytvořte novou službu SQL Database. 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áš server umožňuje službám Azure připojit se k němu. Na portálu se v bráně firewall Nastavení ujistěte, že je nastavení Povolit přístup ke službám Azure nastavené na Zapnuto. Klikněte na ikonu Uložit.

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

  4. Vytvořte cloudovou službu Azure pro službu Split-Merge.

Konfigurace služby Split-Merge

Konfigurace služby Split-Merge

  1. Ve složce, do které jste stáhli sestavení Split-Merge, vytvořte kopii souboru ServiceConfiguration.Template.cscfg , který byl odeslán společně s SplitMergeService.cspkg a přejmenujte ji ServiceConfiguration.cscfg.

  2. Otevřete Soubor ServiceConfiguration.cscfg v textovém editoru, například v sadě Visual Studio, který ověřuje vstupy, jako je formát kryptografických otisků certifikátu.

  3. Vytvořte novou databázi nebo zvolte existující databázi, která bude sloužit jako stavová databáze operací rozdělené sloučení a načte připojovací řetězec této databáze.

    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 (Transact-SQL).

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

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

  4. Tuto připojovací řetězec zadejte do souboru .cscfg v oddílech role SplitMergeWeb i SplitMergeWorker v nastavení ElasticScaleMetadata.

  5. Jako roli SplitMergeWorker zadejte platný připojovací řetězec do úložiště Azure pro nastavení WorkerRoleSynchronizationStorizationStorageAccount Připojení ionString.

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 jeho držitelem (self-signed certificate)

Pomocí příkazového řádku pro vývojáře pro Visual Studio vytvořte nový adresář a z tohoto adresáře spusťte následující příkaz:

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

Jste požádáni o zadání hesla k ochraně privátního klíče. Zadejte silné heslo a potvrďte ho. Pak se zobrazí výzva, abyste heslo použili ještě jednou. Kliknutím na ano na konci ho naimportujete do kořenového úložiště důvěryhodných certifikačních autorit.

Vytvoření souboru PFX

Spusťte následující příkaz ze stejného okna, ve kterém byl proveden makecert; použijte stejné heslo, které jste použili k vytvoření certifikátu:

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

Import klientského certifikátu do osobního úložiště

  1. V Průzkumníku Windows poklikejte na MyCert.pfx.
  2. V Průvodci importem certifikátu vyberte Aktuální uživatel a klepněte na tlačítko Další.
  3. Potvrďte cestu k souboru a klikněte na Další.
  4. Zadejte heslo, ponechte zaškrtnuté políčko Zahrnout všechny rozšířené vlastnosti a klepněte na tlačítko Další.
  5. Nechte automaticky vybrat úložiště certifikátů [...] zaškrtnuté a klepněte na tlačítko Další.
  6. Klepněte na tlačítko Dokončit a OK.

Nahrání souboru PFX do cloudové služby

  1. Přejděte na Azure Portal.
  2. Vyberte Cloudové služby.
  3. Vyberte cloudovou službu, kterou jste vytvořili výše pro službu Split/Merge.
  4. V horní nabídce klikněte na Certifikáty .
  5. Klikněte na Nahrát v dolním panelu.
  6. Vyberte soubor PFX a zadejte stejné heslo jako výše.
  7. Po dokončení zkopírujte kryptografický otisk certifikátu z nové položky v seznamu.

Aktualizace konfiguračního souboru služby

Vložte kryptografický otisk certifikátu zkopírovaný výše do atributu kryptografického otisku nebo hodnoty těchto nastavení. Pro roli pracovního procesu:

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

Pro webovou roli:

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

Upozorňujeme, že pro produkční nasazení by se měly používat samostatné certifikáty pro certifikační autoritu, pro šifrování, certifikát serveru a klientské certifikáty. Podrobné pokyny najdete v tématu Konfigurace zabezpečení.

Nasazení služby

  1. Přejděte na web Azure Portal.
  2. Vyberte cloudovou službu, kterou jste vytvořili dříve.
  3. Klikněte na Přehled.
  4. Zvolte pracovní prostředí a klikněte na Nahrát.
  5. V dialogovém okně zadejte popisek nasazení. V případě balíčku i konfigurace klikněte na Z místního nastavení a zvolte soubor SplitMergeService.cspkg a soubor cscfg, který jste nakonfigurovali dříve.
  6. Ujistěte se, že zaškrtávací políčko Nasadit i v případě, že jedna nebo více rolí obsahuje jednu instanci , zaškrtnuté.
  7. Kliknutím na tlačítko zaškrtněte v pravém dolním rohu a zahajte nasazení. Počítejte s tím, že dokončení bude trvat několik minut.

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

Pokud se vaší webové roli nepodaří převést do režimu online, pravděpodobně dojde k problému 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řejít do režimu online, ale vaše webová role bude úspěšná, pravděpodobně dojde k potížím s připojením k dříve vytvořené stavové databázi.

  • Ujistěte se, že připojovací řetězec v cscfg je 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://.

  • 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í ve webovém prohlížeči

Určete webový koncový bod služby Split-Merge. Najdete ho na portálu tak, že přejdete na Přehled cloudové služby a podíváte se na adresu URL webu na pravé straně. Nahraďte http://https:// , protože výchozí nastavení zabezpečení zakáže koncový bod HTTP. Načtěte stránku pro tuto adresu URL do prohlížeče.

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í nebo sloučení (podrobný popis najdete v tabulce níže).

  2. ExecuteSampleSplitMerge.ps1 – provádí testovací operace na datové vrstvě testu (podrobný popis najdete v tabulce níže).

  3. GetMappings.ps1 – ukázkový skript nejvyšší úrovně, který vypíše 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

    Soubor PowerShellu Kroky
    SetupSampleSplitMergeEnvironment.ps1 1. Vytvoří databázi správce mapování horizontálních oddílů.
    2. Vytvoří 2 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 obou 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.
    Soubor PowerShellu Kroky
    ExecuteSampleSplitMerge.ps1 1. Odešle rozdělený požadavek na webový 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ého front-endu na stav rozdělené žádosti a čeká na dokončení požadavku.
    3. Odešle žádost o sloučení webovému front-endu 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.

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 vytvoří ve výchozím nastavení všechny tyto databáze na stejném serveru, aby byl skript jednoduchý. Nejedná se o omezení samotné služby Split-Merge Service.

    Aby služba Split-Merge přesunula data a aktualizovala mapu horizontálních oddílů, bude potřeba přihlášení k ověřování SQL s přístupem pro čtení a zápis do databází. 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 skriptu SetupSampleSplitMergeEnvironment.ps1 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 znovu spustit.

    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. Spusťte skript ExecuteSampleSplitMerge.ps1, který provede operaci rozdělení (přesun poloviny dat na prvním horizontálním 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 byl úspěšný, měl by výstup vypadat takto:

    > .\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 modulu PowerShell SplitMerge.psm1, který odešle 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í, musíte deklarovat horizontálně dělené tabulky a referenční tabulky, které chcete přesunout. To se provádí pomocí rozhraní SchemaInfo API. Toto rozhraní API je v oboru názvů Microsoft.Azure.SqlDatabase.ElasticScale.ShardManagement.Schema .

  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. Do nového objektu SchemaInfo přidejte výše uvedené objekty TableInfo .
  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.

Řešení problému

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í s webovým prohlížečem".

Pokud nemůžete odeslat žá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 WorkerRoleSynchronizationStorageAccount Připojení ionString. Tato chyba obvykle značí, že role pracovního procesu nemohla při prvním použití úspěšně inicializovat databázi metadat.

Další materiály

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.