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:
- Instalujte základní balíčky mongo (bez serveru, pymongo a rozhraní příkazového řádku)
- Nainstalujte server mongodb. Začněte podle tohoto průvodce.
- Nastavte instance mongodů a tam odpovídající sady replik.
- Nakonfigurujte a nastavte konfigurační servery
- Nakonfigurujte a nastavte službu směrování Mongos.
- 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 zdarmaJednoduchý 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.