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

Jak przejść do produkcji z MongoDB — dziesięć najważniejszych wskazówek

Po pomyślnym opracowaniu aplikacji, a przed poświęceniem się produkcji MongoDB, skorzystaj z tych krótkich wskazówek, aby zapewnić płynny i wydajny przepływ, a także osiągnąć optymalną wydajność.

1) Opcje wdrażania

Wybór odpowiedniego sprzętu

Aby uzyskać optymalną wydajność, lepiej jest używać dysku SSD niż dysku twardego. Należy zadbać o to, czy pamięć ma charakter lokalny czy zdalny i podjąć odpowiednie środki. Lepiej jest używać RAID do ochrony defektów sprzętowych i schematu odzyskiwania, ale nie polegaj na nim całkowicie, ponieważ nie zapewnia żadnej ochrony przed niepożądanymi awariami. Do wykonywania na dyskach RAID-10 jest dobrym rozwiązaniem pod względem wydajności i dostępności, której często brakuje na innych poziomach RAID. Właściwy sprzęt jest elementem składowym Twojej aplikacji, zapewniającym zoptymalizowaną wydajność i pozwalającym uniknąć poważnych niepowodzeń.

Hosting w chmurze

Dostępnych jest wielu dostawców chmury, którzy oferują wstępnie zainstalowane hosty baz danych MongoDB. Wybór najlepszego wyboru to podstawa rozwoju Twojej aplikacji i wywarcia pierwszego wrażenia na rynku docelowym. MongoDB Atlas to jeden z możliwych wyborów, który oferuje kompletne rozwiązanie dla interfejsu w chmurze z funkcjami takimi jak wdrażanie węzłów i migawka danych przechowywanych w Amazon S3. ClusterControl to kolejna dobra dostępna opcja ułatwiająca wdrażanie i skalowanie. Który oferuje wiele funkcji, takich jak łatwe dodawanie i usuwanie węzłów, zmiana rozmiaru instancji i klonowanie klastra produkcyjnego. Możesz wypróbować ClusterControl tutaj bez opłat. Inne dostępne opcje to RackSpace ObjectRocket i MongoStitch.

2) RAM

Często używane elementy są buforowane w pamięci RAM, dzięki czemu MongoDB może zapewnić optymalny czas odpowiedzi. Pamięć RAM zwykle zależy od ilości danych, które zamierzasz przechowywać, liczby kolekcji i indeksów. Upewnij się, że masz wystarczająco dużo pamięci RAM, aby pomieścić indeksy, w przeciwnym razie drastycznie wpłynie to na wydajność aplikacji w środowisku produkcyjnym. Więcej pamięci RAM oznacza mniej błędów strony i lepszy czas odpowiedzi.

3) Indeksowanie

W przypadku aplikacji, które zawierają chroniczne żądania zapisu, indeksowanie odgrywa nadrzędną rolę. Zgodnie z dokumentacją MongoDB:

„Jeśli operacja zapisu modyfikuje zindeksowane pole, MongoDB aktualizuje wszystkie indeksy, które mają zmodyfikowane pole jako klucz”

Dlatego zachowaj ostrożność podczas wybierania indeksów, ponieważ może to wpłynąć na wydajność bazy danych.

Przykład indeksowania:przykładowy wpis w bazie danych restauracji

