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

Optymalizacja środowiska Linux pod kątem MongoDB

Wydajność MongoDB zależy od tego, jak wykorzystuje zasoby bazowe. Przechowuje dane na dysku, a także w pamięci. Wykorzystuje zasoby procesora do wykonywania operacji oraz sieć do komunikacji ze swoimi klientami. Powinny istnieć odpowiednie zasoby wspierające jego ogólną żywotność. W tym artykule omówimy różne wymagania dotyczące zasobów dla systemu baz danych MongoDB oraz sposoby ich optymalizacji pod kątem maksymalnej wydajności.

Wymagania dotyczące MongoDB

Oprócz dostarczania do bazy danych zasobów na dużą skalę, takich jak pamięć RAM i procesor, dostrajanie systemu operacyjnego może również w pewnym stopniu poprawić wydajność. Istotne narzędzia wymagane do ustanowienia środowiska MongoDB obejmują:

  1. Wystarczająca ilość miejsca na dysku
  2. Odpowiednia pamięć
  3. Doskonałe połączenie sieciowe.

Najpopularniejszym systemem operacyjnym dla MongoDB jest Linux, więc przyjrzymy się, jak zoptymalizować go pod kątem bazy danych.

Warunek ponownego uruchomienia.

Istnieje wiele technik strojenia, które można zastosować w Linuksie. Ponieważ jednak niektóre zmiany zachodzą bez ponownego uruchamiania hosta, zawsze dobrą praktyką jest ponowne uruchomienie po wprowadzeniu zmian, aby upewnić się, że zostaną zastosowane. W tej sekcji implementacje strojenia, które omówimy, to:

  1. Stos sieciowy
  2. Demon NTP
  3. Limit użytkowników Linuksa
  4. System plików i opcje
  5. Bezpieczeństwo
  6. Pamięć wirtualna

Stos sieciowy

Jak każde inne oprogramowanie, doskonałe połączenie sieciowe zapewnia lepszy interfejs wymiany żądań i odpowiedzi z serwerem. Jednak MongoDB nie jest faworyzowany z domyślnymi ustawieniami sieci jądra Linuksa. Jak sama nazwa wskazuje, jest to układ wielu warstw, które można podzielić na 3 główne:obszar użytkownika, obszar jądra i obszar urządzenia. Obszar użytkownika i obszar jądra są określane jako host, ponieważ ich zadania są wykonywane przez procesor. Obszar urządzenia jest odpowiedzialny za wysyłanie i odbieranie pakietów przez interfejs zwany kartą interfejsu sieciowego. Aby uzyskać lepszą wydajność w środowisku MongoDB, host powinien być ograniczony do limitu interfejsu sieciowego 1 Gb/s. W tym przypadku powinniśmy dostroić ustawienia względnej przepustowości, które obejmują:

  1. net.core.somaxconn (zwiększ wartość)
  2. net.ipv4.tcp_max_syn_backlog (zwiększ wartość)
  3. net.ipv4.tcp_fin_timeout (zmniejsz wartość)
  4. net.ipv4.tcp_keepalive_intvl (zmniejsz wartość)
  5. net.ipv4.tcp_keepalive_time (zmniejsz wartość)

Aby te zmiany były trwałe, utwórz nowy plik /etc/sysctl.d/mongodb-sysctl.conf, jeśli nie istnieje, i dodaj do niego te linie.

net.core.somaxconn = 4096
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_keepalive_time = 120
net.ipv4.tcp_max_syn_backlog = 4096

Następnie uruchom polecenie jako użytkownik root /sbin/sysctl -p, aby na stałe zastosować zmiany.

Demon NTP

Network Time Protocol (NTP) to technika, w której zegar oprogramowania systemu Linux jest synchronizowany z internetowymi serwerami czasu. MongoDB, będąc klastrem, jest zależny od spójności czasowej między węzłami. Z tego powodu ważne jest, aby NTP był uruchomiony na stałe na hostach MongoDB. Istotą konfiguracji NTP jest zapewnienie nieprzerwanej obsługi serwera przez określony czas po rozłączeniu sieci. Domyślnie NTP jest instalowany po stronie klienta, więc aby MongoDB mogła zainstalować NTP w systemie Linux ze smakiem Debian/Ubuntu, wystarczy uruchomić polecenie:

