sql >> Database >  >> NoSQL >> MongoDB

MongoDB migreren naar DynamoDB, deel 1

De AWS Database Migration Service (DMS) is ontworpen om databases op AWS betrouwbaar te migreren, zonder downtime. Aanvankelijk ondersteunde DMS alleen relationele databases, waaronder AWS Redshift. In april 2017 heeft DMS twee NoSQL-databases toegevoegd:MongoDB als brondatabase en AWS DynamoDB als doeldatabase. In deze tutorial van twee artikelen bespreken we het migreren van een MongoDB-database naar DynamoDB op DMS. Een van de vereisten om MongoDB als DMS-bron te gebruiken, is dat MongoDB moet worden uitgevoerd als een replicaset, die we zullen maken met behulp van een Docker-image in de eerste van deze twee artikelen.

Dit artikel heeft de volgende secties:

  • De omgeving instellen
  • Een IAM-gebruiker maken voor databasemigratieservice
  • Een coderingssleutel maken
  • Een MongoDB-database maken
  • Een DynamoDB-tabel maken
  • Conclusie

De omgeving instellen

De enige vereiste is een AWS-account, dat kan worden aangemaakt op https://aws.amazon.com/resources/create-account/. We zullen zowel de bron- als de doeldatabase op AWS draaien. Voor de MongoDB-bron zullen we Docker gebruiken, waarvoor we een EC2-instantie zullen lanceren met AMI Container Linux door CoreOS (Stable) geselecteerd uit de AWS Marketplace, zoals weergegeven in afbeelding 1. CoreOS is gekozen als het Linux-platform omdat het Docker heeft vooraf geïnstalleerd.


Figuur 1: De CoreOS AMI selecteren om een ​​EC2-instantie te starten

De beveiligingsgroep die door de CoreOS EC2-instantie wordt gebruikt, moet regels voor inkomend/uitgaand verkeer hebben ingesteld om al het verkeer te accepteren. Dit impliceert verkeer van alle protocollen op alle poorten tussen alle bronnen en bestemmingen (0.0.0.0/0,::/0 ).

Een IAM-gebruiker maken voor databasemigratieservice

In deze sectie zullen we een IAM-gebruiker maken om toegang te krijgen tot de verschillende AWS-services die worden gebruikt bij het maken van een migratie, waaronder DMS, EC2, DynamoDB, KMS, IAM en CloudWatch. Eerst moeten we een beleid maken met de vereiste machtigingen. Vervolgens zullen we een gebruiker aanmaken en het beleid aan de gebruiker toewijzen. Als u een IAM-beleid wilt maken, selecteert u Beleid in de IAM-console en klik op Beleid maken . Selecteer in Beleid maken de optie Uw eigen beleid maken . Geef in Beleid bekijken een beleidsnaam op (DMS als voorbeeld) en kopieer en plak het volgende beleidsdocument in het veld Beleidsdocument.

{ "Versie":"2012-10-17", "Statement":[ { "Effect":"Toestaan", "Actie":"dms:*", "Bron":"*" }, { "Effect":"Toestaan", "Actie":"dynamodb:*", "Bron":"*" }, { "Effect":"Toestaan", "Actie":"kms:*", "Bron":"*" }, { "Effect":"Toestaan", "Actie":"iam:*", "Bron":"*" }, { "Effect":"Toestaan", "Actie":"ec2:* ", "Bron":"*" }, { "Effect":"Toestaan", "Actie":"cloudwatch:*", "Bron":"*" }, { "Effect":"Toestaan", "Actie ":"aws-marketplace:*", "Resource":"*" }, { "Effect":"Toestaan", "Action":"logs:*", "Resource":"*" }, { "Effect ":"Allow", "Action":[ "redshift:Describe*", "redshift:ModifyClusterIamRoles" ], "Resource":"*" } ]}

Klik op Beleid valideren . Als de uitvoer 'Dit beleid is geldig' is, klikt u op Beleid maken , zoals weergegeven in afbeelding 2.


Figuur 2: Een IAM-beleid maken

Er wordt een nieuw IAM-beleid gemaakt, zoals weergegeven in afbeelding 3.


Figuur 3: IAM-beleid “DMS”

Maak vervolgens een IAM-gebruiker aan. Selecteer Gebruikers en klik op Gebruiker toevoegen , zoals weergegeven in afbeelding 4.


