sql >> Database teknologi >  >> NoSQL >> MongoDB

Selvvært MongoDB

Du hoster sandsynligvis din MongoDB hos en pålidelig cloud-tjenesteudbyder, f.eks. Atlas, fordi du virkelig ønsker at fokusere på din idé og uddelegere alle de subtile nøgleadministrationsområder såsom netværk, lagring, adgang osv.

Det hele ser godt ud i starten, indtil din lille idé begynder at blive til en forretning, og omkostningerne begynder at skyde i vejret. Selvom det ikke er tilfældet, vil dette indlæg stadig give dig et generelt overblik over de involverede tekniske kompleksiteter (og sparede penge!), hvis du skulle migrere til en selv-hostet løsning.

BTW, hvor mange besparelser taler vi om? Lad os lave en hurtig sammenligning mellem et atlas instans og en selv-hostet MongoDB på AWS .

Atlas (~166 USD/måned)

$0,23/time baseret på de ovenfor valgte krav (~ cloud.mongodb.com)



AWS (~36 USD/måned)

0,0416 USD/time for forekomsten og yderligere priser baseret på EBS-typen og lagring (~ calculator.aws)

Det er næsten 4,5x besparelse bare i forhold til infrastrukturen!

Nu hvor du kender de vigtigste årsager og stadig læser dette indlæg, lad os uden videre dykke ned i teknologien.

Kontur

  1. Opsætning af infrastrukturen
  2. Opsætning af MongoDB
  3. Massemigrering
  4. Delta-synkronisering for at bygge bro mellem forbindelsesswitch-latenstiden (gælder ikke for forældede klynger)

Da hele indholdet kan være lidt udmattende ét sted, vil jeg opdele dette i 2 relaterede indlæg.

1. Opsætning af infrastrukturen

Jeg vil nedenfor nævne vejledningen til opsætning af en instans, der kører RedHat Enterprise Linux 8 på AWS. Dette skyldes, at MongoDB generelt klarer sig bedre med xfs-filsystemet. Her er en artikel for at forstå det bedre.

Spind en EC2-instans op

Jeg har brugt en t3.small instans, der kommer med 2 vCPU'er og 2 Gb RAM selvom du kan vælge en hvilken som helst instans efter eget valg.

Det anbefales, at din DB skal have adgang til mindst 1 GB RAM og 2 rigtige kerner da det direkte påvirker ydeevnen under cachelagring og samtidighedsmekanismer som håndteret af standardmotoren WiredTiger . Du kan læse mere om produktionsnoterne relateret til RAM- og CPU-kravene her .

Konfigurationsoversigt:

  • OS:Redhat Enterprise Linux 8 (x64 intel-baseret)
  • Forekomsttype:t3.small
  • Lagerplads:10 GB (os) + 30 GB (data) + 3 GB (logfiler) af EBS dvs. 3 separate bind

Jeg går ud fra, at du er bekendt med at oprette en VM på AWS.

Nu, når forekomsten er i kørende tilstand, skal du tildele en elastisk IP til den, og lav derefter et fjernlogin på maskinen.

Vi skal bruge den elastiske IP for at opsætte offentligt værtsnavn for forekomsten

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

Monter yderligere bind

Vi har tilføjet 2 yderligere EBS-volumener ud over Root FS for Data og Logs, som endnu ikke er monteret (Husker du 30Gb og 3Gb? ). Du kan liste lydstyrkeblokkene ved hjælp af,

$ sudo lsblk

De ekstra volumener vil blive vist lige efter rodblokken (se pilene)

På billedet ovenfor kan du se, at de ekstra bind er navngivet

  1. xvdb (30 Gb plads til at gemme data)
  2. xvdc (3 Gb plads til at gemme logfiler)

Lad os nu oprette filsystemerne i disse bind.

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

-L er en aliasindstilling til indstilling af volumenetiketten

Og monter derefter volumener.

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

For at disse ændringer skal afspejle sig, skal systemet genstartes. Derfor har vi nu også brug for partitionens persistens, så vi i tilfælde af en utilsigtet genstart ikke mister databaselageret.

Vi kan opnå dette ved at specificere monteringsreglerne i fstab-filen. Du kan læse mere om det her.

Før det, lad os kopiere UUID'et for ovenstående partitioner (fordi de er unikke og vil ikke ændre sig ved en systemgenstart )

$ sudo blkid

Kopier de UUID'er, der er angivet for /dev/xvdb og /dev/xvdc . Se "LABEL" til blokidentifikation

Åbn nu /etc/fstab fil og indsæt konfigurationen i følgende 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

Opdater værtsnavn

Værtsnavnet vil blive brugt til at identificere din databaseserver på netværket. Du kan enten bruge den ovenfor tildelte elastiske IP eller Domænenavn (hvis tilgængeligt). Åbn /etc/hostname fil og tilføj posten. For f.eks.

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

Opdater procesgrænserne (valgfrit)

Dette er valgfrit påkrævet for at kontrollere det maksimale antal acceptable forbindelser og samtidig holde systemet stabilt. Åbn /etc/security/limits.conf fil og tilføj følgende poster.

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

Nu hvor alle de infra-relaterede forudsætninger er sorteret, genstart instansen, og lad os fortsætte til MongoDB-installationen.

1. Opsætning af MongoDB

Tilføj Repo-kilden

Opret en fil /etc/yum.repos.d/mongodb-org.4.2.repo og tilføj følgende pakkeopbevaringsdetaljer.

[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

Lad os nu installere MongoDB.

$ sudo yum -y install mongodb-org

Opret mapper og opsætningstilladelser

MongoDB bruger som standard følgende stier til at gemme dataene og de interne logfiler:

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

Opret mapperne

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

Skift bruger- og gruppetilladelser

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

Opret en administratorbruger

mongod-dæmonen/tjenesten skal køre først, før vi fortsætter med at oprette en bruger. Lad os bruge standardkonfigurationen (gemt i /etc/mongod.conf ) for nu og start dæmonprocessen.

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

Ovenstående kommando vil starte mongod-dæmonen i gaffeltilstand (standard).

Lad os nu logge ind på serveren og oprette vores første administratorbruger.

Åbn en mongo-skal

$ mongo

Brug "admin"-databasen til at oprette root-admin

> use admin

Opret administratorbrugeren

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

Opret en almindelig bruger

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

Luk serveren for nu. Vi genstarter igen med den ændrede konfiguration

> db.shutDownServer()

Opsætning af godkendelse

Her aktiverer vi databasegodkendelsen og ændrer bindingsadressen til vores server, så den er tilgængelig i det offentlige domæne. Åbn /etc/mongod.conf og foretag nedenstående ændringer.

# 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

Gem konfigurationen og genstart serveren.

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

Test login

Du kan kontrollere, om legitimationsoplysningerne fungerer ved hjælp af,

$ mongo -u admin -p password

Det er det om den indledende opsætning! Hold øje med mit næste relaterede indlæg om den detaljerede migreringsproces og tips til at holde DB-produktionsklar.

P.S. Tak til Piyush Kumar for at hjælpe med at kurere dette indlæg!


  1. Hvordan kontrollerer jeg, om et indeks bliver brugt

  2. Er det muligt at have en Linux VFS-cache med et FUSE-filsystem?

  3. Hvordan opretter man et indlejret indeks i MongoDB?

  4. Når jeg starter blomst, får jeg følgende:dbm.error:db-typen er dbm.gnu, men modulet er ikke tilgængeligt