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

Nasazení a konfigurace MongoDB Shards pomocí Ansible

Databázové systémy fungují lépe, když je pracovní zátěž rozdělena mezi několik běžících instancí nebo jsou data kategorizována jednoduchým způsobem. MongoDB využívá sharding, takže data v dané databázi jsou seskupena podle nějakého klíče. Sharding zlepšuje horizontální škálování, což následně vede k lepšímu výkonu a zvýšené spolehlivosti. Obecně platí, že MongoDB nabízí horizontální a vertikální škálování na rozdíl od SQL DBMS, například MySQL, který podporuje pouze vertikální škálování.

MongoDB má volnější model konzistence, kdy dokument v kolekci může mít další klíč, který by chyběl v jiných dokumentech ve stejné kolekci.

Sharding

Sdílení je v podstatě rozdělení dat do samostatných částí a poté definování řady částí na různé servery shard. K seskupení dat se používá shard klíč, což je často pole, které je přítomno ve všech dokumentech v databázi, které mají být skartovány. Sdílení funguje ruku v ruce s replikací a urychluje propustnost čtení tím, že zajišťuje distribuovanou pracovní zátěž mezi více servery, nikoli závislost na jediném serveru. Kromě toho replikace zajišťuje dostupnost kopií zapsaných dat.

Řekněme, že máme v kolekci 120 dokumentů, tato data lze rozdělit tak, že máme 3 sady replik a každá má 40 dokumentů, jak je znázorněno v nastavení konfigurace níže. Pokud dva klienti pošlou požadavky, jeden o načtení dokumentu, který je v indexu 35 a druhý, jehož index je na 92, požadavek je přijat směrovačem dotazů (proces mongos), který zase kontaktuje konfigurační uzel, který uchovává záznamy o jak jsou rozsahy kusů rozděleny mezi střepy. Když je nalezena zadaná identita dokumentu, je poté načtena z přidruženého datového fragmentu. Například výše, dokument prvního klienta bude načten ze segmentu A a pro klienta B bude dokument načten ze segmentu C. Obecně bude existovat distribuovaná pracovní zátěž, která je definována jako horizontální škálování.

Pokud u daných úlomků velikost kolekce v útržku překročí velikost chunk_size, kolekce bude rozdělena a vyvážena napříč úlomky automaticky pomocí definovaného klíče úlomku. V nastavení nasazení budeme pro příklad níže potřebovat 3 sady replik, z nichž každá bude mít primární a nějaké sekundární. Primární uzly fungují také jako shardingové servery.

Minimální doporučená konfigurace pro produkční nasazení MongoDB bude alespoň tři servery shard, každý se sadou replik. Pro nejlepší výkon jsou servery mongos nasazeny na samostatných serverech, zatímco konfigurační uzly jsou integrovány s fragmenty.

Nasazení MongoDB Shards pomocí Ansible

Samostatná konfigurace fragmentů a sad replik clusteru je těžkopádný úkol, a proto jsme se rozhodli vytvořit jednoduché nástroje, jako je Ansible, abychom požadovaných výsledků dosáhli velmi snadno. Příručky se používají k zápisu požadovaných konfigurací a úloh, které bude software Ansible provádět.

Systematický proces playbooku by měl být:

  1. Instalujte základní balíčky mongo (bez serveru, pymongo a rozhraní příkazového řádku)
  2. Nainstalujte server mongodb. Začněte podle tohoto průvodce.
  3. Nastavte instance mongodů a tam odpovídající sady replik.
  4. Nakonfigurujte a nastavte konfigurační servery
  5. Nakonfigurujte a nastavte službu směrování Mongos.
  6. Přidejte úlomky do svého clusteru.

Příručka nejvyšší úrovně by měla vypadat takto

- name: install mongo base packages include: mongod.yml
  tags: - mongod

- name: configure config server
  include: configServer.yml
  when: inventory_hostname in groups['mongoc-servers'] 
  tags:
  - cs

- name: configure mongos server
  include: configMongos.yml
  when: inventory_hostname in groups['mongos-server'] tags:
  - mongos

- name: add shards
  include: addShards.yml
  when: inventory_hostname in groups['mongos-servers'] 
  tags:
  - mongos
  - shards

