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

Samoobsługowa MongoDB

Prawdopodobnie hostujesz MongoDB u niezawodnego dostawcy usług w chmurze, na przykład Atlas, ponieważ naprawdę chcesz skupić się na swoim pomyśle i przekazać wszystkie subtelne kluczowe obszary zarządzania, takie jak sieć, pamięć masowa, dostęp itp.

Na początku wszystko wygląda dobrze, dopóki Twój mały pomysł nie zamieni się w biznes, a koszty zaczną gwałtownie rosnąć. Nawet jeśli tak nie jest, ten post będzie nadal zawierał ogólny przegląd zawiłości technicznych (i zaoszczędzonych pieniędzy!), jeśli miałbyś migrować do rozwiązania z własnym hostingiem.

BTW, o ile oszczędności mówimy? Zróbmy szybkie porównanie Atlasu instancja i samoobsługowa baza danych MongoDB na AWS .

Atlas (~166 USD/miesiąc)

0,23 USD/godzinę w oparciu o powyższe wymagania (~ cloud.mongodb.com)



AWS (~36 USD/miesiąc)

0,0416 USD/godz. za instancję i dodatkowe ceny na podstawie typu EBS i pamięci (~ kalkulator.aws)

To prawie 4,5x oszczędności na samej infrastrukturze!

Teraz, gdy już znasz główne przyczyny i nadal czytasz ten post, bez zbędnych ceregieli, zagłębimy się w technologię.

Kontur

  1. Konfiguracja infrastruktury
  2. Konfigurowanie MongoDB
  3. Migracja zbiorcza
  4. Delta-sync w celu zlikwidowania opóźnienia przełącznika połączenia (nie dotyczy przestarzałych klastrów)

Ponieważ cała treść może być nieco wyczerpująca w jednym miejscu, podzielę to na 2 powiązane posty.

1. Konfiguracja infrastruktury

Wspomnę poniżej przewodnik dotyczący konfiguracji instancji z systemem RedHat Enterprise Linux 8 na AWS. Dzieje się tak, ponieważ MongoDB generalnie działa lepiej z systemem plików xfs. Oto artykuł, który pozwoli lepiej to zrozumieć.

Rozkręć instancję EC2

Użyłem pliku t3.small instancja dostarczana z 2 procesorami wirtualnymi i 2 GB pamięci RAM aczkolwiek możesz wybrać dowolną instancję.

Zaleca się, aby baza danych miała dostęp do co najmniej 1 GB pamięci RAM i 2 prawdziwe rdzenie ponieważ ma to bezpośredni wpływ na wydajność podczas buforowania i mechanizmów współbieżności obsługiwanych przez domyślny silnik WiredTiger . Możesz przeczytać więcej o uwagach produkcyjnych związanych z wymaganiami dotyczącymi pamięci RAM i procesora tutaj .

Przegląd konfiguracji:

  • System operacyjny:Redhat Enterprise Linux 8 (z procesorem x64 Intel)
  • Typ wystąpienia:t3.small
  • Pamięć:10 GB (os) + 30 GB (dane) + 3 GB (dzienniki) EBS tj. 3 oddzielne tomy

Zakładam, że znasz się na tworzeniu maszyny wirtualnej na AWS.

Teraz, gdy instancja będzie działać, przypisz elastyczny adres IP do niego, a następnie po prostu wykonaj zdalne logowanie do komputera.

Będziemy potrzebować elastycznego adresu IP aby ustawić publiczną nazwę hosta dla instancji

$ ssh -i <PEM_FILE> ec2-user@<ELASTIC_IP>

Podłącz dodatkowe woluminy

Dodaliśmy 2 dodatkowe woluminy EBS inne niż Root FS dla danych i dzienników, które nie zostały jeszcze zamontowane (Pamiętasz 30Gb i 3Gb? ). Możesz wyświetlić listę bloków głośności za pomocą,

$ sudo lsblk

Dodatkowe woluminy zostaną wyświetlone zaraz za blokiem głównym (patrz strzałki)

Na powyższym obrazku widać, że dodatkowe woluminy są nazwane

  1. xvdb (30 GB miejsca do przechowywania danych)
  2. xvdc (3 GB miejsca do przechowywania dzienników)

Teraz utwórzmy systemy plików w tych woluminach.

$ sudo mkfs.xfs -L mongodata /dev/xvdb
$ sudo mkfs.xfs -L mongologs /dev/xvdc

-L to opcja aliasu do ustawienia etykiety woluminu

A następnie zamontuj woluminy.

$ sudo mount -t xfs /dev/xvdb /var/lib/mongo
$ sudo mount -t xfs /dev/xvdc /var/log/mongodb

Aby zmiany te zostały odzwierciedlone, system musi zostać ponownie uruchomiony. Dlatego teraz potrzebujemy również trwałości partycji, aby w przypadku niezamierzonego ponownego uruchomienia nie utracić pamięci bazy danych.

Możemy to osiągnąć, określając zasady montowania w pliku fstab. Więcej na ten temat możesz przeczytać tutaj.

