Výkon MongoDB závisí na tom, jak využívá základní zdroje. Ukládá data na disk i do paměti. K provádění operací využívá prostředky CPU a ke komunikaci se svými klienty síť. Měly by existovat dostatečné zdroje na podporu jeho obecné živosti. V tomto článku probereme různé požadavky na zdroje pro databázový systém MongoDB a jak je můžeme optimalizovat pro maximální výkon.
Požadavky na MongoDB
Kromě poskytování rozsáhlých zdrojů, jako je RAM a CPU do databáze, může vyladění operačního systému také do určité míry zlepšit výkon. Mezi významné nástroje potřebné pro vytvoření prostředí MongoDB patří:
- Dostatek místa na disku
- Adekvátní paměť
- Výborné síťové připojení.
Nejběžnějším operačním systémem pro MongoDB je Linux, takže se podíváme na to, jak jej optimalizovat pro databázi.
Podmínka restartu.
Existuje mnoho technik ladění, které lze použít na Linux. Protože však některé změny proběhnou bez restartování vašeho hostitele, je vždy dobré po provedení změn restartovat, abyste zajistili jejich použití. V této části se budeme zabývat implementacemi ladění:
- Síťový zásobník
- Démon NTP
- Linux User Limit
- Systém souborů a možnosti
- Zabezpečení
- Virtuální paměť
Síťový zásobník
Jako každý jiný software poskytuje vynikající síťové připojení lepší rozhraní pro výměnu požadavků a odpovědí se serverem. MongoDB však není upřednostňován s výchozím nastavením sítě jádra Linuxu. Jak název napovídá, jedná se o uspořádání mnoha vrstev, které lze kategorizovat do 3 hlavních:Uživatelská oblast, Oblast jádra a Oblast zařízení. Uživatelská oblast a oblast jádra se označují jako hostitel, protože jejich úkoly provádí CPU. Oblast zařízení je zodpovědná za odesílání a přijímání paketů prostřednictvím rozhraní zvaného Network Interface Card. Pro lepší výkon s prostředím MongoDB by měl být hostitel omezen na limit síťového rozhraní 1 Gb/s. V tomto případě bychom měli vyladit nastavení relativně propustnosti, která zahrnují:
- net.core.somaxconn (zvýšení hodnoty)
- net.ipv4.tcp_max_syn_backlog (zvýšit hodnotu)
- net.ipv4.tcp_fin_timeout (snižte hodnotu)
- net.ipv4.tcp_keepalive_intvl (snížit hodnotu)
- net.ipv4.tcp_keepalive_time (snížit hodnotu)
Aby byly tyto změny trvalé, vytvořte nový soubor /etc/sysctl.d/mongodb-sysctl.conf, pokud neexistuje, a přidejte do něj tyto řádky.
net.core.somaxconn = 4096
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_keepalive_time = 120
net.ipv4.tcp_max_syn_backlog = 4096
Poté spusťte příkaz jako uživatel root /sbin/sysctl -p, aby se změny uplatnily trvale.
NTP démon
Network Time Protocol (NTP) je technika, pro kterou jsou softwarové hodiny systému Linux synchronizovány s internetovými časovými servery. MongoDB jako cluster je závislý na časové konzistenci mezi uzly. Z tohoto důvodu je důležité, aby NTP běžel trvale na hostitelích MongoDB. Důležitost konfigurace NTP je zajistit nepřetržitou obsluhu serveru po určitou nastavenou dobu po odpojení sítě. Ve výchozím nastavení je NTP nainstalováno na straně klienta, takže pro MongoDB k instalaci NTP na systém Linux s příchutí Debian/Ubuntu stačí spustit příkaz:
$ sudo apt-get install ntp
Můžete navštívit ntp.conf a zobrazit konfiguraci démona NTP pro různé OS.
Linux User Limit
Někdy může chyba na straně uživatele skončit s dopadem na celý server a hostitelský systém. Abychom tomu zabránili, je systém Linux navržen tak, aby dodržoval určité limity systémových prostředků, pokud jde o procesy prováděné na základě jednotlivých uživatelů. To je zřejmé, že bude nevhodné nasadit MongoDB na takové výchozí konfigurace systému, protože by to vyžadovalo více zdrojů než výchozí ustanovení. Kromě toho je MongoDB často hlavním procesem pro využití základního hardwaru, proto bude převládat optimalizace systému Linux pro takové vyhrazené použití. Databáze pak může plně využívat dostupné zdroje.
Nebude však vhodné tato omezení zakázat nebo je nastavit na neomezený stav. Pokud například narazíte na nedostatek úložného prostoru CPU nebo RAM, malá chyba může přerůst ve velký problém a vyústit v selhání dalších funkcí – např. SSH, které je zásadní pro řešení počátečního problému.
Abyste dosáhli lepších odhadů, měli byste rozumět požadavkům na omezení na úrovni databáze. Například odhad počtu uživatelů, kteří budou odesílat požadavky do databáze, a dobu zpracování. Můžete se podívat na Klíčové věci k monitorování pro MongoDB. Nejvýhodnější limit pro max-user-processes a open-files je 64000. Chcete-li nastavit tyto hodnoty, vytvořte nový soubor, pokud neexistuje jako /etc/security/limits.d a přidejte tyto řádky
mongod soft nofile 64000
mongod hard nofile 64000
mongod soft nproc 64000
mongod hard nproc 64000
Chcete-li tyto změny použít, restartujte svého mongoda, protože změny se vztahují pouze na nové shelly.
Systém souborů a možnosti
MongoDB využívá 3 typy souborových systémů, tj. ext3, ext4 a XFS pro data databází na disku. Pro úložný modul WiredTiger používaný pro MongoDB verze vyšší než 3 je lepší použít XFS spíše než ext4, o kterém se má za to, že vytváří určité problémy se stabilitou, zatímco ext3 se také vyhýbá kvůli jeho slabému výkonu před alokací. MongoDB nepoužívá výchozí techniku souborového systému pro provádění aktualizace metadat přístupového času jako jiné systémy. Můžete proto zakázat aktualizace doby přístupu, abyste ušetřili malé množství IO aktivity disku využívané těmito aktualizacemi.
To lze provést přidáním příznaku noatime do pole možností systému souborů v souboru etc/fstab pro disk obsluhující data MongoDB.
$ grep "/var/lib/mongo" /proc/mounts
/dev/mapper/data-mongodb /var/lib/mongo ext4 rw, seclabel, noatime, data=ordered 0 0
Tuto změnu lze realizovat pouze po restartování nebo restartování MongoDB.
Zabezpečení
Mezi několika bezpečnostními funkcemi, které má linuxový systém, na úrovni jádra je Security-Enhanced Linux. Toto je implementace jemnozrnné povinné kontroly přístupu. Poskytuje most k bezpečnostní politice, který určuje, zda má operace pokračovat. Bohužel mnoho uživatelů Linuxu nastaví tento modul řízení přístupu pouze na varování nebo jej úplně deaktivují. To je často způsobeno některými souvisejícími překážkami, jako je neočekávaná chyba odepřená oprávnění. Tento modul, i když jej mnoho lidí ignoruje, hraje hlavní roli při snižování lokálních útoků na server. Pokud je tato funkce povolena a odpovídající režimy jsou nastaveny na kladné, poskytne vašemu MongoDB bezpečné zázemí. Proto byste měli povolit režim SELinux a také použít režim Enforcing, zejména na začátku instalace. Chcete-li změnit režim SELinux na Enforcing:spusťte příkaz
$ sudo setenforce Enforcing
Běžící režim SELinux můžete zkontrolovat spuštěním
$ sudo getenforce
Somenines Staňte se MongoDB DBA – Uvedení MongoDB do produkce Zjistěte, co potřebujete vědět, abyste mohli nasadit, monitorovat, spravovat a škálovat MongoDBDdownload zdarma Virtuální paměť
Poměr znečištění
MongoDB využívá technologii mezipaměti ke zlepšení rychlého načítání dat. V tomto případě se vytvoří špinavé stránky a k jejich uchování bude potřeba určitá paměť. Poměr špinavých stránek se tedy stává procentem celkové systémové paměti, které může obsahovat špinavé stránky. Ve většině případů jsou výchozí hodnoty mezi (25 - 35)%. Pokud je tato hodnota překročena, pak se stránky uloží na disk a způsobí vytvoření tvrdé pauzy. Abyste se tomu vyhnuli, můžete nastavit jádro tak, aby vždy vyprázdnilo data přes jiný poměr označovaný jako dirty_background_ratio, jehož hodnota se pohybuje mezi (10% - 15%) na disk na pozadí, aniž by se nutně vytvořila tvrdá pauza.
Cílem je zajistit kvalitní výkon dotazů. Můžete tedy snížit poměr pozadí, pokud váš databázový systém bude vyžadovat velkou paměť. Pokud je povolena tvrdá pauza, můžete skončit s duplikáty dat nebo se během této doby nemusí některá data zaznamenat. Můžete také zmenšit velikost mezipaměti, abyste se vyhnuli častému zápisu dat na disk v malých dávkách, což může vést ke zvýšení propustnosti disku. Chcete-li zkontrolovat aktuálně spuštěnou hodnotu, můžete spustit tento příkaz:
$ sysctl -a | egrep “vm.dirty.*_ratio”
a bude vám předloženo něco takového.
vm.dirty_background_ratio = 10
vm.dirty_ratio = 20
Výměnnost
Je to hodnota v rozmezí 1 až 100, ze které lze ovlivnit chování správce virtuální paměti. Nastavení na 100 znamená vynucené swapování na disk a nastavení na 0 nasměruje jádro na swap pouze proto, aby se vyhnulo problémům s nedostatkem paměti. Výchozí rozsah pro Linux je 50 - 60, z čehož není vhodný pro databázové systémy. V mém vlastním testu je nastavení hodnoty mezi 0 až 10 optimální. Tuto hodnotu můžete vždy nastavit v souboru /etc/sysctl.conf
vm.swappiness = 5
Tuto hodnotu pak můžete zkontrolovat spuštěním příkazu
$ sysctl vm.swappiness
Chcete-li tyto změny použít, spusťte příkaz /sbin/sysctl -p nebo můžete restartovat systém.