Výše uvedený soubor můžeme uložit jako mongodbCluster.yml.

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

Jednoduchý soubor mongodb.yml bude vypadat takto:

---
- hosts: ansible-test
  remote_user: root
  become: yes
  tasks:
  - name: Import the public key used by the package management system
    apt_key: keyserver=hkp://keyserver.ubuntu.com:80 id=7F0CEB10 state=present
  - name: Add MongoDB repository
    apt_repository: repo='deb <a class="vglnk" href="https://downloads-distro.mongodb.org/repo/ubuntu-upstart" rel="nofollow"><span>http</span><span>://</span><span>downloads</span><span>-</span><span>distro</span><span>.</span><span>mongodb</span><span>.</span><span>org</span><span>/</span><span>repo</span><span>/</span><span>ubuntu</span><span>-</span><span>upstart</span></a> dist 10gen' state=present
  - name: install mongodb
    apt: pkg=mongodb-org state=latest update_cache=yes
    notify:
    - start mongodb
  handlers:
    - name: start mongodb
      service: name=mongod state=started

K obecným parametrům požadovaným při nasazení sady replik potřebujeme ještě tyto dva, abychom mohli přidat fragmenty.

  • střep: ve výchozím nastavení je null. Jedná se o řetězec připojení fragmentu, který by měl být ve formátu /host:port. Například replica0/siteurl1.com:27017
  • stav: ve výchozím nastavení je hodnota přítomna, což určuje, že by měl být útržek přítomen, jinak jej lze nastavit tak, aby chyběl.

Po nasazení sady replik, jak je vysvětleno v tomto blogu, můžete pokračovat v přidávání fragmentů.

# add a replicaset shard named replica0 with a member running on port 27017 on mongodb0.example.net
- mongodb_shard:
    login_user: admin
    login_password: root
    shard: "replica0/mongodb1.example.net:27017"
    state: present

# add a standalone mongod shard running on port 27018 of mongodb2.example.net
- mongodb_shard:
    login_user: admin
    login_password: root
    shard: "mongodb2.example.net:27018"
    state: present

# Single node shard running on localhost
- name: Ensure shard replica0 exists
  mongodb_shard:
    login_user: admin
    login_password: root
    shard: "replica0/localhost:3001"
    state: present

# Single node shard running on localhost
- name: Ensure shard replica0 exists
  mongodb_shard:
    login_user: admin
    login_password: root
    shard: "replica0/localhost:3002"
    state: present

Po nastavení všech těchto konfigurací spustíme playbook příkazem

ansible-playbook -i hosts mongodbCluster.yml

Po dokončení playbooku se můžeme přihlásit na kterýkoli ze serverů mongos a zadat příkaz sh.status(). Pokud je výstup něco jako níže, úlomky byly nasazeny. Kromě toho můžete vidět klíč mongodb_shard, pokud byl oceněn jako úspěch.

mongos> sh.status()
    --- Sharding Status --- 
      sharding version: { "_id" : 1, "version" : 3 }
      shards:
        {  "_id" : "shardA",  "host" : "locahhost1/web2:2017,locahhost3:2017" }
        {  "_id" : "shardB",  "host" : "locahhost3/web2:2018,locahhost3:2019" }
{  "_id" : "shardC",  "host" : "locahhost3/web2:2019,locahhost3:2019" }

    databases:
        {  "_id" : "admin",  "partitioned" : false,  "primary" : "config" }

Chcete-li odstranit fragment s názvem replika0

- mongodb_shard:
    login_user: admin
    login_password: root
    shard: replica0
    state: absent

Závěr

Ansible sehrál hlavní roli při usnadnění procesu nasazení, protože potřebujeme pouze definovat úkoly, které je třeba provést. Představte si například, že byste měli 40 členů sady replik a ke každému potřebujete přidat úlomky. Jít normální cestou vám zabere věky a je náchylné ke spoustě lidských chyb. S ansible stačí definovat tyto úkoly v jednoduchém souboru zvaném playbook a ansible se o úkoly postará při spuštění souboru.


  1. Získejte všechny klíče v databázi Redis pomocí pythonu

  2. Připojení k Redis To Go s PHP

  3. MongoDB $sampleRate

  4. Jak spojit node.js do redis?