Replikační sada je definována jako databázový cluster s více uzly s nakonfigurovanou replikací a automatickým převzetím služeb při selhání (failover). Aby bylo zajištěno, že primární databáze (PRIMARY) bude zvolena správně, je důležité mít v sadě lichý počet členů (včetně nebo s vyloučením Arbiter uzlu).
Vybraná databáze je zodpovědná za všechny hlavní úkoly. Zpracovává příchozí operace zápisu a ukládá jejich informace do oplogu. K těmto informacím mohou přistupovat a replikovat je sekundární (SECONDARY) členové repliky, aby je aplikovali na své vlastní datové sady. V důsledku toho budou všechny servery v sadě reprezentovat stejný obsah a zajišťovat jeho dostupnost:

Nyní si představte situaci, kdy neočekávaný problém (jako je selhání hardwaru nebo připojení) způsobí výpadek primární databáze. V takovém případě systém automaticky zahájí nový proces volby, aby obnovil normální fungování bez nutnosti jakéhokoli ručního zásahu. Výhodou takového systému je, že získáte to nejlepší z replikace, jako je zvýšená dostupnost, redundance při selhání a obnova po havárii, aniž byste se museli starat o správu více databází samostatně.
Pokud chcete použít podobný systém, tento návod vám ukáže, jak nakonfigurovat replikační sadu MongoDB pomocí CloudSigma PaaS. Jak uvidíte v této příručce, budeme používat tři členy, což obvykle stačí k zajištění dobré míry bezpečnosti informací a výkonu pro zpracování I/O operací u většiny běžných aplikací. Spolu se samotnou konfigurací replikace se také naučíme, jak připravit prostředí, nastavit autentizaci mezi uzly DB a jak zajistit, aby vaše práce byla úspěšná.
Krok 1: Vytvoření nového prostředí
Pro začátek budete potřebovat alespoň 3 uzly MongoDB, abyste mohli začít konfigurovat replikační sadu. Pokračujte tedy a vytvořte nové prostředí následovně:

V našem příkladu alokujeme všechny instance MongoDB verze 4.0.2 do stejného prostředí. V případě potřeby můžete změnit Environment Name v daném poli a pokračovat v procesu instalace.
Dalším krokem v procesu bude řešení zabezpečení komunikace mezi těmito uzly pomocí souboru s autentizačním klíčem.
Step 2: Add an Authentication Key File
Autentizace je kritickou součástí každé replikace. Jedná se o proces zajištění bezpečnosti, který povolí přístup členovi replikační sady pouze poté, co se správně identifikuje jedinečným souborem s autentizačním klíčem. To chrání vaše data před nežádoucími zvědavci a třetími stranami. Zde je návod, jak si můžete vygenerovat vlastní soubor s autentizačním klíčem:
- Klikněte na možnost Web SSH u jednoho z databázových uzlů a přihlaste se:

2. Dále můžete zadat svůj vlastní soubor klíče nebo vygenerovat nový pomocí openssl pomocí následujícího příkazu:
|
1 |
openssl rand -base64 741 > my.key |
V tomto příkazu 741 představuje velikost klíče v bajtech a my.key je název klíče.
3. Je čas distribuovat nový soubor klíče do všech vašich instancí MongoDB. Zde je návod, jak na to:
- Otevřete File Manager kliknutím na tlačítko Config vedle kteréhokoli z databázových uzlů:

- Najděte soubor my.key v záložce konfigurace pod cestou: /home/jelastic/my.key. Otevřete jej a zkopírujte obsah souboru:

- Pod cestou /var/lib/jelastic/keys najdete adresář keys. Vytvořte New File, který budou instance MongoDB používat k vzájemnému ověření identity. V našem případě vytvoříme soubor s názvem mongo-set.key:

- Vložte dříve zkopírovaný obsah do tohoto souboru a aplikujte změny kliknutím na Save u všech instancí:

V důsledku tohoto procesu byl soubor mongo-set.key distribuován do všech našich uzlů MongoDB.
Krok 3: Konfigurace replikace MongoDB
Nyní, když jsme zajistili bezpečnost instancí, můžeme přejít k samotné konfiguraci replikační sady. Začněme:
- Začněte tím, že přejdete na záložku konfigurace pro uzly MongoDB a otevřete soubor mongo.conf v adresáři etc složku. Přejděte dolů, dokud nenajdete sekci replication. Odkomentujte ji a přidejte následující řetězec s jedinečným názvem pro vaši sadu replik. V našem příkladu ji pojmenujeme db-replication:
|
1 |
replSetName: db-replication |

3. Kliknutím na příslušné tlačítko Uložte změny pro všechny instance v okně editoru.
4. Nyní musíte Restartovat všechny své databázové uzly pro použití nových konfiguračních parametrů:

Mějte na paměti, že jakmile dokončíte konfiguraci sady replik a restartujete buď všechny uzly, nebo uzel PRIMARY, během restartu se spustí proces volby nové databáze PRIMARY.
5. Vyberte server MongoDB, který chcete použít jako PRIMARY, a přistupte k němu pomocí protokolu SSH:

Pamatujte: jakmile bude zvolena databáze PRIMARY, ostatní členové sady replik již nebudou přístupní pro přímé operace zápisu. To znamená, že veškeré změny a konfigurace lze provádět a aplikovat pouze na aktuální uzel PRIMARY. Pokud tedy nemáte nastavené priority, budete muset změnit připojovací řetězec ve vaší aplikaci na nový uzel PRIMARY.
6. Dále přistupte k replikované databázi pomocí vašich příslušných přihlašovacích údajů:
|
1 |
mongo -u {user} -p {password} {DB_name} |

V tomto příkazu:
- {user} –odkazuje na uživatelské jméno administrátora, které vám bude zasláno na e-mail (obvykle je to ve výchozím nastavení admin).
- {password} –toto je heslo zaslané na váš e-mail spolu s odpovídajícím uživatelským jménem.
- {DB_name}- představuje název databáze, kterou chcete v této sadě replik replikovat (v našem příkladu používáme výchozí admin).
V případě nové volby můžete k přihlášení do nové databáze PRIMARY použít stejné přihlašovací údaje uživatele admin.
7. Nyní, když bylo navázáno spojení, budete muset provést následující řádky, abyste definovali parametry pro aktuální uzel MongoDB a inicializovali sadu replik:
|
1 2 3 4 5 |
config = {_id : "{replica_set}", members : [{_id : 0, host:"{current_db_ip}:27017"},]} rs.initiate() |
Ve výše uvedených řádcích nahradíte hodnoty v závorkách vlastními odpovídajícími údaji:
- {replica_set} – toto je název vaší replikační databázové skupiny, který jste uvedli na začátku této sekce. V našem případě to bylo db-replication.
- {current_db_ip} – označuje IP adresu databázového kontejneru, který jste vybrali:

V našem případě jsou provedené řádky:
|
1 2 |
config = {_id : "db-replication", members : [{_id : 0, host:"10.100.2.182:27017"},]} |

|
1 |
rs.initiate() |

8. Dále proveďte následující příkaz pro všechny zbývající databáze:
|
1 |
rs.add("{db_ip}:27017") |
Zde, {db_ip} odkazuje na IP adresu každé databáze:

9. Jakmile přidáte všechny členy replikace, získáte plně funkční sadu replik. Na konci procesu doporučujeme ujistit se, že bylo vše správně nakonfigurováno. Chcete-li tak učinit, proveďte příkaz: rs.status(). To vám zobrazí kompletní informace týkající se vaší sady replik následovně:

Krok 4: Nastavení ReplicaSet Arbiter
V určitých případech doporučujeme použít uzel Arbiter . Co je to uzel Arbiter ? Replikace je obvykle spolehlivější, pokud sada replik obsahuje lichý počet uzlů. Pokud tedy máte v sadě aktuálně sudý počet uzlů, můžete přidat uzel Arbiter , abyste udrželi kvorum, protože reaguje na požadavky na heartbeat a volby od ostatních členů v sadě. Zde je několik podrobností o Arbiter uzlech:
- Arbiter neukládá žádná data; pouze hlasuje ve volbách v případě, že jiný uzel selhal.
- Je velmi lehký a nespotřebovává příliš mnoho prostředků.
- Vyměňoval si přihlašovací údaje uživatelů mezi šifrovanými replikami.
- Chcete-li zachovat nejvyšší dostupnost, zkuste spustit Arbiter na samostatném uzlu.
Zde je návod, jak můžete přidat uzel Arbiter do své sady replik:
- Nejprve provedeme horizontální škálování a přidáme do clusteru další uzel:


2. Po přidání uzlu potřebujeme nový soubor klíče. Přejděte do adresáře keys a vytvořte soubor klíče mongo-set.key. Zkopírujte obsah klíče z kteréhokoli z dříve nakonfigurovaných databázových uzlů a vložte jej sem celý, jako jsme to udělali předtím.
3. Přejděte do konfiguračního souboru mongod.conf. Odkomentujte sekci replikace a přidejte repISetName (v našem případě je to db-replication v našem případě). Dále přejděte do sekce security a přidejte parametr keyFile ( /var/lib/jelastic/keys/mongo-set.key v našem případě).
4. Nakonec restartujte nový uzel, aby se projevily tyto nové konfigurační parametry:

Je důležité si uvědomit, že v tomto okamžiku NEMUSÍTE restartovat všechny uzly v clusteru. Restartujte pouze nově přidaný uzel Arbiter. Restartování všech uzlů povede k nové volbě PRIMARY (pokud jste neurčili priority pro výběr konkrétního databázového uzlu jako PRIMARY).
5. Nakonec lze Arbiter přidat do sady replik. Chcete-li tak učinit, zadejte na uzlu PRIMARY následující příkaz:
|
1 |
rs.addArb("{db_ip}:27017") |
Zde {db_ip} je IP adresa nového uzlu:

6. Nyní můžete zkontrolovat a potvrdit, zda se nový uzel stal Arbiterem. Můžete to provést tak, že se přihlásíte k novému uzlu pomocí SSH a připojíte se k instanci MongoDB pomocí přihlašovacích údajů, které jste obdrželi na e-mail v době vytvoření uzlu:

To ukazuje, že nový uzel, který jsme právě přidali do clusteru, funguje jako Arbiter pro db-replication. To zajišťuje kvorum v jakékoli situaci, což činí sadu replik spolehlivější.
Krok 5: Testování dostupnosti databázového clusteru
Dále můžeme nastavit náš cluster MongoDB pro vzdálené připojení a provádění operací. V následujícím příkladu se připojíme a provedeme několik kontrolních příkazů pomocí jednoduchého PHP appletu.
Pro tento účel budete potřebovat aplikační server, jako je například Apache. Může jej přidat do svého prostředí, jako jsme to udělali my, nebo vytvořit nový v samostatném prostředí.
- Začněte kliknutím na Change Environment Topology a přidáním serveru:


2. Otevřete kartu Configuration Manager pro server Apache kliknutím na tlačítko Config jak je znázorněno níže:

3. Najděte a otevřete soubor index.php v adresáři /var/www/webroot/ROOT a vložte následující kód namísto výchozího obsahu:
|
1 |
<!--?php try{ $mongodbConnectionURI= "mongodb://{db_username}:{db_password}@node{NodeID}-{environment_domain}:27017, node{NodeID}-{environment_domain}:27017,node{NodeID}-{environment_domain}:27017,node{NodeID}-{environment_domain}:27017/?replicaSet={replica_set_name}&readPreference=primary"; $manager = new MongoDB\Driver\Manager($mongodbConnectionURI); $command = new MongoDB\Driver\Command(['ping' => 1]); $cursor = $manager->executeCommand('db', $command); $response = $cursor->toArray()[0]; var_dump($response); echo'<br><br>'; var_dump($manager->getServers()); } catch (Exception $e){ echo $e->getMessage(); } ?--> |
Následující hodnoty ve výše uvedeném kódu je třeba nahradit vašimi příslušnými údaji:
- {replica_set_name} – zadejte název vaší sady replik.
- {db_username} – přidejte administrátorského uživatele zvolené primární databáze (ve výchozím nastavení je to admin).
- {db_password} – zadejte heslo administrátorského uživatele.
- {NodeID} – uveďte identifikační číslo příslušného uzlu. Najdete ho na ovládacím panelu CloudSigma PaaS.
- {environment_domain} – přidejte doménu prostředí. Najdete ji také na ovládacím panelu CloudSigma PaaS:

Ujistěte se, že jste zadali ID každého uzlu ve vaší sadě replik v příslušné sekci mongodbConnectionURI .
Zadáním odpovídajících hodnot a spuštěním kódu se zobrazí sada řetězců podobná této:

Ujistěte se, že uložíte soubor v tomto okamžiku!
4. Aby mohl Apache komunikovat se serverem MongoDB, vyžaduje speciální modul. Tento modul můžete přidat v rámci configs. Přejděte do složky etc a otevřete php.ini soubor. Najděte sekci [mongodb] . Zde stačí odstranit středník před řádkem extension=mongodb.so, abyste toto rozšíření povolili:

5. Použijte nové konfigurace kliknutím na Save v okně editoru. Jako vždy musíme restartovat uzly, aby se změny projevily. Klikněte na tlačítko Restart Nodes vedle Application Server, abyste tak učinili:

6. Nyní klikněte na tlačítko Open in Browser pro otestování:

Kliknutím na tuto ikonu se otevře nová karta prohlížeče, která zobrazí všechny informace o členech/uzlech vaší sady replik a jejich dostupnosti takto:

Vzhledem k tomu, že jsme použili příkaz ping (řádek 6 v souboru index.php ), první řádek zobrazuje výsledek kontroly dostupnosti sady replik:
|
1 |
object(stdClass)#11 (3) { ["ok"]=> float(1) } |
To znamená, že sada replik byla úspěšně otestována.
Další blok ve výsledcích ukazuje podrobné informace o hostitelích sady replik. Tato data jsou získávána díky funkci getServers (řádek 11 v souboru index.php). Podobně můžete také zkontrolovat některé hodnoty přiřazené během procesu vytváření této sady replik:
- host – IP adresa konkrétní databáze.
- port – toto je port aktuálního člena replikace.
- [“is_primary”] a [“is_secondary”] – parametry, které indikují stav serveru. Odpovídající hodnoty pro zvolený primární MongoDB server jsou true, false a pro dva další MongoDB servery – false, true v tomto pořadí.
Kromě toho můžete uzly databáze kdykoli spustit a zastavit a sledovat změny. Stejný účinek má i obnovení stránky. To vám umožní zajistit, aby byl váš MongoDB cluster vždy dostupný, funkční a běžel tak, jak jste jej nakonfigurovali.
CloudSigma PaaS umožňuje svým uživatelům využívat výhod sad replik, aniž by se museli příliš starat o konfiguraci a back-endovou stránku věci. Tento návod ukazuje, jak jednoduché může být nastavení vašeho vlastního MongoDB clusteru v několika jednoduchých krocích. Více se můžete dozvědět o MongoDB, jak jej set it up for Ubuntu nebo public cloud servers, stejně jako o tom, jaké další pokročilé funkce CloudSigma PaaS nabízí. Také vás zveme, abyste si take a trial run PaaS zdarma, abyste se seznámili s ovládacím panelem a marketplace a tím, co nabízejí.
Komentáře
Zatím žádné komentáře. Buďte první.