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
- Nastavení infrastruktury
- Nastavení MongoDB
- Hromadná migrace
- 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
- xvdb (30 GB prostoru pro ukládání dat)
- 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!