MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Wdrażanie i konfiguracja fragmentów MongoDB za pomocą Ansible

Systemy baz danych działają lepiej, gdy obciążenie jest rozproszone na kilka uruchomionych instancji lub gdy dane są łatwo kategoryzowane. MongoDB wykorzystuje sharding w taki sposób, że dane w danej bazie danych są pogrupowane według jakiegoś klucza. Sharding zwiększa skalowanie poziome, co w konsekwencji skutkuje lepszą wydajnością i zwiększoną niezawodnością. Ogólnie rzecz biorąc, MongoDB oferuje skalowanie poziome i pionowe w przeciwieństwie do SQL DBMS, na przykład MySQL, który promuje tylko skalowanie pionowe.

MongoDB ma luźniejszy model spójności, w którym dokument w kolekcji może mieć dodatkowy klucz, którego nie ma w innych dokumentach w tej samej kolekcji.

Sharding

Sharding to w zasadzie partycjonowanie danych na oddzielne porcje, a następnie definiowanie zakresu porcji na różne serwery fragmentów. Do grupowania danych używany jest klucz fragmentu, który często jest polem obecnym we wszystkich dokumentach w bazie danych, które mają zostać podzielone. Sharding współdziała z replikacją, aby przyspieszyć przepustowość odczytu, zapewniając rozproszone obciążenie między wieloma serwerami, a nie w zależności od jednego serwera. Poza tym replikacja zapewnia dostępność kopii zapisanych danych.

Załóżmy, że mamy w kolekcji 120 dokumentów, dane te można podzielić tak, że mamy 3 zestawy replik, a każdy ma 40 dokumentów, jak pokazano w konfiguracji poniżej. Jeśli dwóch klientów wysyła żądania, jeden o pobranie dokumentu z indeksu 35, a drugi o indeksie 92, żądanie jest odbierane przez router zapytań (proces Mongos), który z kolei kontaktuje się z węzłem konfiguracyjnym, który prowadzi rejestr jak zakresy kawałków są rozdzielone między odłamki. Po znalezieniu określonej tożsamości dokumentu jest ona pobierana z powiązanego fragmentu. Na przykład powyżej dokument pierwszego klienta zostanie pobrany z fragmentu A, a dla klienta B dokument zostanie pobrany z fragmentu C. Ogólnie rzecz biorąc, będzie rozproszone obciążenie, które jest definiowane jako skalowanie poziome.

W przypadku danych fragmentów, jeśli rozmiar kolekcji w shard przekracza chunk_size, kolekcja zostanie podzielona i zrównoważona między fragmentami automatycznie przy użyciu zdefiniowanego klucza fragmentu. W konfiguracji wdrożenia, w poniższym przykładzie będziemy potrzebować 3 zestawów replik, każdy z podstawowym i kilkoma dodatkowymi. Węzły podstawowe działają również jako serwery shardingu.

Minimalna zalecana konfiguracja dla wdrożenia produkcyjnego MongoDB to co najmniej trzy serwery fragmentów, każdy z zestawem replik. Aby uzyskać najlepszą wydajność, serwery Mongos są wdrażane na oddzielnych serwerach, podczas gdy węzły konfiguracyjne są zintegrowane z odłamkami.

Wdrażanie fragmentów MongoDB za pomocą Ansible

Konfigurowanie fragmentów i zestawów replik klastra osobno jest uciążliwym przedsięwzięciem, dlatego przechodzimy na proste narzędzia, takie jak Ansible, aby osiągnąć wymagane wyniki z dużą łatwością. Poradniki służą do zapisywania wymaganych konfiguracji i zadań, które oprogramowanie Ansible będzie wykonywać.

Systematyczny proces tworzenia podręcznika powinien wyglądać następująco:

  1. Zainstaluj podstawowe pakiety mongo (bez serwera, pymongo i interfejs wiersza poleceń)
  2. Zainstaluj serwer mongodb. Postępuj zgodnie z tym przewodnikiem, aby rozpocząć.
  3. Ustaw instancje mongod i tam zestawy replik korespondencyjnych.
  4. Skonfiguruj i skonfiguruj serwery konfiguracyjne
  5. Skonfiguruj i skonfiguruj usługę routingu Mongos.
  6. Dodaj fragmenty do swojego klastra.

Poradnik najwyższego poziomu powinien wyglądać tak

- 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

Możemy zapisać powyższy plik jako mongodbCluster.yml.

Kilkadziesiąt — Zostań administratorem baz danych MongoDB — wprowadzenie MongoDB do produkcjiDowiedz się, co trzeba wiedzieć, aby wdrażać, monitorować, zarządzać i skalować MongoDB. Pobierz za darmo

Prosty plik mongodb.yml będzie wyglądał następująco:

---
- 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

Do ogólnych parametrów wymaganych do wdrożenia zestawu replik potrzebujemy tych dwóch dodatkowych, aby dodać odłamki.

  • odłamek: domyślnie ma wartość null, Jest to ciąg połączenia fragmentu, który powinien mieć format /host:port. Na przykład replika0/siteurl1.com:27017
  • stan: domyślnie wartość jest obecna, co oznacza, że ​​fragment powinien być obecny, w przeciwnym razie można go ustawić jako nieobecny.

Po wdrożeniu zestawu replik, jak wyjaśniono na tym blogu, możesz przystąpić do dodawania odłamków.

# 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 skonfigurowaniu wszystkich tych konfiguracji uruchamiamy playbook za pomocą polecenia

ansible-playbook -i hosts mongodbCluster.yml

Po ukończeniu playbooka możemy zalogować się do dowolnego serwera mongos i wydać polecenie sh.status(). Jeśli dane wyjściowe są podobne do poniższych, fragmenty zostały wdrożone. Poza tym możesz zobaczyć klucz mongodb_shard, jeśli był ceniony za sukces.

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" }

Aby usunąć fragment o nazwie replika0

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

Wniosek

Ansible odegrał ważną rolę w ułatwieniu procesu wdrażania, ponieważ musimy tylko zdefiniować zadania, które należy wykonać. Wyobraź sobie na przykład, że masz 40 członków zestawu replik i do każdego musisz dodać odłamki. Pójście normalną drogą zajmie ci wieki i jest podatne na wiele ludzkich błędów. W przypadku ansible wystarczy zdefiniować te zadania w prostym pliku o nazwie playbook, a ansible zajmie się zadaniami, gdy plik zostanie uruchomiony.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. ClusterControl — wszystkie najważniejsze funkcje i ulepszenia z 2017 roku

  2. Popraw strukturę agregacji MongoDB

  3. Znajdź największy rozmiar dokumentu w MongoDB

  4. Aktualizacja starszej bazy danych mongo po niezamierzonej aktualizacji wersji mongo

  5. Często zadawane pytania dotyczące wywiadu MongoDB