Osztott egyesítési szolgáltatás üzembe helyezése az adatok horizontális adatbázisok közötti áthelyezéséhez

A következőre vonatkozik: Azure SQL Database

A felosztási egyesítési eszköz lehetővé teszi az adatok szilánkos adatbázisok közötti áthelyezését. Lásd: Adatok áthelyezése vertikálisan felskálázott felhőbeli adatbázisok között.

Megjegyzés:

Az osztott egyesítési eszköz a Cloud Services (klasszikus) és nem az App Services használatára szolgál.

A felosztásos egyesítési csomagok letöltése

  1. Töltse le a NuGet legújabb verzióját.

  2. Nyisson meg egy parancssort, és keresse meg azt a könyvtárat, ahová a nuget.exe fájlt letöltötte. A letöltés PowerShell-parancsokat tartalmaz.

  3. Töltse le a legújabb Split-Merge csomagot az aktuális könyvtárba az alábbi paranccsal:

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

A fájlok egy Microsoft.Azure.SqlDatabase.ElasticScale.Service.SplitMerge.x.x.xxx.x nevű könyvtárba kerülnek, ahol az x.x.xxx.x a verziószámot tükrözi. Keresse meg a megosztott egyesítésű szolgáltatásfájlokat a content\splitmerge\service alkönyvtárban, valamint a PowerShell-szkriptek (és a szükséges ügyfél dll-ek) felosztása a content\splitmerge\powershell alkönyvtárban.

Előfeltételek

  1. Hozzon létre egy Azure SQL Database-adatbázist, amely a felosztásos egyesítés állapotadatbázisaként lesz használva. Nyissa meg az Azure Portalt. Hozzon létre egy új SQL Database-adatbázist. Adjon nevet az adatbázisnak, és hozzon létre egy új rendszergazdát és jelszót. A nevet és a jelszót mindenképpen jegyezze fel későbbi használatra.

  2. Győződjön meg arról, hogy a kiszolgáló lehetővé teszi az Azure Services számára a csatlakozást. A portál tűzfal Gépház győződjön meg arról, hogy az Azure Services-hozzáférés engedélyezése beállítás be van kapcsolva. Kattintson a "mentés" ikonra.

  3. Hozzon létre egy Azure Storage-fiókot a diagnosztikai kimenethez.

  4. Hozzon létre egy Azure Cloud Service-t a split-merge szolgáltatáshoz.

A Split-Merge szolgáltatás konfigurálása

Szolgáltatáskonfiguráció felosztása

  1. A SplitMergeService.cspkg mellett szállított ServiceConfiguration.Template.cscfg fájl másolatát abban a mappában, amelybe letöltötte a SplitMergeService.cspkg fájlt, és nevezze át ServiceConfiguration.cscfg néven.

  2. Nyissa meg a ServiceConfiguration.cscfg fájlt egy szövegszerkesztőben, például a Visual Studióban, amely ellenőrzi a bemeneteket, például a tanúsítvány ujjlenyomatainak formátumát.

  3. Hozzon létre egy új adatbázist, vagy válasszon ki egy meglévő adatbázist a felosztásos egyesítési műveletek állapotadatbázisaként, és kérje le az adatbázis kapcsolati sztring.

    Fontos

    Jelenleg az állapotadatbázisnak latin rendezést (SQL_Latin1_General_CP1_CI_AS) kell használnia. További információt a Windows rendezési neve (Transact-SQL) című témakörben talál.

    Az Azure SQL Database esetében a kapcsolati sztring általában a következő formában történik:

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

  4. Adja meg ezt a kapcsolati sztring a .cscfg fájlban az ElasticScaleMetadata beállítás SplitMergeWeb és SplitMergeWorker szerepkörszakaszaiban.

  5. A SplitMergeWorker szerepkörhöz adjon meg egy érvényes kapcsolati sztring az Azure Storage-ba a WorkerRoleSynchronizationStorageAccount Csatlakozás ionString beállításhoz.

Biztonság konfigurálása

A szolgáltatás biztonságának konfigurálására vonatkozó részletes utasításokért tekintse meg a split-merge biztonsági konfigurációt.

Az oktatóanyaghoz tartozó egyszerű teszttelepítés céljából minimális konfigurációs lépéseket kell végrehajtani a szolgáltatás üzembe helyezéséhez. Ezek a lépések csak azt a gépet/fiókot teszik lehetővé, amely végrehajtja azokat a szolgáltatással való kommunikációhoz.

Önaláírt tanúsítvány létrehozása

Hozzon létre egy új könyvtárat, és ebből a könyvtárból hajtsa végre a következő parancsot a Visual Studio fejlesztői parancssorának ablakával:

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

