sql >> Databasteknik >  >> NoSQL >> MongoDB

Själv-värd MongoDB

Du är förmodligen värd för din MongoDB hos en pålitlig molntjänstleverantör, säg Atlas, till exempel eftersom du verkligen vill fokusera på din idé och delegera alla subtila nyckelhanteringsområden som nätverk, lagring, åtkomst, etc.

Allt ser bra ut initialt tills din lilla idé börjar förvandlas till ett företag och kostnaden börjar skjuta i höjden. Även om så inte är fallet kommer det här inlägget fortfarande att ge dig en allmän översikt över den tekniska komplexiteten som är involverad (och sparade pengar!) om du skulle migrera till en lösning som är värd för dig själv.

BTW, hur mycket besparingar pratar vi om? Låt oss göra en snabb jämförelse mellan en atlas instans och en självvärd MongoDB på AWS .

Atlas (~166 USD/månad)

0,23 USD/timme baserat på de ovan valda kraven (~ cloud.mongodb.com)



AWS (~36 USD/månad)

0,0416 USD/timme för instansen och ytterligare prissättning baserat på EBS-typ och lagring (~ calculator.aws)

Det är nästan 4,5x besparingar bara när det gäller infrastrukturen!

Nu när du vet de viktigaste varför och fortfarande läser det här inlägget, utan vidare, låt oss dyka in i tekniken.

Kontur

  1. Konfigurera infrastrukturen
  2. Konfigurera MongoDB
  3. Massmigrering
  4. Deltasynkronisering för att överbrygga anslutningsväxelns latens (ej tillämpligt på inaktuella kluster)

Eftersom hela innehållet kan vara lite ansträngande på ett ställe, tänker jag dela upp detta i två relaterade inlägg.

1. Konfigurera infrastrukturen

Jag kommer att nämna nedan guiden för att ställa in en instans som kör RedHat Enterprise Linux 8 på AWS. Detta beror på att MongoDB generellt presterar bättre med xfs-filsystemet. Här är en artikel för att förstå det bättre.

Snurra upp en EC2-instans

Jag har använt en t3.small instans som kommer med 2 vCPU:er och 2 Gb RAM även om du kan välja vilken instans du vill.

Det rekommenderas att din DB ska ha tillgång till minst 1 GB RAM och 2 riktiga kärnor eftersom det direkt påverkar prestandan under cachning och samtidighetsmekanismer som hanteras av standardmotorn WiredTiger . Du kan läsa mer om produktionsanteckningarna relaterade till RAM- och CPU-kraven här .

Konfigurationsöversikt:

  • OS:Redhat Enterprise Linux 8 (x64 Intel-baserat)
  • Förekomsttyp:t3.small
  • Lagring:10 GB (os) + 30 GB (data) + 3 GB (loggar) för EBS dvs 3 separata volymer

Jag antar att du är bekant med att skapa en virtuell dator på AWS.

Tilldela nu en elastisk IP när instansen är i körläge till den och gör sedan helt enkelt en fjärrinloggning till maskinen.

Vi behöver Elastic IP för att ställa in offentligt värdnamn för instansen

$ ssh -i <PEM_FILE> ec2-user@<ELASTIC_IP>

Montera ytterligare volymer

Vi har lagt till ytterligare 2 EBS-volymer förutom Root FS for Data and Logs som ännu inte har monterats (Kommer du ihåg 30Gb och 3Gb? ). Du kan lista volymblocken med,

$ sudo lsblk

De ytterligare volymerna kommer att listas direkt efter rotblocket (se pilarna)

I bilden ovan kan du se att de ytterligare volymerna är namngivna

  1. xvdb (30 Gb utrymme för att lagra data)
  2. xvdc (3 Gb utrymme för att lagra loggar)

Låt oss nu skapa filsystemen i dessa volymer.

$ sudo mkfs.xfs -L mongodata /dev/xvdb
$ sudo mkfs.xfs -L mongologs /dev/xvdc

-L är ett aliasalternativ för att ställa in volymetiketten

Och montera sedan volymerna.

$ sudo mount -t xfs /dev/xvdb /var/lib/mongo
$ sudo mount -t xfs /dev/xvdc /var/log/mongodb

För att dessa ändringar ska återspeglas måste systemet startas om. Därför behöver vi nu också partitionsbeständigheten så att vi inte förlorar databaslagringen vid en oavsiktlig omstart.

Vi kan uppnå detta genom att specificera monteringsreglerna i fstab-filen. Du kan läsa mer om det här.