Figuur 4: Gebruiker toevoegen

In Gebruiker toevoegen , specificeer een Gebruikersnaam , zoals weergegeven in Afbeelding 5. Voor Toegangstype , selecteer Programmatische toegang en AWS Management Console-toegang .


Figuur 5: Gebruiker toevoegen

Voor Console-wachtwoord , selecteer Aangepast wachtwoord en geef een wachtwoord op (zie afbeelding 6). Klik op Volgende.


Figuur 6: Selecteer AWS-toegangstype>Volgende

Klik in Machtigingen instellen op Bestaand beleid rechtstreeks bijvoegen , zoals weergegeven in afbeelding 7.


Figuur 7: Machtigingen instellen

Selecteer het eerder gemaakte DMS-beleid en klik op Volgende, zoals weergegeven in Afbeelding 8.


Figuur 8: DMS-beleid selecteren

Klik in Review op Gebruiker maken , zoals weergegeven in afbeelding 9.


Figuur 9: Review>Gebruiker maken

Er wordt een IAM-gebruiker aangemaakt. Kopieer de URL die wordt weergegeven in Afbeelding 10 om u aan te melden bij AWS Management Console zoals de gebruiker deze heeft gemaakt.


Figuur 10: IAM-gebruikers-URL

Een nieuwe gebruiker wordt vermeld in Gebruikers (zie afbeelding 11).


Figuur 11: IAM-gebruikers-URL

Een coderingssleutel maken

Maak vervolgens een coderingssleutel die moet worden gebruikt voor de DMS-migratie. Log in als de IAM-gebruiker die is gemaakt en gebruik de URL die is gekopieerd in Afbeelding 10. Selecteer de IAM service in de AWS-beheerconsole en selecteer Encryption Keys . Klik op Sleutel maken om een ​​wizard te starten om een ​​coderingssleutel te maken. Gebruik de wizard om een ​​coderingssleutel te maken (dms ), zoals weergegeven in Afbeelding 12.


Figuur 12: Nieuwe coderingssleutel

Een MongoDB-database maken

In deze sectie zullen we een MongoDB-database maken die we vervolgens naar DynamoDB zullen migreren. We zullen Docker gebruiken om een ​​MongoDB-instantie uit te voeren, waarvoor een CoreOS-instantie is gelanceerd. Om in te loggen op een CoreOS-instantie, verkrijgt u het openbare IP-adres van de CoreOS-instantie, zoals weergegeven in Afbeelding 13.


Figuur 13: Openbaar IP-adres van CoreOS-instantie

SSH log in op de CoreOS-instantie met behulp van het sleutelpaar en het openbare IP-adres.

ssh -i "docker.pem" [email protected]

De opdrachtregelprompt van de CoreOS-instantie wordt weergegeven, zoals weergegeven in Afbeelding 14.


Figuur 14: CoreOS-instantie

Voer vervolgens de volgende opdracht uit om een ​​Docker-container voor MongoDB te starten met behulp van de MongoDB-afbeelding "mongo". De Docker-containerpoort 27017 wordt op de host ook weergegeven als 27017 met behulp van de -p optie om docker uit te voeren . De containernaam is ingesteld op "mongo1" en het commando mongod --replSet repl0 wordt uitgevoerd in de container die is gemaakt om een ​​MongoDB-replicaset met de naam "repl0" te starten. Zoals eerder vermeld, is om MongoDB als DMS-bron te gebruiken een MongoDB-replicaset vereist en kan een zelfstandige MongoDB niet als bron worden gebruikt.

docker run -p 27017:27017 mongo mongod --replSet repl0

De Docker-afbeelding mongo wordt getrokken en zoals aangegeven door het bericht "MongoDB start" in Afbeelding 15 begint MongoDB te starten.


Figuur 15: Docker Image docker downloaden

Een MongoDB-instantie wordt gestart op poort 27017 (zie afbeelding 16). Er is nog geen replicaset gemaakt en we zullen hierna een replicaset initialiseren.


Figuur 16: Mongo-instantie gestart

Een Docker-container wordt weergegeven met de docker ps commando, zoals weergegeven in Afbeelding 17.


Figuur 17: Docker-container voor Mongo weergeven

Gebruik de volgende opdracht om een ​​opdrachtshell voor de Mongo-opdrachtregelinterface (CLI) te starten.