Wcześniej skopiujmy UUID powyższych partycji (ponieważ są one unikalne i nie zmienią się po ponownym uruchomieniu systemu )

$ sudo blkid

Skopiuj identyfikatory UUID wymienione dla /dev/xvdb i /dev/xvdc . Zapoznaj się z „ETYKIETĄ” do identyfikacji bloku

Teraz otwórz /etc/fstab plik i wklej konfigurację w następującym formacie.

UUID=<COPIED_UUID_FOR_DATA> /var/lib/mongo xfs defaults,nofail 0 0
UUID=<COPIED_UUID_FOR_LOGS> /var/log/mongodb xfs defaults,nofail 0 0

Aktualizuj nazwę hosta

Nazwa hosta będzie używana do identyfikacji serwera bazy danych w sieci. Możesz użyć wyżej przypisanego elastycznego adresu IP lub Nazwa domeny (jeśli jest dostępna). Otwórz /etc/hostname pliku i dołącz wpis. Na przykład

ip-xx.us-east-2.compute.internal **<ELASTIC_IP> <DOMAIN_1> <DOMAIN_2>** ...

Zaktualizuj limity procesu (opcjonalnie)

Jest to opcjonalnie wymagane w celu kontrolowania maksymalnej liczby akceptowalnych połączeń przy jednoczesnym utrzymaniu stabilności systemu. Otwórz /etc/security/limits.conf plik i dodaj następujące wpisy.

* soft nofile 64000
* hard nofile 64000
* soft nproc 32000
* hard nproc 32000

Teraz, gdy wszystkie wymagania wstępne związane z infra są posortowane, uruchom ponownie instancji i przejdźmy do instalacji MongoDB.

1. Konfigurowanie MongoDB

Dodaj źródło repo

Utwórz plik /etc/yum.repos.d/mongodb-org.4.2.repo i dodaj następujące szczegóły repozytorium pakietów.

[mongodb-org-4.2]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.2/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.2.asc

Teraz zainstalujmy MongoDB.

$ sudo yum -y install mongodb-org

Tworzenie katalogów i ustawianie uprawnień

MongoDB domyślnie używa następujących ścieżek do przechowywania danych i dzienników wewnętrznych:

/var/lib/mongo → Dane
/var/log/mongodb → Dzienniki

Utwórz katalogi

$ sudo mkdir /var/lib/mongo
$ sudo mkdir /var/log/mongodb

Zmień uprawnienia użytkownika i grupy

$ sudo chown mongod:mongod /var/lib/mongo
$ sudo chown mongod:mongod /var/log/mongod

Utwórz użytkownika administratora

demon/usługa Mongod musi być najpierw uruchomiony, zanim przystąpimy do tworzenia użytkownika. Użyjmy domyślnej konfiguracji (przechowywanej w /etc/mongod.conf ) na razie i uruchom proces demona.

$ sudo -u mongod mongod -f /etc/mongod.conf

Powyższe polecenie uruchomi demona mongod w trybie rozwidlenia (domyślnie).

Teraz zalogujmy się na serwer i utwórzmy naszego pierwszego administratora.

Otwórz muszlę mongo

$ mongo

Użyj bazy danych „admin”, aby utworzyć administratora root

> use admin

Utwórz administratora

> db.createUser({user: "admin", pwd: "password", roles: [{role: "root", db: "admin"}]})

Utwórz zwykłego użytkownika

> db.createUser({user: "normal_user", pwd: "password", roles: [{role: "readWriteAnyDatabase", db: "admin"}]})

Na razie wyłącz serwer. Uruchomimy ponownie ze zmodyfikowaną konfiguracją

> db.shutDownServer()

Konfiguracja uwierzytelniania

W tym miejscu włączymy uwierzytelnianie bazy danych i zmodyfikujemy adres powiązania, aby nasz serwer był dostępny w domenie publicznej. Otwórz /etc/mongod.conf i wprowadź poniższe zmiany.

# network interfaces
net:
  port: 27017
  bindIp: 0.0.0.0 # accessible on the network address
security:
  authorization: enabled # creds will be required for making db operations

Zapisz konfigurację i uruchom ponownie serwer.

$ sudo -u mongod mongod -f /etc/mongod.conf

Testuj logowanie

Możesz sprawdzić, czy poświadczenia działają, używając,

$ mongo -u admin -p password

To tyle, jeśli chodzi o początkową konfigurację! Czekajcie na mój kolejny powiązany post na temat szczegółowego procesu migracji i wskazówek dotyczących utrzymywania gotowości produkcyjnej bazy danych.

PS Dziękujemy Piyushowi Kumarowi za pomoc w przygotowaniu tego posta!


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. mongodb nodejs - konwertowanie struktury kołowej

  2. Czy Mongoose obsługuje metodę Mongodb `findAndModify`?

  3. MongoDB - obiekty? Dlaczego potrzebuję _id łącznie?

  4. windows:rails:błąd instalacji bson_ext

  5. Jak połączyć tablice z wielu dokumentów w MongoDB?