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

Údržba sad replik MongoDB v cloudu pomocí Ansible

Replikace byla široce používána v databázových systémech pro zajištění vysoké dostupnosti dat vytvořením redundance. Jde v zásadě o strategii vytváření kopie stejných dat na různých běžících serverech, které mohou být na různých počítačích, takže v případě selhání hlavního serveru může být spuštěn další a pokračovat v poskytování.

Sada replik je skupina instancí MongoDB, které udržují stejnou sadu dat. Jsou základem produkčního nasazení. Replikace je výhodná tím, že data jsou vždy dostupná z jiného serveru pro případ výpadku hlavního serverového systému. Kromě toho zlepšuje propustnost čtení tím, že umožňuje klientovi odeslat požadavek na čtení na různé servery a získat odpověď od nejbližšího serveru.

Sada replik tvoří několik uzlů nesoucích data, které mohou být umístěny v různých počítačích a rozhodovacím uzlu. Jeden z těchto datových uzlů je označen jako primární, zatímco ostatní jsou sekundární uzly. Primární uzel přijímá všechny operace zápisu a poté, co byla operace zápisu dokončena a změny byly zaznamenány do protokolu, replikuje data do ostatních uzlů.

Rozhodce je další instance, která neudržuje sadu dat, ale poskytuje kvorum v sadě replik tím, že odpovídá na prezenční a volební požadavky ostatních členů sady replik. Snižují tak náklady na údržbu sady replik spíše než plně funkční člen sady replik se sadou dat.

Automatické převzetí služeb při selhání

Primární uzel může selhat z některých důvodů, jako jsou výpadky napájení nebo odpojení sítě, a proto není schopen komunikovat s ostatními členy. Pokud je komunikace přerušena na dobu delší, než je nakonfigurované volební TimeoutMillis období, jeden z pobočníků vyzve k volbám, aby se nominoval jako nový primární. Pokud je volba dokončena a úspěšná, cluster pokračuje v normálním provozu. Během této doby nelze provádět žádné operace zápisu. Čtecí dotazy však lze nakonfigurovat tak, aby běžely jako obvykle na sekundárních serverech, zatímco primární je offline.

Pro optimální proces replikace by střední doba před zvolením nového primárního klastru měla být maximálně 12 sekund s výchozím nastavením konfigurace replikace. To může být ovlivněno faktory, jako je latence sítě, která může prodloužit dobu, a proto je třeba vzít v úvahu architekturu clusteru, aby tato doba nebyla nastavena příliš vysoko.

Hodnota pro choiceTimeoutMillis může být snížena z výchozích 10 000 (10 sekund), takže primární může být detekován jako první během velmi rychle. To však může být časté vypisování voleb i kvůli menším faktorům, jako je dočasná latence sítě, i když je primární uzel v pořádku. To povede k problémům, jako je vrácení zpět pro operace zápisu.

Ansible pro sady replik

Jak bylo zmíněno, sada replik může mít členy z různých hostitelských počítačů, a proto je údržba clusteru složitější. Potřebujeme jedinou platformu, ze které lze tuto sadu replik snadno udržovat. Ansible je jedním z nástrojů, který poskytuje lepší přehled pro konfiguraci a správu sady replik. Pokud s ansible teprve začínáte, udělejte si prosím rychlou rekapitulaci z tohoto článku, abyste porozuměli základům, jako je vytvoření playbooku.