docker exec -it mongo1 mongo

MongoDB shell-versie 3.4.4 wordt verbonden via URL mongodb://127.0.0.1:27017 , zoals weergegeven in Afbeelding 18.


Figuur 18: MongoDB Shell aansluiten

De Mongo CLI-opdrachtprompt wordt weergegeven, zoals weergegeven in Afbeelding 19.


Figuur 19: Mongo Shell-opdrachtprompt

Stel de MongoDB-database in om te gebruiken als test met de gebruikstest commando, zoals weergegeven in Afbeelding 20.


Figuur 20: Database instellen als test

Vervolgens zullen we een replicaset initialiseren waarvoor we de replicasetleden of -instanties moeten definiëren. Verkrijg het privé-IP van de CoreOS EC2-instantie waarop de Docker-container voor MongoDB wordt uitgevoerd (zie afbeelding 21).


Figuur 21: Privé IP van CoreOS-instantie

Geef in de Mongo CLI de volgende configuratie op voor de configuratie van de replicaset.

config ={ "_id" :"repl0", "leden" :[ { "_id" :0, "host" :"172.30.2.20:27017" } ]}

De configuratie van de replicaset wordt ingesteld, zoals weergegeven in Afbeelding 22.


Figuur 22: Configuratie Replica set instellen

Start de configuratie van de replicaset met behulp van de configuratie.

rs.initiate(config)

De replicaset wordt geïnitialiseerd, zoals weergegeven in Afbeelding 23.


Figuur 23: Replica-set geïnitialiseerd

Voer de configuratie van de replicaset uit.

rs.conf()

De repl0:PRIMARY opdrachtprompt geeft aan dat de replicaset is geïnitialiseerd en dat het primaire lid van de replicaset is ingesteld om Mongo CLI-opdrachten uit te voeren. De Primary is het enige lid in een replicaset voor schrijfbewerkingen. Maak een MongoDB-verzameling met de naam wlslog met de db.createCollection() commando.

db.createCollection("wlslog")

Er wordt een MongoDB-verzameling gemaakt, zoals weergegeven in Afbeelding 24. Een MongoDB-verzameling is een verzameling documenten. De documenten zijn in BSON (binair JSON) formaat.


Figuur 24: Collectie maken

Voer de volgende instructies uit die JSON-documenten definiëren in de Mongo CLI.

doc1 ={"timestamp":"Apr 8, 2014 19:06:16 PM PDT", "category":"Notice","type":"WebLogicServer", "servername":"AdminServer","code ":"BEA-000365", "msg":"Serverstatus gewijzigd in STANDBY"}doc2 ={"timestamp":"Apr 8, 2014 19:06:17 PM PDT", "category":"Notice"," type":"WebLogicServer", "servername":"AdminServer","code":"BEA-000365", "msg":"Serverstatus gewijzigd in STARTING"}doc3 ={"timestamp":"8 april 2014 7 :06:18 PM PDT", "category":"Notice","type":"WebLogicServer", "servername":"AdminServer","code":"BEA-000365", "msg":"Serverstatus gewijzigd to ADMIN"}doc4 ={"timestamp":"8 april 2014 19:06:19 PDT", "category":"Notice","type":"WebLogicServer", "servername":"AdminServer"," code":"BEA-000365", "msg":"Serverstatus gewijzigd in RESUMING"}doc5 ={"timestamp":"Apr 8, 2014 19:06:20 PM PDT", "category":"Notice", "type":"WebLogicServer", "servername":"AdminServer","code":"BEA-000331", "msg":"WebLogic Admin Server gestart"}doc6 ={"timestamp":"8 april 2014 7 :06:21 PDT", "category":"Notice","type":"WebLogicServer", "servername":"AdminServer","code":"BEA-000365", "msg":"Serverstatus gewijzigd in RUNNING"}doc7 ={" timestamp":"8 april 2014 19:06:22 PDT", "category":"Notice","type":"WebLogicServer", "servername":"AdminServer","code":"BEA-000360" , "msg":"Server gestart in RUNNING-modus"}

De variabelen van de JSON-documenten worden gedefinieerd, zoals weergegeven in Afbeelding 25.


Figuur 25: Variabelen definiëren voor JSON-documenten

Voeg de JSON-documenten toe aan de wlslog collectie.