A rendszer jelszót kér a titkos kulcs védelméhez. Adjon meg egy erős jelszót, és erősítse meg. Ezután a rendszer kérni fogja, hogy ezt követően még egyszer használja a jelszót. Kattintson a végén az Igen gombra a megbízható hitelesítésszolgáltatók legfelső szintű tárolójába való importálásához.

PFX-fájl létrehozása

Hajtsa végre a következő parancsot ugyanabból az ablakból, ahol a makecert végrehajtásra került; használja ugyanazt a jelszót, amelyet a tanúsítvány létrehozásához használt:

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

Az ügyféltanúsítvány importálása a személyes tárolóba

  1. A Windows Intézőben kattintson duplán a MyCert.pfx elemre.
  2. A Tanúsítványimportálás varázslóban válassza az Aktuális felhasználó lehetőséget, majd kattintson a Tovább gombra.
  3. Erősítse meg a fájl elérési útját, és kattintson a Tovább gombra.
  4. Írja be a jelszót, hagyja bejelölve az Összes kiterjesztett tulajdonság belefoglalása jelölőnégyzetet, és kattintson a Tovább gombra.
  5. Hagyja meg az Automatikusan jelölje ki a tanúsítványtárolót[...] jelölőnégyzetet, és kattintson a Tovább gombra.
  6. Kattintson a Befejezés és az OK gombra.

A PFX-fájl feltöltése a felhőszolgáltatásba

  1. Nyissa meg az Azure Portalt.
  2. Válassza a Cloud Services lehetőséget.
  3. Válassza ki a fent létrehozott felhőszolgáltatást a felosztási/egyesítési szolgáltatáshoz.
  4. Kattintson a Legfelső menü Tanúsítványai parancsára.
  5. Kattintson a Feltöltés gombra az alsó sávon.
  6. Válassza ki a PFX-fájlt, és adja meg a fenti jelszót.
  7. Miután elkészült, másolja ki a tanúsítvány ujjlenyomatát a lista új bejegyzéséből.

A szolgáltatáskonfigurációs fájl frissítése

Illessze be a fent másolt tanúsítvány ujjlenyomatát a beállítások ujjlenyomat-/érték attribútumába. A feldolgozói szerepkör esetében:

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

Webes szerepkör esetén:

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

Vegye figyelembe, hogy éles üzemelő példányok esetén külön tanúsítványokat kell használni a hitelesítésszolgáltatóhoz, a titkosításhoz, a kiszolgálótanúsítványhoz és az ügyféltanúsítványokhoz. Erről részletes útmutatást a Biztonsági konfiguráció című témakörben talál.

A szolgáltatás üzembe helyezése

  1. Go to the Azure portal
  2. Válassza ki a korábban létrehozott felhőszolgáltatást.
  3. Kattintson az Áttekintés elemre.
  4. Válassza ki az előkészítési környezetet, majd kattintson a Feltöltés gombra.
  5. A párbeszédpanelen adjon meg egy üzembehelyezési címkét. A "Csomag" és a "Konfiguráció" beállításnál kattintson a "Helyiről" elemre, és válassza ki a SplitMergeService.cspkg fájlt és a korábban konfigurált cscfg-fájlt.
  6. Győződjön meg arról, hogy az Üzembe helyezés feliratú jelölőnégyzet akkor is be van jelölve, ha egy vagy több szerepkör egyetlen példányt tartalmaz.
  7. Az üzembe helyezés megkezdéséhez nyomja le a jobb alsó osztásgombot. Várjuk, hogy eltarthat néhány percig.

Az üzembe helyezés hibaelhárítása

Ha a webes szerepkör nem érhető el online állapotban, az valószínűleg problémát jelent a biztonsági konfigurációval kapcsolatban. Ellenőrizze, hogy a TLS/SSL a fent leírt módon van-e konfigurálva.

Ha a feldolgozói szerepkör nem érhető el online állapotban, de a webes szerepkör sikeres, valószínűleg problémát jelent a korábban létrehozott állapotadatbázishoz való csatlakozás.

  • Győződjön meg arról, hogy a cscfg kapcsolati sztring pontos.

  • Ellenőrizze, hogy a kiszolgáló és az adatbázis létezik-e, és hogy a felhasználói azonosító és a jelszó helyes-e.

  • Az Azure SQL Database esetében a kapcsolati sztring a következő formában kell lennie:

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

  • Győződjön meg arról, hogy a kiszolgáló neve nem https:// kezdődik.

  • Győződjön meg arról, hogy a kiszolgáló lehetővé teszi az Azure Services számára a csatlakozást. Ehhez nyissa meg az adatbázist a portálon, és győződjön meg arról, hogy az Azure Services-hozzáférés engedélyezése beállítás be van kapcsolva**.

A szolgáltatás üzembe helyezésének tesztelése

Csatlakozás webböngészővel