{
  "address": {
     "building": "701",
     "street": "Harley street",
     "zipcode": "71000"
  },
  "cuisine": "Bakery",
  "grades": [
     { "date": { "$date": 1393804800000 }, "grade": "A", "score": 2 },
     { "date": { "$date": 1378857600000 }, "grade": "A", "score": 6 },
     { "date": { "$date": 1358985600000 }, "grade": "A", "score": 10 },
     { "date": { "$date": 1322006400000 }, "grade": "A", "score": 9 },
     { "date": { "$date": 1299715200000 }, "grade": "B", "score": 14 }
  ],
  "name": "Bombay Bakery",
  "restaurant_id": "187521"
}
  1. Tworzenie indeksu w jednym polu

    > db.restaurants.createIndex( { "cuisine": 1 } );
    {
         "createdCollectionAutomatically" : false,
         "numIndexesBefore" : 1,
         "numIndexesAfter" : 2,
         "ok" : 1
    }

    W powyższym przykładzie indeks kolejności rosnącej jest tworzony na polu kuchni.

  2. Tworzenie indeksu na wielu polach

    > db.restaurants.createIndex( { "cuisine": 1 , "address.zipcode": -1 } );
    {
            "createdCollectionAutomatically" : false,
            "numIndexesBefore" : 2,
            "numIndexesAfter" : 3,
            "ok" : 1
    }

    Tutaj tworzony jest indeks złożony na polach kuchni i kodu pocztowego. Liczba -ve określa porządek malejący.

4) Bądź przygotowany na sharding

MongoDB dzieli dane na różne maszyny przy użyciu mechanizmu zwanego shardingiem. Nie zaleca się dodawania shardingu na początku, chyba że oczekujesz obszernych zestawów danych. Pamiętaj, aby utrzymać wydajność aplikacji w linii, potrzebujesz dobrego klucza shardingu, zgodnie z wzorcami danych, ponieważ ma to bezpośredni wpływ na czas odpowiedzi. Równoważenie danych między fragmentami jest automatyczne. Jednak lepiej być przygotowanym i mieć odpowiedni plan. Dzięki temu możesz przeprowadzić konsolidację zawsze, gdy wymaga tego Twoja aplikacja.

5) Najlepsze praktyki dotyczące konfiguracji systemu operacyjnego

  • System plików XFS
    • Jest to wysoce skalowalny, wysokowydajny 64-bitowy system plików z księgowaniem. Poprawia wydajność we/wy, umożliwiając mniejszą i większą liczbę operacji we/wy.
  • Ustaw limit deskryptorów plików.
  • Wyłącz przezroczyste duże strony i niejednolitą pamięć dostępu (NUMA).
  • Zmień domyślny czas utrzymywania aktywności TCP na 300 sekund (dla Linuksa) i 120 sekund (dla Azure).

Wypróbuj te polecenia, aby zmienić domyślny czas utrzymywania aktywności;

Dla Linuksa

sudo sysctl -w net.ipv4.tcp_keepalive_time=<value>

Dla Windows

Wpisz to polecenie w wierszu polecenia jako administrator, gdzie jest wyrażona w systemie szesnastkowym (np. 120000 to 0x1d4c0):

reg add HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\ /t REG_DWORD /v KeepAliveTime /d <value>

6) Zapewnienie wysokiej dostępności za pomocą replikacji

Przejście na produkcję bez replikacji może spowodować nagłe awarie aplikacji. Replikacja rozwiązuje problem w przypadku awarii węzła. Zarządzaj operacjami odczytu i zapisu dla drugorzędnych instancji MongoDB zgodnie z potrzebami aplikacji.

Pamiętaj o tych rzeczach podczas replikacji:

  • Aby uzyskać wysoką dostępność, wdróż zestaw replik w co najmniej trzech centrach danych.
  • Upewnij się, że instancje MongoDB mają 0 lub 1 głos.
  • Zapewnij pełną dwukierunkową łączność sieciową między wszystkimi instancjami MongoDB.

