Mam mały zestaw replik trzech serwerów mongod (16GB RAM każdy, przynajmniej 4 rdzenie procesora i prawdziwe dyski twarde) i jeden dedykowany arbiter. Replikowane dane zawierają obecnie około 100 000 000 rekordów. Prawie wszystkie te dane znajdują się w jednej kolekcji z indeksem na _id
(automatycznie wygenerowany identyfikator Mongo) i date
, który jest natywnym polem daty w Mongo. Okresowo usunąć stare wpisy z tej kolekcji za pomocą indeksu datę, coś takiego (od powłoki Mongo):MongoDB bardzo wolno usuwa
db.repo.remove({"date" : {"$lt" : new Date(1362096000000)}})
to działa, ale działa bardzo, bardzo powoli. Jeden z moich węzłów ma wolniejsze I/O niż dwa pozostałe, mając tylko jeden napęd SATA. Kiedy ten węzeł jest pierwotny, usuwanie trwa około 5-10 dokumentów/sek. Korzystając z polecenia rs.stepDown(), zdegradowałem wolniejszą podstawową i wymuszono wybory, aby uzyskać wersję podstawową z lepszymi wejściami/wyjściami. Na tym serwerze otrzymuję około 100 dokumentów/sek.
Moje główne pytanie brzmi: czy powinienem się tym przejmować? Nie mam numerów sprzed replikacji, ale wiem, że usuwanie było znacznie szybsze. Zastanawiam się, czy synchronizacja zestawu replik powoduje oczekiwanie I/O, czy też jest jakaś inna przyczyna. Byłbym całkowicie zadowolony z tymczasowego wyłączenia aktualizacji synchronizacji i indeksu, dopóki nie zakończy się instrukcja usuwania, ale nie wiem jak to zrobić w tej chwili. Z jakiegoś powodu, kiedy wyłączę dwa z trzech węzłów, pozostawiając tylko jeden węzeł i arbitra, pozostały węzeł jest zdegradowany, a zapisy są niemożliwe (czy arbiter nie powinien tego rozwiązać?).
Aby podać ogólne informacje o wydajności, po upuszczeniu i ponownym utworzeniu indeksu daty skanowanie wszystkich dokumentów 100M trwa około 15 minut.
powód, dla którego nie można wyłączyć dwa swoimi czterema węzłami jest to, że nie może być podstawowym bez większością dostępnego zestawu. Dlaczego, tak przy okazji, macie czterech członków? Nie potrzebujesz arbitra z trzema węzłami w zestawie replik. –
Mam cię - mam tylko cztery węzły w tej chwili, ponieważ 5th węzeł brakuje dysku twardego i usuwa go z klastra :) Jak na ironię, ja wychowany arbitra pomóc gwarancję zawsze będzie zwycięzcą w wyborach master. W każdym razie, arbiter jest małą maszyną wirtualną, której używam również w przypadku innych niskich zasobów, takich jak serwery konfiguracji w innych klastrach. – SteveK
potrzebne arbitra, gdy miał cztery węzły (na pięć głosów), ale po wyjęciu piąty węzeł z zestawu replik należy usunąć arbitra, jak również tak, że trzeba będzie trzech członków lewo. –