db.wlslog.insert([doc1,doc2,doc3,doc4,doc5,doc6,doc7])

Zoals aangegeven door de uitvoer in Afbeelding 26, worden zeven documenten toegevoegd aan de wlslog collectie.


Figuur 26: JSON-documenten toegevoegd aan verzameling

Maak een lijst van de documenten die zijn toegevoegd aan de wlslog collectie.

db.wlslog.find()

De zeven toegevoegde documenten worden weergegeven, zoals weergegeven in Afbeelding 27.


Figuur 27: Documenten zoeken of ophalen uit een Mongo-verzameling

Een DynamoDB-tabel maken

Nadat we een MongoDB-replicaset voor de DMS-bron hebben gemaakt, zullen we vervolgens een DynamoDB-tabel voor het DMS-doel maken. Log in als de IAM-gebruiker (dvohra) die eerder is aangemaakt en waaraan een beleid is toegewezen. Selecteer de DynamoDB-service in de AW Management Console en selecteer Tabel maken , zoals weergegeven in Afbeelding 28.


Figuur 28: DynamoDB>Maak tabel

Specificeer in de Create DynamoDB-tabel een Tabelnaam en specificeer de Primaire sleutel , wat ook de partitiesleutel is, als _id , zoals weergegeven in Afbeelding 29. Hoewel de tabelnaam willekeurig is en is ingesteld op wlslog , wat hetzelfde is als de MongoDB-verzameling die is gemaakt in de MongoDB-replicaset, moet de primaire sleutel worden ingesteld op _id omdat elk MongoDB-document het primaire sleutelveld _id . krijgt toegewezen .


Figuur 29: Een DynamoDB-tabel maken

De DynamoDB-tabel wlslog wordt gemaakt, zoals weergegeven in Afbeelding 30.


Figuur 30: DynamoDB-tabel wlslog Gemaakt

Klik op de DynamoDB-tabel wlslog in het Dashboard en de tabeldetails, inclusief de primaire sleutel _id , worden weergegeven (zie Afbeelding 31).


Figuur 31: DynamoDB-tabel wlslog Detail

Wanneer een DMS-migratie is gemaakt, wordt een IAM-rol dms-vpc-role met beheerd beleid AmazonDMSVPCManagementRole wordt automatisch aangemaakt. Om de DMS-service toegang te geven tot de DynamoDB-service, moeten we de servicetoegangsrol dms-vpc-role wijzigen om het volgende beleidsdocument toe te voegen, dat toegang biedt tot DynamoDB vanuit DMS.

{ "Versie":"2012-10-17", "Statement":[{ "Effect":"Toestaan", "Actie":[ "dynamodb:*" ], "Bron":["*" ] }]}

Gebruik dezelfde procedure die wordt gebruikt voor het maken van het DMS-beleid, maak een DynamoDB-beleid en specificeer het voorgaande beleidsdocument in het veld Beleidsdocument, zoals weergegeven in Afbeelding 32. Klik op Beleid maken .


Figuur 32: Beleid bekijken>Beleid maken

Het DynamoDB-beleid wordt gemaakt, zoals weergegeven in Afbeelding 33.


Figuur 33: IAM-beleid DynamoDB gemaakt

De dms-vpc-role waaraan het DynamoDB-beleid moet worden toegevoegd, wordt weergegeven in Afbeelding 34.


Figuur 34: DMS VPC-rol

Klik op dms-vpc-role en voeg het DynamoDB-beleid toe met Attach Policy. De AmazonDMSVPCManagementRole- en DynamoDB-beleidsregels moeten worden vermeld als Managed Policies, zoals weergegeven in Afbeelding 35.


Figuur 35: Machtigingenbeleid in de DMS VPC-rol

Conclusie

In dit artikel hebben we het gebruik van AWS Database Migration Service (DMS) geïntroduceerd voor het migreren van MongoDB naar Amazon DynamoDB. We zijn begonnen met het maken van een MongoDB-replicaset als de te migreren gegevensbron en hebben ook een DynamoDB-tabel als bestemmingstabel gemaakt. In een volgend artikel bespreken we het maken en uitvoeren van een DMS-migratie om gegevens te migreren.


  1. Redis-transacties en langlopende Lua-scripts

  2. Redis massa-insertie

  3. phpredis-extensie werkt niet, kan 'redis.so' niet laden

  4. MongoDB $trim