Konfigurační parametry

  • arbiter_at_index: toto definuje pozici arbitra v seznamu členů sady replik. Paměť arbitra nemá žádná data jako ostatní členové a nelze jej použít jako primární uzel. Je k dispozici pouze pro vytvoření kvóra během voleb. Například pokud máte sudý počet členů, je dobré přidat arbitra tak, že pokud jsou hlasy stejné, přidá 1, aby se stal vítězným členem. Hodnota, která má být přiřazena, by měla být celé číslo.
  • chaining_allowed: To přebírá booleovskou hodnotu a definuje, zda se mají ostatní sekundární členové replikovat z ostatních sekundárních členů, pokud řetězení _allowed =true. Jinak, pokud je řetězení _allowed =false, ostatní sekundární členové se mohou replikovat pouze z primárního. Výchozí hodnota je true.
  • election_timeout_secs: ve výchozím nastavení je hodnota 10000 (nabývá celočíselné hodnoty). Je to čas v milisekundách pro zjištění, kdy primární uzel není dosažitelný nebo spíše nekomunikuje s ostatními členy, a tím spustí volbu. Nastavte toto na střední hodnotu 12 sekund. Pokud je nastaveno příliš vysoko, bude trvat dlouho, než se zjistí primární selhání, a tedy déle, než se provede volby. Vzhledem k tomu, že to ovlivňuje operaci zápisu, můžete během této doby skončit ztrátou velkého množství dat. Na druhou stranu, bude-li nastavena příliš nízko, bude docházet k častému vyvolání voleb, i když případ není tak vážný a primárka je stále dosažitelná. V důsledku toho budete mít tolik vrácení zpět pro operace zápisu, které mohou v určitém okamžiku vést ke špatné integritě dat nebo nekonzistenci.
  • heartbeat_timeout_secs: Sady replik spolu musí před volbami komunikovat odesláním signálu označovaného jako srdeční tep. Členové pak musí na tuto signalizaci reagovat během určité doby, která je standardně nastavena na 10 sekund. Heartbeat_timeout_secs je počet sekund, po které členové sady replik čekají na úspěšný prezenční signál od sebe navzájem, a pokud člen nereaguje, je označen jako nepřístupný. To však platí pouze pro protokol verze 0. Hodnota této hodnoty je tedy celé číslo.
  • login_host: Toto je hostitel, ve kterém se nachází přihlašovací databáze. Ve výchozím nastavení pro MongoDB je localhost.
  • databáze_přihlášení: výchozí nastavení je admin a je to místo, kde jsou uloženy přihlašovací údaje. (nabývá řetězcovou hodnotu)
  • login_user: uživatelské jméno, se kterým má být autentizace provedena. (nabývá řetězcovou hodnotu)
  • login_password: heslo pro ověření uživatele. (přebírá hodnotu řetězce)
  • login_port: Toto je port MongoDB, ke kterému se hostitel může přihlásit. (nabývá celočíselné hodnoty)
  • členové: definuje seznam členů sady replik. Je to řetězec oddělený čárkou nebo seznam yaml, tj. mongodb0:27017,mongodb2:27018,mongodb3:27019… Pokud není uvedeno žádné číslo portu, předpokládá se 27017.
  • verze_protokolu: bere celé číslo, které definuje verzi procesu replikace. Buď 0 nebo 1
  • replica_set: toto je řetězcová hodnota, která definuje název sady replik.
  • ssl: booleovská hodnota, která definuje, zda se má při připojování k databázi používat připojení SSL nebo ne.
  • ssl_certs_reqs: to určuje, zda je vyžadován certifikát z druhé strany připojení a zda bude nutné jej ověřit, pokud je poskytnut. Možnosti jsou CERT_NONE, CERT_OPTIONAL a CERT_REQUIRED. Výchozí hodnota je CERT_REQUIRED.
  • ověřit: přebírá booleovskou hodnotu, která definuje, zda se má provést základní ověření na poskytnuté konfiguraci sady replik. Výchozí hodnota je true.

Vytvoření sady replik MongoDB pomocí Ansible

Zde je jednoduchý příklad úloh pro nastavení sady replik v ansible. Nazvěme tento soubor tasks.yaml

# Create a replicaset called 'replica0' with the 3 provided members
- name: Ensure replicaset replica0 exists
  mongodb_replicaset:
    login_host: localhost
    login_user: admin
    login_password: root
    replica_set: replica0
    arbiter_at_index:2
    election_timeout_secs:12000
    members:
    - mongodb1:27017
    - mongodb2:27018
    - mongodb3:27019
  when: groups.mongod.index(inventory_hostname) == 0

# Create two single-node replicasets on the localhost for testing
- name: Ensure replicaset replica0 exists
  mongodb_replicaset:
    login_host: localhost
    login_port: 3001
    login_user: admin
    login_password: root
    login_database: admin
    replica_set: replica0
    members: localhost:3000
    validate: yes

- name: Ensure replicaset replica1 exists
  mongodb_replicaset:
    login_host: localhost
    login_port: 3002
    login_user: admin
    login_password: secret
    login_database: root
    replica_set: replica1
    members: localhost:3001
    validate: yes

V našem playbooku můžeme úkoly nazvat jako

---
- hosts: ansible-test
  remote_user: root
  become: yes
  Tasks:
- include: tasks.yml

Pokud toto spustíte ve své příručce, ansible-playbook -i inventar.txt -c ssh mongodbcreateReplcaSet.yaml, zobrazí se vám odpověď, zda byla sada replik vytvořena nebo ne. Pokud se klíč mongodb_replicaset vrátí s hodnotou úspěchu a popisem sady replik, která byla vytvořena, můžete začít.

Závěr

V MongoDB je obecně únavné konfigurovat sadu replik pro instance mongod, které mohou být hostovány různými stroji. Ansible však poskytuje jednoduchou platformu, jak udělat totéž, a to pouze definováním několika parametrů, jak je uvedeno výše. Replikace je jedním z procesů, který zajišťuje nepřetržitý provoz aplikací, a proto by měla být dobře konfigurována nastavením více členů v produkčním světě. K vytvoření kvora během volebního procesu se používá arbitr, a proto by měl být zahrnut do konfiguračního souboru definováním jeho pozice.


  1. Připojení Redis k 127.0.0.1:6379 se nezdařilo – připojte ECONNREFUSED

  2. Export MySQL do MongoDB

  3. Ovladač Mongodb C# vrací pouze odpovídající dílčí dokumenty v poli

  4. Rozdíl mezi zdobením vlastnosti v C# pomocí BsonRepresentation(BsonType.ObjectId) vs BsonId vs ObjectId