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
Az Azure Database Migration Service 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 DVD-kölcsönzési mintaadatbázist a 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.
Feljegyzés
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.
Vegye figyelembe azt is, hogy a cél Azure Database for PostgreSQL-verziónak egyenlőnek vagy újabbnak 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 az Azure Database for PostgreSQL-ben , vagy hozzon létre egy Azure Database for PostgreSQL - Rugalmas skálázású (Citus) kiszolgálót.
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.
Feljegyzés
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, és engedélyezze, hogy az Azure Database Migration Service elérhesse a PostgreSQL-kiszolgáló forrását, amely alapértelmezés szerint az 5432-es TCP-port.
Ha tűzfalkészüléket használ a forrásadatbázis(ok) előtt, előfordulhat, hogy tűzfalszabályokat kell hozzáadnia annak engedélyezéséhez, hogy az Azure Database Migration Service a migrálás céljából hozzáférhessen a forrásadatbázis(ok)hoz.
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 = [a tárolóhelyek száma], öt tárolóhely beállításának ajánlása
- max_wal_senders = [párhuzamos feladatok száma] – a max_wal_senders paraméter megadja a párhuzamosan futtatható feladatok számát, az ajánlott beállítás 10 feladat
A mintaséma migrálása
Ahhoz, hogy az összes adatbázis-objektumot táblasémaként, indexekként és tárolt eljárásokként egészíthessük ki, ki kell bontanunk a forrásadatbázis sémáját, és alkalmaznunk 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.
Az adatbázisok csatlakoztatásával és létrehozásával kapcsolatos részletekért tekintse meg az Azure Database for PostgreSQL-kiszolgáló létrehozása az Azure Portalon vagy Az Azure Database for PostgreSQL - Rugalmas skálázású (Citus) kiszolgáló létrehozása az Azure Portalon című cikket.
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. Emiatt 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
A dms szinkronizálási bővítmény telepítéséhez:
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
A 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 97181df2-909d-420b-ab93-1bff15acb6b7
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/{vnet subscription id}/resourceGroups/{vnet resource group}/providers/Microsoft.Network/virtualNetworks/{vnet name}/subnets/{subnet name} –tags tagName1=tagValue1 tagWithNoValue
Például a következő parancs szolgáltatást hoz létre az alábbi helyen:
- Hely: az USA 2. keleti régiója
- Előfizetés: 97181df2-909d-420b-ab93-1bff15acb6b7
- Erőforráscsoport neve: PostgresDemo
- DMS-szolgáltatás neve: PostgresCLI
az dms create -l eastus2 -g PostgresDemo -n PostgresCLI --subnet /subscriptions/97181df2-909d-420b-ab93-1bff15acb6b7/resourceGroups/ERNetwork/providers/Microsoft.Network/virtualNetworks/AzureDMS-CORP-USC-VNET-5044/subnets/Subnet-1 --sku-name Premium_4vCores
A DMS-szolgáltatás példányának létrehozása nagyjából 10–12 percet vesz igénybe.
A DMS-ügynök IP-címének azonosításához, így a Postgres pg_hba.conf fájlba való felvételéhez futtassa a következő parancsot:
az network nic list -g <ResourceGroupName>--query '[].ipConfigurations | [].privateIpAddress'
Példa:
az network nic list -g PostgresDemo --query '[].ipConfigurations | [].privateIpAddress'
A következő címhez hasonló eredményt kell kapnia:
[ "172.16.136.18" ]
Vegye fel a DMS-ügynök IP-címét a Postgres pg_hba.conf fájlba.
A DMS kiépítése után jegyezze fel a DMS IP-címét.
Vegye fel az IP-címet a pg_hba.conf fájlba a forráson a következő bejegyzéshez hasonló módon:
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: az USA nyugati középső régiója
- Erőforráscsoport neve: PostgresDemo
- Szolgáltatás neve: PostgresCLI
- Projekt neve: PGMigration
- Forrásplatform: PostgreSQL
- Célplatform: AzureDbForPostgreSql
az dms project create -l westcentralus -n PGMigration -g PostgresDemo --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ási JSON-objektum formátuma az alábbi:
[ { "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ömb, 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ömb, másolja ki 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. A táblák listájának létrehozására szolgáló minta lekérdezést az alábbi példában tekintheti meg. 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. A fenti SQL-lekérdezés kimenetével feltöltheti a "selectedTables" tömböt. Vegye figyelembe, hogy 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 PostgresDemo --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 beküldött egy migrálási feladatot.
A feladat előrehaladásának megjelenítéséhez futtassa a következő parancsot:
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 PostgresDemo --name runnowtask
A tevékenység 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 PostgresDemo --name runnowtask --expand output
JMESPath lekérdezési formátumot is használhat a migrationState kibontásához a kibontott kimenetből:
az dms project task show --service-name PostgresCLI --project-name PGMigration --resource-group PostgresDemo --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 az alábbi 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
A következő parancs például elindítja az "Inventory" adatbázis átvágását:
az dms project task cutover --service-name PostgresCLI --project-name PGMigration --resource-group PostgresDemo --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 PostgresDemo --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 PostgresDemo --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 PostgresDemo --name runnowtask
Projekt törléséhez használja a következő parancsot:
az dms project delete -n PGMigration -g PostgresDemo --service-name PostgresCLI
A DMS-szolgáltatás törléséhez használja a következő parancsot:
az dms delete -g ProgresDemo -n PostgresCLI
Következő lépések
- Az Azure Database for PostgreSQL-be történő online migrálás végrehajtásakor felmerülő ismert hibákhoz és korlátozásokhoz kapcsolódó információk: Az Azure Database for PostgreSQL online migrálásával kapcsolatos ismert hibák és kerülő megoldások.
- Az Azure Database Migration Service szolgáltatással kapcsolatos tudnivalók: Mi az Azure Database Migration Service?.
- Az Azure Database for PostgreSQL-ről a Mi az Azure Database for PostgreSQL?