Przykład tworzenia zestawu replik z 4 lokalnymi instancjami MongoDB:

  1. Tworzenie 4 lokalnych instancji MongoDB

    Najpierw utwórz katalogi danych

    mkdir -p /data/m0
    mkdir -p /data/m1
    mkdir -p /data/m2
    mkdir -p /data/m3
  2. Uruchom 4 lokalne instancje

    mongod --replSet cluster1 --port 27017 --dbpath /data/m0
    mongod --replSet cluster2 --port 27018 --dbpath /data/m1
    mongod --replSet cluster1 --port 27019 --dbpath /data/m2
    mongod --replSet cluster1 --port 27020 --dbpath /data/m3
  3. Dodaj instancje do klastra i zainicjuj

    mongo myhost:34014
    myConfig = {_id: ‘cluster1’, members: [
        {_id: 0, host: ‘myhost1:27017’},
        {_id: 1, host: ‘myhost2:27018’},
        {_id: 2, host: ‘myhost3:27019’},
        {_id: 3, host: ‘myhost4:27020’}]
    }
    rs.initiate(myConfig);

Środki bezpieczeństwa

7) Bezpieczne maszyny

Otwarte porty na maszynach hostujących MongoDB są podatne na różne złośliwe ataki. Ponad 30 tysięcy baz danych MongoDB zostało skompromitowanych w ataku ransomware z powodu opóźnień w odpowiedniej konfiguracji zabezpieczeń. Podczas pracy produkcyjnej zamknij swoje publiczne porty serwera MongoDB. Należy jednak pozostawić jeden port otwarty dla celów SSh.

Włączanie uwierzytelniania w instancji MongoDB:

  1. Uruchom plik mongod.conf w swoim ulubionym edytorze.

  2. Dołącz te wiersze na końcu pliku konfiguracyjnego.

    security:
          authorization: enabled
  3. Dołącz te wiersze na końcu pliku konfiguracyjnego.

    service mongod restart
  4. Potwierdź status

    service mongod status

Ograniczanie dostępu z zewnątrz

Otwórz ponownie plik mongod.conf, aby ustawić ograniczony dostęp IP do serwera.

bind_ip=127.0.0.1

Dodanie tej linii oznacza, że ​​możesz uzyskać dostęp do serwera tylko przez 127.0.0. (który jest hostem lokalnym). Możesz także dodać wiele adresów IP w opcji wiązania.

bind_ip=127.0.0.1,168.21.200.200

Oznacza to, że możesz uzyskać dostęp z hosta lokalnego i sieci prywatnej.

8) Ochrona hasłem

Aby dodać dodatkową warstwę bezpieczeństwa do swoich maszyn, włącz kontrolę dostępu i wymuś uwierzytelnianie. Pomimo tego, że ograniczyłeś serwer MongoDB do przyjmowania połączeń ze świata zewnętrznego, nadal istnieje możliwość przedostania się złośliwych skryptów na Twój serwer. Dlatego nie wahaj się ustawiać nazwy użytkownika/hasła do swojej bazy danych i przydzielać wymagane uprawnienia. Włączona kontrola dostępu pozwoli użytkownikom wykonywać tylko czynności określone przez ich role.

Oto kroki, aby utworzyć użytkownika i przypisać dostęp do bazy danych do określonych ról.

W pierwszej kolejności utworzymy użytkownika (w tym przypadku jest to administrator) do zarządzania wszystkimi użytkownikami i bazami danych, a następnie utworzymy konkretnego właściciela bazy danych z uprawnieniami tylko do odczytu i zapisu w jednej instancji bazy danych MongoDB.

Utwórz administratora do zarządzania innymi użytkownikami instancji bazy danych

  1. Otwórz powłokę Mongo i przejdź do bazy danych administratora:

    use admin
  2. Utwórz użytkownika dla bazy danych administratora

    db.createUser({ user: "admin", pwd: "admin_password", roles: [{ role: "userAdminAnyDatabase", db: "admin" }] })
  3. Uwierzytelnij nowo utworzonego użytkownika

    db.auth("admin", "admin_password")
  4. Tworzenie konkretnego użytkownika instancji:

    use database_1
    db.createUser({ user: "user_1", pwd: "your_password", roles: [{ role: "dbOwner", db: "database_1" }] })
  5. Teraz sprawdź, czy użytkownik został pomyślnie utworzony, czy nie.

    db.auth("user_1", "your_password")
    show collections