Låt oss innan dess kopiera UUID för partitionerna ovan (eftersom de är unika och kommer inte att ändras vid en omstart av systemet )

$ sudo blkid

Kopiera UUID:erna för /dev/xvdb och /dev/xvdc . Se ”LABEL” för blockidentifiering

Öppna nu /etc/fstab fil och klistra in konfigurationen i följande format.

UUID=<COPIED_UUID_FOR_DATA> /var/lib/mongo xfs defaults,nofail 0 0
UUID=<COPIED_UUID_FOR_LOGS> /var/log/mongodb xfs defaults,nofail 0 0

Uppdatera värdnamn

Värdnamnet kommer att användas för att identifiera din databasserver på nätverket. Du kan antingen använda ovan tilldelade Elastic IP eller Domännamn (om tillgängligt). Öppna /etc/hostname fil och lägg till posten. För t.ex.

ip-xx.us-east-2.compute.internal **<ELASTIC_IP> <DOMAIN_1> <DOMAIN_2>** ...

Uppdatera processgränserna (valfritt)

Detta krävs valfritt för att kontrollera det maximala antalet acceptabla anslutningar och samtidigt hålla systemet stabilt. Öppna /etc/security/limits.conf fil och lägg till följande poster.

* soft nofile 64000
* hard nofile 64000
* soft nproc 32000
* hard nproc 32000

Nu när alla infrarelaterade förutsättningar är sorterade starta om instansen, och låt oss fortsätta till MongoDB-installationen.

1. Konfigurera MongoDB

Lägg till repokällan

Skapa en fil /etc/yum.repos.d/mongodb-org.4.2.repo och lägg till följande paketförrådsdetaljer.

[mongodb-org-4.2]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.2/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.2.asc

Låt oss nu installera MongoDB.

$ sudo yum -y install mongodb-org

Skapa kataloger och konfigurera behörigheter

MongoDB använder som standard följande sökvägar för att lagra data och de interna loggarna:

/var/lib/mongo → Data
/var/log/mongodb → Loggar

Skapa katalogerna

$ sudo mkdir /var/lib/mongo
$ sudo mkdir /var/log/mongodb

Ändra användar- och gruppbehörigheter

$ sudo chown mongod:mongod /var/lib/mongo
$ sudo chown mongod:mongod /var/log/mongod

Skapa en administratörsanvändare

mongod-demonen/tjänsten måste köras först innan vi fortsätter att skapa en användare. Låt oss använda standardkonfigurationen (lagrad i /etc/mongod.conf ) för nu och starta demonprocessen.

$ sudo -u mongod mongod -f /etc/mongod.conf

Ovanstående kommando kommer att starta mongod-demonen i gaffelläge (standard).

Nu, låt oss logga in på servern och skapa vår första administratörsanvändare.

Öppna ett mongoskal

$ mongo

Använd "admin"-databasen för att skapa root-admin

> use admin

Skapa administratörsanvändaren

> db.createUser({user: "admin", pwd: "password", roles: [{role: "root", db: "admin"}]})

Skapa en vanlig användare

> db.createUser({user: "normal_user", pwd: "password", roles: [{role: "readWriteAnyDatabase", db: "admin"}]})

Stäng av servern tills vidare. Vi startar om igen med den ändrade konfigurationen

> db.shutDownServer()

Ställa in autentisering

Här aktiverar vi databasautentiseringen och ändrar bindningsadressen för vår server så att den är tillgänglig i det offentliga området. Öppna /etc/mongod.conf och gör ändringarna nedan.

# network interfaces
net:
  port: 27017
  bindIp: 0.0.0.0 # accessible on the network address
security:
  authorization: enabled # creds will be required for making db operations

Spara konfigurationen och starta om servern.

$ sudo -u mongod mongod -f /etc/mongod.conf

Testa inloggning

Du kan verifiera om autentiseringsuppgifterna fungerar med,

$ mongo -u admin -p password

Det är det om den initiala installationen! Håll utkik efter mitt nästa relaterade inlägg om den detaljerade migreringsprocessen och tips om hur du håller DB-produktionsklar.

P.S. Tack till Piyush Kumar för att du hjälpte till att kurera detta inlägg!


  1. MapReducera blandning och sortering i Hadoop

  2. Hur definierar jag metoder i en Mongoose-modell?

  3. Mongodb och MAMP

  4. Returnera hgetall lista från redis i nodejs