$ sudo apt-get install ntp

Możesz odwiedzić ntp.conf, aby zobaczyć konfigurację demona NTP dla różnych systemów operacyjnych.

Limit użytkowników Linuksa

Czasami błąd po stronie użytkownika może wpłynąć na cały serwer i system hosta. Aby tego uniknąć, system Linux jest zaprojektowany do podejmowania pewnych limitów zasobów systemowych dotyczących procesów wykonywanych na użytkownika. Ponieważ jest to oczywiste, nieodpowiednie będzie wdrażanie MongoDB w takich domyślnych konfiguracjach systemu, ponieważ wymagałoby to więcej zasobów niż domyślne ustawienie. Poza tym MongoDB jest często głównym procesem wykorzystania podstawowego sprzętu, dlatego też dominuje optymalizacja systemu Linux pod kątem takiego dedykowanego użycia. Baza danych może wtedy w pełni wykorzystać dostępne zasoby.

Jednak nie będzie wygodne wyłączenie tych ograniczeń lub ustawienie ich na nieograniczony stan. Na przykład, jeśli natkniesz się na brak pamięci procesora lub pamięci RAM, mały błąd może przerodzić się w ogromny problem i spowodować awarię innych funkcji - np. SSH, który jest niezbędny do rozwiązania początkowego problemu.

Aby uzyskać lepsze oszacowania, należy zrozumieć wymagania dotyczące ograniczeń na poziomie bazy danych. Na przykład oszacowanie liczby użytkowników, którzy będą wysyłać żądania do bazy danych i czasu przetwarzania. Możesz odwołać się do Kluczowych rzeczy do monitorowania dla MongoDB. Najbardziej preferowanym limitem dla maksymalnej liczby procesów użytkownika i otwartych plików jest 64000. Aby ustawić te wartości, utwórz nowy plik, jeśli nie istnieje jako /etc/security/limits.d i dodaj te wiersze

mongod       soft        nofile       64000
mongod       hard        nofile       64000
mongod       soft        nproc        64000
mongod       hard        nproc        64000

Aby zastosować te zmiany, uruchom ponownie mongod, ponieważ zmiany dotyczą tylko nowych powłok.

System plików i opcje

MongoDB wykorzystuje 3 typy systemów plików, tj. ext3, ext4 i XFS dla danych bazy danych na dysku. W przypadku silnika pamięci masowej WiredTiger stosowanego w MongoDB w wersji większej niż 3, najlepiej używać XFS zamiast ext4, co jest uważane za stwarzające pewne problemy ze stabilnością, podczas gdy ext3 jest również unikane ze względu na słabą wydajność wstępnej alokacji. MongoDB nie korzysta z domyślnej techniki systemu plików polegającej na aktualizowaniu metadanych czasu dostępu, jak w przypadku innych systemów. Dlatego możesz wyłączyć aktualizacje czasu dostępu, aby zaoszczędzić na niewielkiej ilości aktywności we/wy dysku wykorzystywanej przez te aktualizacje.

Można to zrobić, dodając flagę noatime do pola opcji systemu plików w pliku etc/fstab dla dysku obsługującego dane MongoDB.

$ grep "/var/lib/mongo" /proc/mounts
/dev/mapper/data-mongodb /var/lib/mongo ext4 rw, seclabel, noatime, data=ordered 0 0

Ta zmiana może zostać zrealizowana tylko po ponownym uruchomieniu lub ponownym uruchomieniu MongoDB.

Bezpieczeństwo