Határozza meg a split-merge szolgáltatás webes végpontját. Ezt a portálon a felhőszolgáltatás áttekintéséhez , a webhely URL-címének jobb oldalán pedig a webhely URL-címéhez kattintva találja meg. Cserélje le http://https:// , mivel az alapértelmezett biztonsági beállítások letiltják a HTTP-végpontot. Töltse be az URL-cím lapját a böngészőbe.

Tesztelés PowerShell-szkriptekkel

Az üzembe helyezést és a környezetet a mellékelt PowerShell-szkriptek futtatásával lehet tesztelni.

Fontos

A mintaszkriptek a PowerShell 5.1-en futnak. Jelenleg nem a PowerShell 6-os vagy újabb verzióiban futnak.

A szkriptfájlok a következők:

  1. SetupSampleSplitMergeEnvironment.ps1 – beállít egy tesztadatszintet a felosztáshoz/egyesítéshez (részletes leírásért lásd az alábbi táblázatot)

  2. ExecuteSampleSplitMerge.ps1 – tesztműveleteket hajt végre a tesztadatszinten (részletes leírásért lásd az alábbi táblázatot)

  3. GetMappings.ps1 – legfelső szintű mintaszkript, amely a szegmensleképezések aktuális állapotát nyomtatja ki.

  4. ShardManagement.psm1 – a ShardManagement API-t burkoló segédszkript

  5. SqlDatabaseHelpers.psm1 – segédszkript adatbázisok létrehozásához és kezeléséhez az SQL Database-ben

    PowerShell-fájl Steps
    SetupSampleSplitMergeEnvironment.ps1 1. Szegmenstérkép-kezelő adatbázis létrehozása
    2. 2 szegmensadatbázist hoz létre.
    3. Létrehoz egy szegmenstérképet ezekhez az adatbázisokhoz (törli a meglévő szegmenstérképeket ezeken az adatbázisokon).
    4. Létrehoz egy kis mintatáblát mindkét szegmensben, és feltölti a táblát az egyik szegmensben.
    5. Deklarálja a szilánkos tábla SchemaInfo elemét.
    PowerShell-fájl Steps
    ExecuteSampleSplitMerge.ps1 1. Felosztási kérést küld a Split-Merge Service webes előtérnek, amely felosztja az első szegmens adatait a második szegmensre.
    2. Lekérdezi a webes előtérben a felosztott kérés állapotát, és megvárja, amíg a kérés befejeződik.
    3. Egyesítési kérelmet küld a Split-Merge Service webes előtérnek, amely a második szegmens adatait visszaviszi az első szegmensbe.
    4. Lekérdezi a webes előtérben az egyesítési kérelem állapotát, és megvárja, amíg a kérés befejeződik.

A PowerShell használata az üzembe helyezés ellenőrzéséhez

  1. Nyisson meg egy új PowerShell-ablakot, és keresse meg azt a könyvtárat, ahová letöltötte a Split-Merge csomagot, majd lépjen a "PowerShell" könyvtárra.

  2. Hozzon létre egy kiszolgálót (vagy válasszon egy meglévő kiszolgálót), ahol létrejön a szegmenstérkép-kezelő és a szegmensek.

    Megjegyzés:

    A SetupSampleSplitMergeEnvironment.ps1 szkript alapértelmezés szerint az összes adatbázist ugyanazon a kiszolgálón hozza létre a szkript egyszerűségéhez. Ez nem maga a split-merge szolgáltatás korlátozása.

    Az adatok áthelyezéséhez és a szegmenstérkép frissítéséhez a megosztott egyesítési szolgáltatáshoz olvasási/írási hozzáféréssel rendelkező SQL-hitelesítési bejelentkezésre lesz szükség. Mivel a split-merge szolgáltatás a felhőben fut, jelenleg nem támogatja az integrált hitelesítést.

    Győződjön meg arról, hogy a kiszolgáló úgy van konfigurálva, hogy engedélyezze a hozzáférést a szkripteket futtató gép IP-címéről. Ezt a beállítást az SQL Server/Tűzfalak és virtuális hálózatok/Ügyfél IP-címek alatt találja.

  3. Hajtsa végre a SetupSampleSplitMergeEnvironment.ps1 szkriptet a mintakörnyezet létrehozásához.

    A szkript futtatása törli a szegmenstérkép-kezelő adatbázis és a szegmensek meglévő szegmenstérkép-kezelési adatstruktúráit. Ha újra szeretné futtatni a szegmenstérképet vagy a szegmenseket, érdemes lehet újrafuttatnia a szkriptet.

    Minta parancssor:

    .\SetupSampleSplitMergeEnvironment.ps1
     -UserName 'mysqluser' -Password 'MySqlPassw0rd' -ShardMapManagerServerName 'abcdefghij.database.windows.net'
    
  4. Hajtsa végre a Getmappings.ps1 szkriptet a mintakörnyezetben jelenleg létező leképezések megtekintéséhez.

    .\GetMappings.ps1
     -UserName 'mysqluser' -Password 'MySqlPassw0rd' -ShardMapManagerServerName 'abcdefghij.database.windows.net'
    
  5. Hajtsa végre az ExecuteSampleSplitMerge.ps1 szkriptet egy felosztási művelet végrehajtásához (az első szegmens adatainak felét helyezze át a második szegmensbe), majd egy egyesítési műveletet (az adatok áthelyezése az első szegmensre). Ha konfigurálta a TLS-t, és letiltotta a http-végpontot, győződjön meg arról, hogy ehelyett a https:// végpontot használja.

    Minta parancssor:

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

    Ha az alábbi hibaüzenetet kapja, az valószínűleg a webes végpont tanúsítványával kapcsolatos probléma. Próbáljon meg csatlakozni a webes végponthoz a kedvenc webböngészőjével, és ellenőrizze, hogy van-e tanúsítványhiba.

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

    Ha sikerült, a kimenetnek az alábbihoz hasonlóan kell kinéznie:

    > .\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. Kísérletezzen más adattípusokkal. Ezek a szkriptek mindegyike egy választható -ShardKeyType paramétert vesz igénybe, amely lehetővé teszi a kulcstípus megadását. Az alapértelmezett érték az Int32, de megadhatja az Int64, Guid vagy Bináris értéket is.

