Oktatóanyag: A PostgreSQL online migrálása az Azure Database for PostgreSQL-be a DMS (klasszikus) használatával az Azure CLI-n keresztül
Fontos
Javasoljuk, hogy az Azure Database for PostgreSQL új migrálási szolgáltatását használja az egyszerűbb és hatékonyabb migrálási élmény érdekében. Ez a szolgáltatás számos forráskörnyezet támogatásával egyszerűsíti a folyamatot, így zökkenőmentes átmenetet biztosít az Azure Database for PostgreSQL-re.
Az Azure Database Migration Service (DMS) használatával minimális állásidővel migrálhatja az adatbázisokat egy helyszíni PostgreSQL-példányból az Azure Database for PostgreSQL-be . Más szóval a migrálás minimális állásidővel érhető el az alkalmazás számára. Ebben az oktatóanyagban a mintaadatbázist a DVD Rental
PostgreSQL 9.6 egy helyszíni példányából migrálja az Azure Database for PostgreSQL-be az Azure Database Migration Service online migrálási tevékenységével.
Ebben az oktatóanyagban az alábbiakkal fog megismerkedni:
- A mintaséma migrálása pg_dump segédprogrammal.
- Egy Azure Database Migration Service-példány létrehozása.
- Migrálási projekt létrehozása az Azure Database Migration Service használatával.
- A migrálás futtatása.
- Az áttelepítés monitorozása.
Az Azure Database Migration Service online migráláshoz való használatához létre kell hoznia egy példányt a prémium tarifacsomag alapján. Titkosítjuk a lemezt, hogy megelőzzük az adatlopásokat a migrálás során.
Fontos
Az optimális migrálási élmény érdekében a Microsoft azt javasolja, hogy hozzon létre egy Azure Database Migration Service-példányt ugyanabban az Azure-régióban, mint a céladatbázis. Az adatok különböző régiók és földrajzi helyek közötti áthelyezése lelassíthatja a migrálási folyamatot, és hibákat eredményezhet.
Előfeltételek
Az oktatóanyag elvégzéséhez a következőkre lesz szüksége:
Töltse le és telepítse a PostgreSQL community edition 9.4, 9.5, 9.6 vagy 10 kiadását. A postgreSQL-kiszolgáló forrásverziójának 9.4-es, 9.5-ös, 9.6-os, 10-es, 11-es, 12-es vagy 13-es verziónak kell lennie. További információ: Támogatott PostgreSQL-adatbázisverziók.
A cél Azure Database for PostgreSQL-verziónak egyenlőnek vagy későbbinek kell lennie, mint a helyszíni PostgreSQL-verzió. A PostgreSQL 9.6 például csak az Azure Database for PostgreSQL 9.6,10-re vagy 11-re migrálható, az Azure Database for PostgreSQL 9.5-be azonban nem.
Hozzon létre egy példányt a rugalmas Azure Database for PostgreSQL-kiszolgálón.
Hozzon létre egy Microsoft Azure Virtual Network hálózatot az Azure Database Migration Service-hez az Azure Resource Manager-alapú üzemi modell használatával, amely a hálózat helyek közötti kapcsolatot biztosít a helyszíni forráskiszolgálóknak ExpressRoute vagy VPN használatával. A virtuális hálózat létrehozásával kapcsolatos további információkért tekintse meg a virtuális hálózat dokumentációját, és különösen a részletes információkat tartalmazó rövid útmutatókat.
A virtuális hálózat beállítása során, ha az ExpressRoute-ot hálózati társviszony-létesítéssel használja a Microsofthoz, adja hozzá a következő szolgáltatásvégpontokat ahhoz az alhálózathoz, amelyben a szolgáltatás ki lesz építve:
- Céladatbázis végpontja (például SQL-végpont, Azure Cosmos DB-végpont stb.)
- Tárolási végpont
- Service Bus-végpont
Ez a konfiguráció szükséges, mert az Azure Database Migration Service nem rendelkezik internetkapcsolattal.
Győződjön meg arról, hogy a virtuális hálózati hálózati biztonsági csoport (NSG) szabályai nem tiltják le a ServiceTag 443-at a ServiceTag for ServiceBus, a Storage és az AzureMonitor kimenő portjában. További részletek a Virtual Network NSG-forgalom szűréséről: Hálózati forgalom szűrése hálózati biztonsági csoportokkal.
Konfigurálja a Windows tűzfalat az adatbázismotorhoz való hozzáféréshez.
Nyissa meg a Windows tűzfalat, hogy az Azure Database Migration Service hozzáférhessen a postgreSQL-kiszolgáló forrásához, amely alapértelmezés szerint az 5432-s TCP-port.
Ha tűzfalberendezést használ a forrásadatbázisok előtt, előfordulhat, hogy tűzfalszabályokat kell hozzáadnia ahhoz, hogy az Azure Database Migration Service hozzáférhessen a forrásadatbázisokhoz a migráláshoz.
Hozzon létre egy kiszolgálószintű tűzfalszabályt az Azure Database for PostgreSQL-hez, hogy az Azure Database Migration Service hozzáférhessen a céladatbázisokhoz. Adja meg az Azure Database Migration Service-hez használt Virtual Network alhálózati tartományát.
A CLI meghívásának két módja van:
Az Azure Portal jobb felső sarkában válassza a Cloud Shell gombot:
Telepítse és futtassa a CLI-t helyileg. A parancssori eszköz 2.18-as vagy újabb verziója szükséges a migráláshoz szükséges Azure-erőforrások kezeléséhez.
A parancssori felület letöltéséhez kövesse az Azure CLI telepítése című cikkben található utasításokat. A cikk az Azure CLI-t támogató platformokat is felsorolja.
Windows Subsystem for Linux (WSL) beállításához kövesse a Windows 10 telepítési útmutatójának utasításait
Engedélyezze a logikai replikációt a forráskiszolgálón a
postgresql.config
fájl szerkesztésével és a következő paraméterek beállításával:wal_level
=logical
max_replication_slots
= [résidők száma]. Ajánlott beállítás:5
.max_wal_senders
= [egyidejű tevékenységek száma]. Amax_wal_senders
paraméter beállítja az egyidejűleg futtatható feladatok számát. Ajánlott beállítás:10
.
A mintaséma migrálása
Az összes adatbázis-objektum, például a táblaséma, az indexek és a tárolt eljárások elvégzéséhez ki kell nyernünk a sémát a forrásadatbázisból, és alkalmazni kell az adatbázisra.
Pg_dump -s parancs segítségével hozzon létre egy séma-memóriaképfájlt az adatbázishoz.
pg_dump -O -h hostname -U db_username -d db_name -s > your_schema.sql
Például: sémafájl kiírása a dvdrental adatbázishoz:
pg_dump -O -h localhost -U postgres -d dvdrental -s > dvdrentalSchema.sql
A pg_dump segédprogram használatával kapcsolatos további információkért lásd a pg-memóriakép oktatóanyagban szereplő példákat.
Hozzon létre egy üres adatbázist a célkörnyezetben, amely az Azure Database for PostgreSQL – Rugalmas kiszolgáló.
Importálja a sémát a létrehozott céladatbázisba a séma-memóriaképfájl visszaállításával.
psql -h hostname -U db_username -d db_name < your_schema.sql
Például:
psql -h mypgserver-20170401.postgres.database.azure.com -U postgres -d dvdrental < dvdrentalSchema.sql
Feljegyzés
A migrálási szolgáltatás belsőleg kezeli az idegen kulcsok és triggerek engedélyezését/letiltását a megbízható és robusztus adatmigrálás biztosítása érdekében. Ennek eredményeképpen nem kell aggódnia a céladatbázis sémájának módosítása miatt.
DMS-példány üzembe helyezése az Azure CLI használatával
Telepítse a DMS szinkronizálási bővítményt:
Jelentkezzen be az Azure-ba az alábbi parancs futtatásával:
az login
Amikor a rendszer kéri, nyisson meg egy webböngészőt, és adja meg a kódot az eszköz hitelesítéséhez. Kövesse az utasításokat a megjelenésük sorrendjében.
A PostgreSQL online migrálása már elérhető a szokásos CLI-csomagban (2.18.0-s vagy újabb verzió), a bővítmény nélkül
dms-preview
. Ha korábban telepítette a bővítményt, az alábbi lépésekkel távolíthatja el:Annak ellenőrzéséhez, hogy telepítve van-e
dms-preview
már a bővítmény, futtassa a következő parancsot:az extension list -o table
Ha
dms-preview
a bővítmény telepítve van, akkor az eltávolításhoz futtassa a következő parancsot:az extension remove --name dms-preview
Az eltávolított bővítmény helyes eltávolításának
dms-preview
ellenőrzéséhez futtassa a következő parancsot, és ne jelenjen meg a bővítmény adms-preview
listában:az extension list -o table
Fontos
dms-preview
az Azure DMS által támogatott egyéb migrálási útvonalakhoz továbbra is szükség lehet bővítményre. Ellenőrizze az adott migrálási útvonal dokumentációját, és állapítsa meg, hogy szükség van-e a bővítményre. Ez a dokumentáció az Azure Database for PostgreSQL-hez készült PostgreSQL online bővítményére vonatkozó követelményt ismerteti.A következő futtatásával bármikor megjelenítheti a DMS-ben támogatott összes parancsot:
az dms -h
Ha több Azure-előfizetéssel is rendelkezik, a DMS-szolgáltatás egy példányának kiépítéséhez használni kívánt előfizetés beállításához futtassa a következő parancsot.
az account set -s <SubscriptionID>
A DMS egy példányának kiépítése a következő parancs futtatásával:
az dms create -l <location> -n <newServiceName> -g <yourResourceGroupName> --sku-name Premium_4vCores --subnet/subscriptions/<SubscriptionID>/resourceGroups/<ResourceGroupName>/providers/Microsoft.Network/virtualNetworks/<VirtualNetwork>/subnets/<SubnetName> –tags tagName1=tagValue1 tagWithNoValue
A következő parancs például létrehoz egy szolgáltatást. Helyettesítse,
<SubscriptionID>
<ResourceGroupName>
és<VirtualNetwork>
érvényes értékekkel.- Hely: USA 2. keleti régiója
- Előfizetés:
<SubscriptionID>
- Erőforráscsoport neve:
<ResourceGroupName>
- DMS-szolgáltatás neve:
PostgresCLI
az dms create -l eastus2 -g <ResourceGroupName> -n PostgresCLI --subnet /subscriptions/<SubscriptionID>/resourceGroups/ERNetwork/providers/Microsoft.Network/virtualNetworks/<VirtualNetwork>/subnets/Subnet-1 --sku-name Premium_4vCores
A DMS szolgáltatás példányának létrehozása körülbelül 10 percet vesz igénybe.
A DMS-ügynök IP-címének azonosításához, hogy hozzá lehessen adni a Postgres-fájlhoz
pg_hba.conf
, futtassa a következő parancsot:az network nic list -g <ResourceGroupName> --query '[].ipConfigurations | [].privateIpAddress'
Példa:
az network nic list -g <resource-group> --query '[].ipConfigurations | [].privateIpAddress'
A következő címhez hasonló eredményt kell kapnia:
[ "172.16.136.18" ]
Adja hozzá a DMS-ügynök IP-címét a Postgres-fájlhoz
pg_hba.conf
.A DMS kiépítése után jegyezze fel a DMS IP-címét.
Adja hozzá az IP-címet a forrásfájlhoz
pg_hba.conf
az alábbi bejegyzéshez hasonlóan:host all all 172.16.136.18/10 md5 host replication postgres 172.16.136.18/10 md5
Ezután hozzon létre egy PostgreSQL-migrálási projektet a következő parancs futtatásával:
az dms project create -l <location> -g <ResourceGroupName> --service-name <yourServiceName> --source-platform PostgreSQL --target-platform AzureDbforPostgreSQL -n <newProjectName>
Például a következő parancs létrehoz egy projektet az alábbi paraméterek használatával:
- Hely: USA nyugati középső régiója
- Erőforráscsoport neve:
<ResourceGroupName>
- Szolgáltatás neve: PostgresCLI
- Projekt neve: PGMigration
- Forrásplatform: PostgreSQL
- Célplatform: AzureDbForPostgreSql
az dms project create -l westcentralus -n PGMigration -g <ResourceGroupName> --service-name PostgresCLI --source-platform PostgreSQL --target-platform AzureDbForPostgreSql
Az alábbi lépéseket követve hozzon létre egy PostgreSQL-migrálási feladatot.
Ez a lépés magában foglalja a forrás IP-címének, felhasználói azonosítójának és jelszavának, a cél IP-címének, felhasználói azonosítójának és jelszavának, és a feladattípusnak a megadását a kapcsolat létrehozásához.
A lehetőségek teljes listájának megtekintéséhez futtassa a parancsot:
az dms project task create -h
A forrás és cél kapcsolata esetében is a bemeneti paraméter egy az objektumlistát tartalmazó json-fájlra hivatkozik.
A kapcsolat JSON-objektumának formátuma a PostgreSQL-kapcsolatokhoz.
{ // if this is missing or null, you will be prompted "userName": "user name", // if this is missing or null (highly recommended) you will be prompted "password": null, "serverName": "server name", // if this is missing, it will default to the 'postgres' database "databaseName": "database name", // if this is missing, it will default to 5432 "port": 5432 }
Van egy adatbázis-beállítás json-fájlja is, amely felsorolja a json-objektumokat. A PostgreSQL esetében az adatbázis-beállítások JSON-objektumának formátuma a következőképpen jelenik meg:
[ { "name": "source database", "target_database_name": "target database", "selectedTables": [ "schemaName1.tableName1", ...n ] }, ...n ]
A forráskapcsolat jsonjának létrehozásához nyissa meg a Jegyzettömbet, másolja ki a következő jsont, és illessze be a fájlba. Mentse a fájlt a C:\DMS\source.json fájlba, miután módosította a forráskiszolgálónak megfelelően.
{ "userName": "postgres", "password": null, "serverName": "13.51.14.222", "databaseName": "dvdrental", "port": 5432 }
A célkapcsolat json létrehozásához nyissa meg a Jegyzettömbet, másolja a következő jsont, és illessze be a fájlba. Mentse a fájlt a C:\DMS\target.json fájlba, miután módosította a célkiszolgálónak megfelelően.
{ "userName": " dms@builddemotarget", "password": null, "serverName": " builddemotarget.postgres.database.azure.com", "databaseName": "inventory", "port": 5432 }
Hozzon létre egy adatbázis-beállítások json-fájlt, amely felsorolja a migrálni kívánt adatbázisok leltárát és leképezését:
Hozza létre az áttelepítendő táblák listáját, vagy sql-lekérdezéssel hozza létre a listát a forrásadatbázisból. Íme egy minta lekérdezés a táblák listájának létrehozásához. Ha ezt a lekérdezést használja, ne felejtse el eltávolítani az utolsó vesszőt a táblanév végén, hogy az érvényes JSON-tömb legyen.
SELECT FORMAT('%s,', REPLACE(FORMAT('%I.%I', schemaname, tablename), '"', '\"')) AS SelectedTables FROM pg_tables WHERE schemaname NOT IN ('pg_catalog', 'information_schema');
Hozza létre az adatbázis-beállítások JSON-fájlját egy bejegyzéssel az egyes adatbázisokhoz a forrás- és céladatbázis nevével, valamint a migrálni kívánt táblák listájával. Az előző SQL-lekérdezés kimenetével feltöltheti a
selectedTables
tömböt.Feljegyzés
Ha a kijelölt táblák listája üres, akkor a szolgáltatás tartalmazza az áttelepítéshez szükséges összes táblát, amelyek egyező sémával és táblanevekkel rendelkeznek.
[ { "name": "dvdrental", "target_database_name": "dvdrental", "selectedTables": [ "schemaName1.tableName1", "schemaName1.tableName2", ... "schemaNameN.tableNameM" ] }, ... n ]
Futtassa a következő parancsot, amely felveszi a forráskapcsolatot, a célkapcsolatot és az adatbázis-beállítások json-fájljait.
az dms project task create -g <ResourceGroupName> --project-name PGMigration --source-connection-json c:\DMS\source.json --database-options-json C:\DMS\option.json --service-name PostgresCLI --target-connection-json c:\DMS\target.json --task-type OnlineMigration -n runnowtask
Ezen a ponton sikeresen elküldött egy migrálási feladatot.
A feladat előrehaladásának megjelenítéséhez futtassa az alábbi parancsokat.
Az általános tevékenység állapotának rövid megjelenítése:
az dms project task show --service-name PostgresCLI --project-name PGMigration --resource-group <ResourceGroupName> --name runnowtask
A feladat részletes állapotának megtekintése, beleértve a migrálási folyamat adatait:
az dms project task show --service-name PostgresCLI --project-name PGMigration --resource-group <ResourceGroupName> --name runnowtask --expand output
JMESPath lekérdezési formátummal is kinyerheti a
migrationState
kibontott kimenetet:az dms project task show --service-name PostgresCLI --project-name PGMigration --resource-group <ResourceGroupName> --name runnowtask --expand output --query 'properties.output[].migrationState'
A kimenetben számos paraméter jelzi a különböző migrálási lépések előrehaladását. Lásd például a következő kimenetet:
{ "output": [ // Database Level { "appliedChanges": 0, // Total incremental sync applied after full load "cdcDeleteCounter": 0, // Total delete operation applied after full load "cdcInsertCounter": 0, // Total insert operation applied after full load "cdcUpdateCounter": 0, // Total update operation applied after full load "databaseName": "inventory", "endedOn": null, "fullLoadCompletedTables": 2, //Number of tables completed full load "fullLoadErroredTables": 0, //Number of tables that contain migration error "fullLoadLoadingTables": 0, //Number of tables that are in loading status "fullLoadQueuedTables": 0, //Number of tables that are in queued status "id": "db|inventory", "incomingChanges": 0, //Number of changes after full load "initializationCompleted": true, "latency": 0, //Status of migration task "migrationState": "READY_TO_COMPLETE", //READY_TO_COMPLETE => the database is ready for cutover "resultType": "DatabaseLevelOutput", "startedOn": "2018-07-05T23:36:02.27839+00:00" }, { "databaseCount": 1, "endedOn": null, "id": "dd27aa3a-ed71-4bff-ab34-77db4261101c", "resultType": "MigrationLevelOutput", "sourceServer": "138.91.123.10", "sourceVersion": "PostgreSQL", "startedOn": "2018-07-05T23:36:02.27839+00:00", "state": "PENDING", "targetServer": "builddemotarget.postgres.database.azure.com", "targetVersion": "Azure Database for PostgreSQL" }, // Table 1 { "cdcDeleteCounter": 0, "cdcInsertCounter": 0, "cdcUpdateCounter": 0, "dataErrorsCount": 0, "databaseName": "inventory", "fullLoadEndedOn": "2018-07-05T23:36:20.740701+00:00", //Full load completed time "fullLoadEstFinishTime": "1970-01-01T00:00:00+00:00", "fullLoadStartedOn": "2018-07-05T23:36:15.864552+00:00", //Full load started time "fullLoadTotalRows": 10, //Number of rows loaded in full load "fullLoadTotalVolumeBytes": 7056, //Volume in Bytes in full load "id": "or|inventory|public|actor", "lastModifiedTime": "2018-07-05T23:36:16.880174+00:00", "resultType": "TableLevelOutput", "state": "COMPLETED", //State of migration for this table "tableName": "public.catalog", //Table name "totalChangesApplied": 0 //Total sync changes that applied after full load }, //Table 2 { "cdcDeleteCounter": 0, "cdcInsertCounter": 50, "cdcUpdateCounter": 0, "dataErrorsCount": 0, "databaseName": "inventory", "fullLoadEndedOn": "2018-07-05T23:36:23.963138+00:00", "fullLoadEstFinishTime": "1970-01-01T00:00:00+00:00", "fullLoadStartedOn": "2018-07-05T23:36:19.302013+00:00", "fullLoadTotalRows": 112, "fullLoadTotalVolumeBytes": 46592, "id": "or|inventory|public|address", "lastModifiedTime": "2018-07-05T23:36:20.308646+00:00", "resultType": "TableLevelOutput", "state": "COMPLETED", "tableName": "public.orders", "totalChangesApplied": 0 } ], // DMS migration task state "state": "Running", //Running => service is still listening to any changes that might come in "taskType": null }
Átállásos migrálási feladat
Amikor a teljes betöltés kész, az adatbázis készen áll az átállásra. Attól függően, mennyire foglalt a forráskiszolgáló a beérkező új tranzakciók miatt, lehet, hogy a teljes betöltés befejeződése után a DMS-feladat még módosításokat alkalmaz.
Annak érdekében, hogy az összes adat szerepeljen, ellenőrizze a forrás- és a céladatbázis sorainak számát. Az állapotkimenetből például a következő adatokat ellenőrizheti:
Database Level
"migrationState": "READY_TO_COMPLETE" => Status of migration task. READY_TO_COMPLETE means database is ready for cutover
"incomingChanges": 0 => Check for a period of 5-10 minutes to ensure no new incoming changes need to be applied to the target server
Table Level (for each table)
"fullLoadTotalRows": 10 => The row count matches the initial row count of the table
"cdcDeleteCounter": 0 => Number of deletes after the full load
"cdcInsertCounter": 50 => Number of inserts after the full load
"cdcUpdateCounter": 0 => Number of updates after the full load
Hajtsa végre az átállásos adatbázis-migrálási feladatot a következő paranccsal:
az dms project task cutover -h
Például a következő parancs kezdeményezi az "Inventory" adatbázis átvágását:
az dms project task cutover --service-name PostgresCLI --project-name PGMigration --resource-group <ResourceGroupName> --name runnowtask --object-name Inventory
Az átállás előrehaladásának monitorozásához futtassa a következő parancsot:
az dms project task show --service-name PostgresCLI --project-name PGMigration --resource-group <ResourceGroupName> --name runnowtask
Amikor az adatbázis migrálási állapota befejeződött, hozza létre újra a sorozatokat (ha van), és csatlakoztassa az alkalmazásokat az Azure Database for PostgreSQL új célpéldányához.
Szolgáltatás, projekt, feladat törlése
Ha valamelyik DMS-feladat, -projekt vagy -szolgáltatás megszakítására vagy törlésére van szükség, hajtsa végre a megszakítást a következő sorrendben:
- Az adott futó feladat megszakítása
- A feladat törlése
- A projekt törlése
- A DMS-szolgáltatás törlése
A futó feladat megszakításához használja a következő parancsot:
az dms project task cancel --service-name PostgresCLI --project-name PGMigration --resource-group <ResourceGroupName> --name runnowtask
A futó feladat törléséhez használja a következő parancsot:
az dms project task delete --service-name PostgresCLI --project-name PGMigration --resource-group <ResourceGroupName> --name runnowtask
Projekt törléséhez használja a következő parancsot:
az dms project delete -n PGMigration -g <ResourceGroupName> --service-name PostgresCLI
A DMS-szolgáltatás törléséhez használja a következő parancsot:
az dms delete -g <ResourceGroupName> -n PostgresCLI