Wśród kilku funkcji bezpieczeństwa, jakie ma system Linux, na poziomie jądra znajduje się Linux ze wzmocnionymi zabezpieczeniami. Jest to implementacja szczegółowej obowiązkowej kontroli dostępu. Stanowi pomost do polityki bezpieczeństwa w celu określenia, czy operacja powinna być kontynuowana. Niestety, wielu użytkowników Linuksa ustawia ten moduł kontroli dostępu tylko na ostrzeżenie lub całkowicie go wyłącza. Jest to często spowodowane pewnymi niepowodzeniami, takimi jak nieoczekiwany błąd odmowy uprawnień. Ten moduł, o ile wiele osób go ignoruje, odgrywa ważną rolę w ograniczaniu lokalnych ataków na serwer. Gdy ta funkcja jest włączona, a tryby korespondentów ustawione na pozytywne, zapewni to bezpieczne tło dla MongoDB. Dlatego powinieneś włączyć tryb SELinux, a także zastosować tryb Wymuszania, szczególnie na początku instalacji. Aby zmienić tryb SELinux na Wymuszanie:uruchom polecenie

$ sudo setenforce Enforcing

Możesz sprawdzić działający tryb SELinux, uruchamiając

$ sudo getenforce
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

Pamięć wirtualna

Stosunek zabrudzenia

MongoDB wykorzystuje technologię pamięci podręcznej, aby usprawnić szybkie pobieranie danych. W takim przypadku tworzone są brudne strony i do ich przechowywania będzie potrzebna pewna ilość pamięci. Współczynnik zabrudzenia staje się zatem procentem całkowitej pamięci systemowej, która może pomieścić brudne strony. W większości przypadków wartości domyślne mieszczą się w przedziale (25 - 35)%. Jeśli ta wartość zostanie przekroczona, strony są zapisywane na dysku i powodują twardą pauzę. Aby tego uniknąć, możesz ustawić jądro tak, aby zawsze opróżniało dane przez inny współczynnik określany jako dirty_background_ratio, którego wartość waha się między (10% - 15%) do dysku w tle, bez konieczności tworzenia twardej pauzy.

Celem jest zapewnienie wysokiej jakości wykonania zapytań. W związku z tym można zmniejszyć współczynnik tła, jeśli system bazy danych będzie wymagał dużej ilości pamięci. Jeśli dozwolona jest twarda pauza, może dojść do duplikatów danych lub niektórych danych może nie zostać nagrany w tym czasie. Możesz również zmniejszyć rozmiar pamięci podręcznej, aby uniknąć częstego zapisywania danych na dysku w małych partiach, co może zwiększyć przepustowość dysku. Aby sprawdzić aktualnie uruchomioną wartość, możesz uruchomić to polecenie:

$ sysctl -a | egrep “vm.dirty.*_ratio”

a otrzymasz coś takiego.

vm.dirty_background_ratio = 10
vm.dirty_ratio = 20

Zamień

Jest to wartość z zakresu od 1 do 100, dla której można wpływać na zachowanie menedżera pamięci wirtualnej. Ustawienie jej na 100 oznacza wymuszenie zamiany na dysk, a ustawienie na 0 nakazuje jądru zamianę tylko w celu uniknięcia problemów z brakiem pamięci. Domyślny zakres dla systemu Linux to 50–60, z czego nie jest odpowiedni dla systemów baz danych. W moim własnym teście ustawienie wartości od 0 do 10 jest optymalne. Zawsze możesz ustawić tę wartość w /etc/sysctl.conf

vm.swappiness = 5

Następnie możesz sprawdzić tę wartość, uruchamiając polecenie

$ sysctl vm.swappiness

Aby zastosować te zmiany, uruchom polecenie /sbin/sysctl -p lub uruchom ponownie system.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Jak podłączyć lokalną bazę danych Mongo do dockera

  2. Jak zastosować ograniczenia w MongoDB?

  3. Aktualizowanie tablicy zagnieżdżonej wewnątrz tablicy mongodb

  4. MongoDB - jak zapytać o zagnieżdżony element w kolekcji?

  5. Jak dynamicznie tworzyć schematy z mangusty?