Létrehozási kérelmek

A szolgáltatás a webes felhasználói felület használatával vagy a SplitMerge.psm1 PowerShell modul importálásával és használatával használható, amely a webes szerepkörön keresztül küldi el a kéréseket.

A szolgáltatás a szegmenses táblákban és a referenciatáblákban is át tudja helyezni az adatokat. A szilánkos táblák skálázási kulcsoszlopa különböző soradatokkal rendelkezik az egyes szegmenseken. A referenciatáblák nincsenek skálázva, ezért minden szegmensen ugyanazokat a soradatokat tartalmazzák. A referenciatáblák olyan adatokhoz hasznosak, amelyek nem változnak gyakran, és a lekérdezésekben szegmenses táblákkal összekapcsolhatók.

A felosztásos egyesítési művelet végrehajtásához deklarálnia kell az áthelyezni kívánt szegmenses táblákat és referenciatáblákat. Ez a SchemaInfo API-val történik. Ez az API a Microsoft.Azure.SqlDatabase.ElasticScale.ShardManagement.Schema névtérben található.

  1. Minden egyes szilánkos táblához hozzon létre egy ShardedTableInfo objektumot, amely leírja a tábla szülősémanevét (nem kötelező, alapértelmezés szerint "dbo"), a tábla nevét és a skálázási kulcsot tartalmazó tábla oszlopnevét.
  2. Minden referenciatáblához hozzon létre egy ReferenceTableInfo objektumot, amely leírja a tábla szülősémanevét (nem kötelező, alapértelmezés szerint "dbo") és a tábla nevét.
  3. Adja hozzá a fenti TableInfo objektumokat egy új SchemaInfo objektumhoz.
  4. Szerezze be a ShardMapManager objektumra mutató hivatkozást, és hívja meg a GetSchemaInfoCollection parancsot.
  5. Adja hozzá a SchemaInfo-t a SchemaInfoCollection elemhez, megadva a szegmenstérkép nevét.

Erre példa a SetupSampleSplitMergeEnvironment.ps1 szkriptben látható.

A Felosztási egyesítés szolgáltatás nem hozza létre a céladatbázist (vagy az adatbázis egyik táblájának sémáját sem). Mielőtt kérést küldene a szolgáltatásnak, elő kell őket létrehozni.

Hibaelhárítás

A PowerShell-példaszkriptek futtatásakor az alábbi üzenet jelenhet meg:

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

Ez a hiba azt jelenti, hogy a TLS/SSL-tanúsítvány nincs megfelelően konfigurálva. Kövesse a böngészővel való Csatlakozás című szakaszban található utasításokat.

Ha nem tud kérelmeket küldeni, a következőt láthatja:

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

Ebben az esetben ellenőrizze a konfigurációs fájlt, különösen a WorkerRoleSynchronizationStorageAccount Csatlakozás ionString beállítását. Ez a hiba általában azt jelzi, hogy a feldolgozói szerepkör nem tudta először inicializálni a metaadat-adatbázist.

További információforrások

Még nem használ rugalmas adatbázis-eszközöket? Tekintse meg az első lépések útmutatót. Ha kérdése van, lépjen kapcsolatba velünk az SQL Database-hez készült Microsoft Q&A kérdésoldalon, és a funkciókérésekért, adjon hozzá új ötleteket, vagy szavazzon a meglévő ötletekre az SQL Database visszajelzési fórumában.