sql >> Databáze >  >> NoSQL >> MongoDB

Samoobslužný MongoDB

Pravděpodobně hostujete svůj MongoDB u spolehlivého poskytovatele cloudových služeb, například Atlas, protože se opravdu chcete zaměřit na svůj nápad a delegovat všechny jemné klíčové oblasti správy, jako je síť, úložiště, přístup atd.

Zpočátku to vypadá dobře, dokud se váš malý nápad nezačne proměňovat v podnikání a náklady nezačnou raketově stoupat. I když tomu tak není, tento příspěvek vám stále poskytne obecný přehled o technických složitostech (a ušetřených penězích!), pokud byste přešli na řešení s vlastním hostitelem.

BTW, o jakých úsporách se bavíme? Udělejme rychlé srovnání mezi atlasem instance a samostatně hostovaný MongoDB na AWS .

Atlas (~166 $ měsíčně)

0,23 $/hodinu na základě výše vybraných požadavků (~ cloud.mongodb.com)



AWS (~36 $ měsíčně)

0,0416 $/hodinu za instanci a další ceny podle typu EBS a úložiště (~ calculator.aws)

Je to téměř 4,5násobná úspora jen z hlediska infrastruktury!

Nyní, když znáte hlavní důvody a stále čtete tento příspěvek, bez dalších okolků, pojďme se ponořit do technologie.

Osnova

  1. Nastavení infrastruktury
  2. Nastavení MongoDB
  3. Hromadná migrace
  4. Delta-sync k překlenutí latence přepnutí připojení (nevztahuje se na zastaralé clustery)

Protože celý obsah může být na jednom místě trochu vyčerpávající, rozdělím to na 2 související příspěvky.

1. Nastavení infrastruktury

Níže zmíním příručku pro nastavení instance se systémem RedHat Enterprise Linux 8 na AWS. Je to proto, že MongoDB obecně funguje lépe se souborovým systémem xfs. Zde je článek, abyste tomu lépe porozuměli.

Vytvořte instanci EC2

Použil jsem t3.small instance, která je dodávána se 2 vCPU a 2 GB RAM i když si můžete vybrat libovolnou instanci podle svého výběru.

Doporučuje se, aby vaše DB měla přístup k alespoň 1 GB RAM a 2 skutečná jádra protože to přímo ovlivňuje výkon během ukládání do mezipaměti a mechanismy souběžnosti, jak je zpracovává výchozí modul WiredTiger . Více o výrobních poznámkách souvisejících s požadavky RAM a CPU si můžete přečíst zde .

Přehled konfigurace:

  • OS:Redhat Enterprise Linux 8 (x64 na platformě Intel)
  • Typ instance:t3.small
  • Úložiště:10 GB (os) + 30 GB (data) + 3 GB (protokoly) EBS tj. 3 samostatné svazky

Předpokládám, že jste obeznámeni s vytvářením virtuálního počítače na AWS.

Nyní, jakmile je instance ve stavu spuštění, přiřaďte elastickou IP k němu a poté jednoduše proveďte vzdálené přihlášení do stroje.

Budeme potřebovat Elastic IP pro nastavení veřejného názvu hostitele pro instanci

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

Připojit další svazky

Přidali jsme 2 další svazky EBS jiné než Root FS pro data a protokoly, které ještě nebyly připojeny (Pamatujete si na 30Gb a 3Gb? ). Bloky svazku můžete vypsat pomocí,

$ sudo lsblk

Další svazky budou uvedeny hned za kořenovým blokem (viz šipky)

Na obrázku výše můžete vidět, že další svazky jsou pojmenovány

  1. xvdb (30 GB prostoru pro ukládání dat)
  2. xvdc (3Gb prostor pro ukládání protokolů)

Nyní vytvoříme souborové systémy v těchto svazcích.

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

-L je alias možnost pro nastavení označení hlasitosti

A pak připojte svazky.

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

Aby se tyto změny projevily, je nutné restartovat systém. Proto nyní potřebujeme také persistenci oddílu, abychom v případě neúmyslného restartu nepřišli o úložiště databáze.

Toho můžeme dosáhnout zadáním pravidel pro připojení v souboru fstab. Více si o tom můžete přečíst zde.

Předtím zkopírujeme UUID výše uvedených oddílů (protože jsou jedinečné a po restartu systému se nezmění )

$ sudo blkid

Zkopírujte UUID uvedená pro /dev/xvdb a /dev/xvdc . Viz “LABEL” pro identifikaci bloku

Nyní otevřete /etc/fstab soubor a vložte konfiguraci v následujícím formátu.

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

Aktualizovat název hostitele

Název hostitele bude použit k identifikaci vašeho databázového serveru v síti. Můžete buď použít výše přiřazenou elastickou IP nebo Název domény (je-li k dispozici). Otevřete /etc/hostname soubor a připojte záznam. Například

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

Aktualizace procesních limitů (volitelné)

To je volitelně vyžadováno pro kontrolu maximálního počtu přijatelných připojení při zachování stability systému. Otevřete /etc/security/limits.conf soubor a přidejte následující položky.

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

Nyní, když jsou vytříděny všechny předpoklady související s infra, restartujte instance a přejdeme k instalaci MongoDB.

1. Nastavení MongoDB

Přidat zdroj úložiště

Vytvořte soubor /etc/yum.repos.d/mongodb-org.4.2.repo a přidejte následující podrobnosti o úložišti balíčků.

[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

Nyní nainstalujme MongoDB.

$ sudo yum -y install mongodb-org

Vytváření adresářů a nastavení oprávnění

MongoDB standardně používá k ukládání dat a interních protokolů následující cesty:

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

Vytvořte adresáře

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

Změnit uživatelská a skupinová oprávnění

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

Vytvořit uživatele s oprávněním správce

Démon/služba mongod musí být nejprve spuštěn, než přistoupíme k vytvoření uživatele. Použijme výchozí konfiguraci (uloženou v /etc/mongod.conf ) a spusťte proces démona.

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

Výše uvedený příkaz spustí démona mongod v režimu rozvětvení (výchozí).

Nyní se přihlaste k serveru a vytvořte našeho prvního administrátora.

Otevřete mongo shell

$ mongo

K vytvoření root-admin použijte databázi „admin“

> use admin

Vytvořte uživatele s oprávněním správce

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

Vytvořte běžného uživatele

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

Prozatím vypněte server. Znovu se restartujeme s upravenou konfigí

> db.shutDownServer()

Nastavení ověřování

Zde povolíme ověřování databáze a upravíme adresu vazby pro náš server, aby byl přístupný ve veřejné doméně. Otevřete /etc/mongod.conf a proveďte níže uvedené změny.

# 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

Uložte konfiguraci a restartujte serveru.

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

Test přihlášení

Fungování přihlašovacích údajů můžete ověřit pomocí,

$ mongo -u admin -p password

To je vše o počátečním nastavení! Zůstaňte prosím naladěni na můj další související příspěvek o podrobném procesu migrace a tipech, jak udržet DB připravenost na produkci.

P.S. Děkujeme Piyushovi Kumarovi za pomoc při správě tohoto příspěvku!


  1. Připojení k MongoDB Atlas pomocí Golang mgo:Trvalý nedostupný server pro sadu replik

  2. Vzdálené připojení k MongoDB http rozhraní na EC2 serveru

  3. Podporuje MongoDB typy s plovoucí desetinnou čárkou?

  4. MongoDB $násobit