Pro každou databázi je vyrovnávání zátěže všech požadavků přicházejících od klientů důležitým a základním mechanismem pro zajištění škálovatelnosti. Správné řešení vyvažování zátěže rozloží všechny požadavky klientů rovnoměrně mezi všechny databázové zdroje. Pokud není databázový cluster střežen správným řešením pro vyrovnávání zátěže, vaše databáze nebude schopna zvládnout zvýšené provozní zatížení.
Naštěstí MongoDB poskytuje vestavěnou podporu pro vyrovnávání zátěže s vysokým provozem podporou horizontálního škálování pomocí shardingu. Data svých sbírek můžete distribuovat na více serverů pomocí shardingu. Můžete také přidat nové servery/stroje do svého clusteru, abyste zvládli zvýšený provoz v databázi. Chcete-li převést svůj replikový cluster MongoDB na cluster sharding, můžete postupovat podle tohoto průvodce.
V tomto článku se dozvíme o chování procesu balanceru, který běží v MongoDB sharded clusterech, a jak upravit jeho chování. Proces vyvažování MongoDB se stará o rovnoměrné rozložení vašich sbírek mezi úlomky. Pokud například jeden fragment vašeho clusteru obsahuje příliš mnoho kusů vaší sdílené sbírky, může tento konkrétní fragment zaznamenat větší provoz ve srovnání s jinými fragmenty. Proces balanceru proto správně vyrovnává kusy kolekcí napříč úlomky. Ve většině nasazení MongoDB jsou výchozí konfigurace procesu balanceru dostatečné pro běžné operace. V některých situacích však mohou správci databáze chtít změnit výchozí chování tohoto procesu. Pokud chcete upravit výchozí chování procesu balanceru pro jakékoli potřeby na úrovni aplikace nebo provozní požadavky, můžete postupovat podle tohoto průvodce.
Začněme několika základními příkazy, abychom získali nějaké informace o stavu a stavu procesu balanceru.
Stav stavu balancéru
Tento příkaz zkontroluje, zda je balancer povolen nebo povolen ke spuštění. Pokud proces balanceru neběží, vrátí tento příkaz hodnotu false. Tím se nezkontroluje, zda proces balanceru běží nebo ne.
sh.getBalancerState()
Povolit proces Balancer
Pokud není balancer ve výchozím nastavení povolen, můžete jej povolit spuštěním následujícího příkazu. Tento příkaz nespustí proces vyvažování, ale povolí proces a zajistí, že vyvažování chunků nebude zablokováno při příštím spuštění procesu vyvažování.
sh.enableBalancing(<collection_name/namespace>)
Zakázat proces Balancer
Proces balanceru běží ve výchozím nastavení kdykoli. Pokud tedy chcete zakázat proces balanceru na určité časové období, můžete použít následující příkaz. Jeden ideální scénář pro použití tohoto příkazu je, když vytváříte zálohu databáze.
sh.stopBalancer()
Před vytvořením zálohy se ujistěte, že je zastaven proces balanceru. Pokud je proces povolen během zálohování databáze, můžete skončit s nějakou nekonzistentní replikou vaší databáze. To se může stát, když proces balanceru během procesu zálohování přesune nějaké kousky přes úlomky pro vyrovnávání zátěže.
Můžete také zakázat vyvažování u některých konkrétních kolekcí poskytnutím celého jmenného prostoru kolekce jako parametru pomocí následujícího příkazu.
sh.disableBalancing("<db_name>.<collection_name>")
Stav běhu balancéru
Tento příkaz zkontroluje, zda je proces balanceru spuštěn nebo ne. Také kontroluje, zda aktivně spravuje části shardingu nebo ne. Vrátí hodnotu true, pokud proces běží, jinak vrátí hodnotu false.
sh.isBalancerRunning()
Výchozí konfigurace velikosti bloku
Ve výchozím nastavení je velikost bloku v libovolném sdíleném clusteru MongoDB 64 MB. Pro většinu scénářů je to dost dobré pro migraci nebo rozdělení rozbitých částí. Někdy však normální proces migrace zahrnuje více I/O operací, než dokáže váš hardware zpracovat. V těchto typech situací možná budete chtít zmenšit velikost bloků. Můžete tak učinit spuštěním následující sady příkazů.
use config
db.settings.save( { _id:"chunksize", value: <sizeInMB> } )
Pokud změníte výchozí velikost bloku ve sdíleném clusteru, mějte na paměti následující věci
- Velikost bloku můžete zadat pouze mezi 1 až 1024 MB
- Automatické rozdělení proběhne pouze při vložení nebo aktualizaci
- Nižší velikosti bloků povedou k více času během procesu dělení.
Naplánujte vyrovnávání na konkrétní čas
Když je velikost vaší databáze obrovská, mohou procesy vyvažování nebo migrace ovlivnit celkový výkon vaší databáze. Proto je rozumné naplánovat proces vyvažování na určité časové okno, kdy je zatížení databáze velmi menší. Pomocí následujících příkazů můžete nastavit časové okno pro spuštění procesu balanceru.
use config
db.settings.update({ _id : "balancer" }, { $set : { activeWindow : { start : "<start-time>", stop : "<stop-time>" } } }, true )
Příklad
Následující příkaz nastaví časové okno od 1:00 do 5:00 pro spuštění procesu vyvažování.
db.settings.update({ _id : "balancer" }, { $set : { activeWindow : { start : "01:00", stop : "05:00" } } }, true )
Ujistěte se, že daný časový rámec je dostatečný pro kompletní proces vyvážení.
Můžete také odstranit jakékoli existující časové okno procesu vyvažování spuštěním následujícího příkazu.
db.settings.update({ _id : "balancer" }, { $unset : { activeWindow : true } })
Kromě výše uvedených příkazů můžete také změnit chování replikace během procesu migrace bloku pomocí parametru _secondaryThrottle. Také můžete použít vlastnost _waitForDelete s příkazem moveChunk, abyste řekli procesu vyvažování, aby počkal na fázi odstranění aktuální migrace, než začne s fází migrace nového bloku.
Závěr
Doufejme, že to bude vše, co budete potřebovat při změně výchozího chování procesu vyvažování MongoDB. Vyvážení je velmi důležitým aspektem jakéhokoli shardovaného clusteru MongoDB. Pokud tedy znáte podrobně proces vyvažování, bude velmi snadné upravit výchozí chování procesu vyvažování podle vašich potřeb a případů použití.