Przez duże drzewo plików mam na myśli około 200 000 plików i cały czas rośnie. Jednak stosunkowo niewielka liczba plików jest zmieniana w każdej godzinie.
Przez dwukierunkowy rozumiem, że zmiany mogą wystąpić na jednym serwerze i muszą zostać przesunięte na drugi, więc rsync nie wydaje się odpowiedni.
Przez odległe rozumiem, że oba serwery są w centrach danych, ale geograficznie oddalone od siebie. Obecnie są tylko 2 serwery, ale z czasem mogą się one rozszerzać.
W czasie rzeczywistym jest ok, ponieważ istnieje niewielkie opóźnienie między synchronizacją, ale uruchamianie crona co 1-2 minuty nie wydaje się właściwe, ponieważ bardzo mała część plików może się zmieniać w dowolnej godzinie, a co dopiero w minutach.
EDYCJA : Działa na VPS, więc mogę być ograniczony rodzajami rzeczy na poziomie jądra, które mogę zrobić. Ponadto VPS nie są bogate w zasoby, więc unikałbym rozwiązań wymagających dużej ilości pamięci RAM (takich jak Gluster?).
Jakie jest najlepsze / najbardziej „akceptowane” podejście, aby to zrobić? Wydaje się, że byłaby to powszechna potrzeba, ale nie byłem jeszcze w stanie znaleźć ogólnie przyjętego podejścia, co było zaskakujące. (Szukam bezpieczeństwa mas.)
Natknąłem się na lsyncd, aby uruchomić synchronizację na poziomie zmiany systemu plików. To wydaje się sprytne, choć nie bardzo powszechne, i jestem trochę zdezorientowany różnymi podejściami lsyncd. Po prostu używa się lsyncd z rsync, ale wydaje się, że może to być niestabilne dla dwukierunkowości, ponieważ rsync nie ma pojęcia pamięci (np. Aby wiedzieć, czy usunięty plik na A powinien zostać usunięty na B, czy też jest to nowy plik na B które należy skopiować do A). LipSync wydaje się być tylko lsyncd + rsync realizacja, prawda?
Potem jest użycie lsyncd z csync2 , na przykład: https://icicimov.github.io/blog/devops/File-system-sync-with-Csync2-and-Lsyncd/ ... Skłaniam się ku temu podejściu, ale csync2 jest trochę dziwaczny, chociaż przeprowadziłem udany test. Obawiam się przede wszystkim, że nie udało mi się znaleźć wielu potwierdzeń społeczności dotyczących tej metody.
Ludzie tutaj wydają się bardzo lubić Unison, ale wygląda na to, że nie jest już aktywnie rozwijany i nie jest jasne, że ma automatyczny wyzwalacz, taki jak lsyncd.
Widziałem Glustera , ale może przesadziłem z tym, czego potrzebuję?
AKTUALIZACJA: fyi- skończyłem na oryginalnym rozwiązaniu, o którym wspomniałem: lsyncd + csync2. Wydaje się, że działa całkiem dobrze i podoba mi się podejście architektoniczne polegające na tym, że serwery są bardzo luźno połączone, dzięki czemu każdy serwer może działać w nieskończoność samodzielnie, niezależnie od jakości łącza między nimi.
Odpowiedzi:
Opcja DRBD w trybie Dual-Primary z serwerem proxy jest opcją.
źródło
Zamiast synchronizować, dlaczego nie udostępniać tego samego systemu plików przez NFS?
źródło
Wdrożenie rozproszonego systemu plików jest prawdopodobnie lepsze niż zhakowanie go razem z narzędziami i skryptami, zwłaszcza jeśli klaster serwerów się powiększy. Będziesz także mógł lepiej obsługiwać powalony węzeł.
Nie sądzę, żeby Gluster (lub AFS) w ogóle był przesadny.
źródło
W twoim przypadku poleciłbym kombinację DRBD w trybie dual-primary i gfs lub ocfs.
Wadą DRBD w dual-pierwotnym jest to, że będzie działał w trybie synchronicznym. Ale szybkość zapisu nie wydaje się tutaj ważna, prawda?
Alternatywą dla DRBD może być Soft-Raid1 wykorzystujący wiele (2+) celów iSCSI - ale wolałbym DRBD z dwoma węzłami.
źródło
Jak wykazano powyżej, dostępnych jest wiele rozwiązań, z których każde ma swoje zalety i wady.
Myślę, że rozważyłbym poddanie całego drzewa kontroli wersji ( na przykład Subversion ) i okresowe sprawdzanie / aktualizowanie z obu serwerów w zadaniach cron.
źródło
Właśnie skończyłem trochę poszukiwania tego samego, idę z niechęcią. Jednak nie wykonałem ani nie znalazłem żadnych testów wydajności.
źródło