Otóż ​​to! Pomyślnie zabezpieczyłeś swoje instancje bazy danych za pomocą odpowiedniego uwierzytelniania. Możesz dodać dowolną liczbę użytkowników, wykonując tę ​​samą procedurę.

9) Szyfrowanie i ochrona danych

Jeśli używasz Wiredtiger jako silnika pamięci, możesz użyć jego szyfrowania w konfiguracji spoczynkowej, aby zaszyfrować dane. Jeśli nie, szyfrowanie powinno być wykonywane na hoście przy użyciu systemu plików, urządzeń lub szyfrowania fizycznego.

10) Monitoruj swoje wdrożenie

Po zakończeniu wdrażania MongoDB w środowisku produkcyjnym należy śledzić działania wydajnościowe, aby zapobiec wczesnym możliwym problemom. Istnieje szereg strategii, które możesz dostosować, aby monitorować wydajność danych w środowisku produkcyjnym.

  • MongoDB zawiera narzędzia, które zwracają statystyki dotyczące wydajności i aktywności instancji. Narzędzia służą do wskazywania problemów i analizowania normalnych operacji.

  • Użyj mongostatu, aby zrozumieć rozmieszczenie typów operacji i planowanie wydajności.

  • Do śledzenia raportów i czynności odczytu i zapisu zalecany jest mongotop.

mongotop 15

To polecenie zwróci dane wyjściowe co 15 sekund.

                     ns    total    read    write          2018-04-22T15:32:01-05:00
   admin.system.roles      0ms     0ms      0ms
 admin.system.version      0ms     0ms      0ms
             local.me      0ms     0ms      0ms
       local.oplog.rs      0ms     0ms      0ms
   local.replset.minvalid  0ms     0ms      0ms
    local.startup_log      0ms     0ms      0ms
 local.system.indexes      0ms     0ms      0ms
  local.system.namespaces  0ms     0ms      0ms
 local.system.replset      0ms     0ms      0ms     
                     ns    total    read    write          2018-04-22T15:32:16-05:00
   admin.system.roles      0ms     0ms      0ms
 admin.system.version      0ms     0ms      0ms
             local.me      0ms     0ms      0ms
       local.oplog.rs      0ms     0ms      0ms
   local.replset.minvalid  0ms     0ms      0ms
    local.startup_log      0ms     0ms      0ms
 local.system.indexes      0ms     0ms      0ms
  local.system.namespaces  0ms     0ms      0ms
 local.system.replset      0ms     0ms      0ms

Usługa monitorowania MongoDB (MMS) to kolejna dostępna opcja, która monitoruje klaster MongoDB i ułatwia podgląd działań związanych z wdrażaniem produkcyjnym.

Oczywiście jest też ClusterControl firmy Manynines, system automatyzacji i zarządzania bazami danych typu open source. ClusterControl umożliwia łatwe wdrażanie klastrów ze zautomatyzowanymi ustawieniami bezpieczeństwa i ułatwia rozwiązywanie problemów z bazą danych, zapewniając łatwą w użyciu automatyzację zarządzania, która obejmuje naprawę i odzyskiwanie uszkodzonych węzłów, automatyczne aktualizacje i nie tylko. Możesz zacząć od (bezpłatnej na zawsze) wersji Community Edition, za pomocą której możesz wdrażać i monitorować MongoDB, a także tworzyć niestandardowych doradców, aby dostosować monitorowanie do tych aspektów, które są specyficzne dla Twojej konfiguracji. Pobierz go za darmo tutaj.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Jak załadować 100 milionów rekordów do MongoDB za pomocą Scali w celu przetestowania wydajności?

  2. MongoDB:Pobierasz tylko dokumenty utworzone w ciągu ostatnich 24 godzin?

  3. zapytanie mongodb bez nazwy pola

  4. Jak uzyskać dostęp do istniejącej kolekcji za pomocą Mongoose?

  5. Kopiuj/klonuj kolekcję w MongoDB