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
Töltse le a NuGet legújabb verzióját.
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.
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
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.
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.
Hozzon létre egy Azure Storage-fiókot a diagnosztikai kimenethez.
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
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.
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.
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
Adja meg ezt a kapcsolati sztring a .cscfg fájlban az ElasticScaleMetadata beállítás SplitMergeWeb és SplitMergeWorker szerepkörszakaszaiban.
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
- A Windows Intézőben kattintson duplán a MyCert.pfx elemre.
- 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.
- Erősítse meg a fájl elérési útját, és kattintson a Tovább gombra.
- Í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.
- Hagyja meg az Automatikusan jelölje ki a tanúsítványtárolót[...] jelölőnégyzetet, és kattintson a Tovább gombra.
- Kattintson a Befejezés és az OK gombra.
A PFX-fájl feltöltése a felhőszolgáltatásba
- Nyissa meg az Azure Portalt.
- Válassza a Cloud Services lehetőséget.
- Válassza ki a fent létrehozott felhőszolgáltatást a felosztási/egyesítési szolgáltatáshoz.
- Kattintson a Legfelső menü Tanúsítványai parancsára.
- Kattintson a Feltöltés gombra az alsó sávon.
- Válassza ki a PFX-fájlt, és adja meg a fenti jelszót.
- 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
- Go to the Azure portal
- Válassza ki a korábban létrehozott felhőszolgáltatást.
- Kattintson az Áttekintés elemre.
- Válassza ki az előkészítési környezetet, majd kattintson a Feltöltés gombra.
- 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.
- 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.
- 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:
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)
ExecuteSampleSplitMerge.ps1 – tesztműveleteket hajt végre a tesztadatszinten (részletes leírásért lásd az alábbi táblázatot)
GetMappings.ps1 – legfelső szintű mintaszkript, amely a szegmensleképezések aktuális állapotát nyomtatja ki.
ShardManagement.psm1 – a ShardManagement API-t burkoló segédszkript
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
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.
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.
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'
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'
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. >
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ó.
- 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.
- 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.
- Adja hozzá a fenti TableInfo objektumokat egy új SchemaInfo objektumhoz.
- Szerezze be a ShardMapManager objektumra mutató hivatkozást, és hívja meg a GetSchemaInfoCollection parancsot.
- 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.
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: