Geograficznie rozproszony system plików z preferowaną lokalizacją

11

Tworzę aplikację, która musi rozpowszechniać standardowy serwer plików w kilku witrynach za pośrednictwem sieci WAN. Zasadniczo każda witryna musi napisać wiele różnych plików o różnych rozmiarach (niektóre w zakresie 100 MB, ale najbardziej małe), a aplikacja jest napisana w taki sposób, aby kolizje nie stanowiły problemu. Chciałbym skonfigurować system spełniający następujące kwalifikacje:

  1. Każda witryna może przechowywać pliki we wspólnej „przestrzeni nazw”. Oznacza to, że wszystkie pliki byłyby wyświetlane w tym samym systemie plików.
  2. Każda witryna nie wysyła danych przez sieć WAN, chyba że jest to konieczne. Tzn. Po każdej stronie sieci WAN byłaby pamięć lokalna, która byłaby „scalona” w ten sam logiczny system plików.
  3. Linux i bezpłatny ($$$) to plus

Zasadniczo coś w rodzaju centralnego udziału NFS spełniłoby większość wymagań, jednak nie pozwoliłoby, aby lokalnie zapisane dane pozostały lokalne. Wszystkie dane ze zdalnych stron sieci WAN byłyby cały czas kopiowane lokalnie.

Zajrzałem do Lustera i przeprowadziłem z nim kilka udanych testów, jednak wydaje się, że dystrybucja plików jest dość jednolita w całej rozproszonej pamięci. Przejrzałem dokumentację i nie znalazłem niczego, co automatycznie „wolałoby” lokalną pamięć masową niż zdalną. Nawet coś, co poszło z najmniejszym opóźnieniem, byłoby w porządku. To działałoby przez większość czasu, co spełniałoby wymagania tej aplikacji.


Niektóre odpowiedzi na niektóre pytania zadane poniżej:

  • Węzły serwera: 2 lub 3, aby rozpocząć. Każdy serwer miałby dziesiątki jednoczesnych klientów do odczytu / zapisu.
  • Topologia WAN jest pełna i niezawodna. (duża korporacja, koszt nie jest tak ograniczający jak biurokracja)
  • Przełączanie awaryjne klienta: Właściwie nie myślałem o przełączeniu awaryjnym klientów (głównie dlatego, że nasza obecna aplikacja nie robi tego tylko w jednej witrynie). Podejrzewam, że praktyczną odpowiedzią jest to, że serwery w każdej geograficznie rozproszonej lokalizacji powinny stanowić pojedyncze punkty awarii dla obsługiwanych klientów. Chociaż, jeśli zastanawiasz się nad czymś konkretnym, myślę, że byłoby to dość istotne dla dyskusji.
  • Roll-my-own: Myślałem o rsync / unison, ale potrzebowałbym trochę wymyślnej logiki, aby „dynamiczna” część tego dzieła działała płynnie. To znaczy, plik wydaje się być lokalny, ale jest pobierany tylko na żądanie.
  • MS-DFS: Z pewnością wydaje się, że powinienem przyjrzeć się temu. Moim głównym problemem może być niepewność co do konfiguracji / niezawodności / wydajności serwera NFS w systemie Windows, ponieważ wielu klientów łączących się to klienci NFS.
dpb
źródło
Chaged wymaga Linuxa i Free to a Plus.
dpb

Odpowiedzi:

5

Wstyd o wymaganiach dotyczących Linuksa. To właśnie robi Windows DFS. Od 2003 R2 robi to również na poziomie bloków.

Chris Thorpe
źródło
Chris, dzięki za odpowiedź. Myślę, że DFS jest właściwie tym, czego szukam, choć w systemie Windows. Z pewnością coś dla mnie.
dpb,
DFS nie działa na poziomie bloków. Usługa replikacji nie jest transakcyjna na podstawie plików.
eckes
4

Parę pytań:

  • Ile węzłów „serwerowych” myślisz o uczestnictwie w tej rzeczy?

  • Jak wygląda topologia łączności WAN - hub and mówił, pełna siatka? Jaka jest niezawodność?

  • Czy oczekujesz, że klienci przejdą w tryb failover na geograficznie nielokalny serwer w przypadku awarii serwera lokalnego?

System Windows DFS-R z pewnością byłby tym, czego szukasz, choć wiąże się to z potencjalnie dużymi kosztami licencjonowania.

Mówisz, że kolizje nie stanowią problemu i nie potrzebujesz rozproszonego menedżera blokady, więc możesz to zrobić za pomocą narzędzi użytkownika, takich jak rsync lub Unison, i po prostu wyeksportować wynikowy plik z NFS do lokalnych klientów. Jest to brzydkie i musiałbyś poradzić sobie ze zbijaniem jakiegoś systemu, który poradziłby sobie z generowaniem topologii replikacji i uruchamianiem narzędzi przestrzeni użytkownika, ale z pewnością byłby tani w miarę wzrostu kosztów licencji.

Evan Anderson
źródło
Dzięki za odpowiedź, Evan, zaktualizowałem swoje pytanie o dane, o które prosiłeś. Interesuje mnie twój pomysł na unison / rsync, ale nie bardzo rozumiem, w jaki sposób obsłużony byłby aspekt dynamiczny. (Nie mam dużego doświadczenia z Unison, tylko rsync).
dpb,
@dpb: Nie zrozumiałem tego wymogu w oryginalnej edycji. Microsoft DFS-R też tego nie zrobi. Zachowanie pobierania na żądanie będzie wymagało czegoś „aktywnego” w systemie plików, aby przechwycić żądania odczytu dla kodów pośredniczących plików, które nie mają buforowanych danych lokalnych, nie pobierają danych i nie wypełniają odczytu. Nie znam żadnego geograficznie rozproszonego systemu plików o takim zachowaniu - to bardziej jak HSM.
Evan Anderson
Dla osób tak bladych jak ja: en.wikipedia.org/wiki/Hierarchical_storage_management . Jeszcze raz dziękuję @Evan. Nie jestem tak bardzo zainteresowany dynamicznym rozmieszczaniem podstawowej lokalizacji pamięci, jak jej początkowym wyborem w sposób dynamiczny. Myślę, że HSM brzmi bardzo fajnie, ale fajna część tego jest dość przesadna w stosunku do tego, co robię.
dpb
3

Czy rozważałeś AFS ?

Andrew File System (AFS) to rozproszony sieciowy system plików, który wykorzystuje zestaw zaufanych serwerów do prezentacji jednolitej przestrzeni nazw plików przezroczystej dla wszystkich stacji roboczych.

Jak rozumiem, większość ostatnich prac rozwojowych stała za projektem OpenAFS .

Nie mogę udawać, że jestem na tyle zaznajomiony z projektem, aby wiedzieć, czy dostępna jest funkcja „preferowanej lokalizacji”, ale poza tym brzmi to jak dobre dopasowanie.

Insyte
źródło
1
Zobacz także CodaFS: en.wikipedia.org/wiki/Coda_%28file_system%29
blank3
1

Czy oglądałeś baseny OST w Luster?

Nie będzie to automatyczne, ale dzięki pulom OST możesz przypisywać katalogi / pliki do określonych OST / OSS - zasadniczo alokacja pamięci oparta na zasadach, zamiast domyślnego round-robin / striping w OST.

Możesz więc skonfigurować katalog dla każdej witryny i przypisać ten katalog do lokalnych OST dla tej witryny, co przekieruje wszystkie operacje we / wy do lokalnych OST. Nadal będzie to globalna przestrzeń nazw.

Wiele pracy wymaga poprawienia Lustera w stosunku do połączeń WAN (lokalne serwery buforujące itp.), Ale wszystko to wciąż jest w fazie intensywnego rozwoju AFAIK.

James
źródło
Dzięki @James, to jest dokładnie to, czego szukam. Nie podoba mi się obszar nazw Munged na najwyższym poziomie (przypisywanie określonych katalogów do puli OST), ale być może byłoby to w porządku. Przynajmniej dobrze jest wiedzieć, jaki jest przypadek użycia i ograniczenia w Luster. Dzięki jeszcze raz!
dpb
1

Może NFS, ale z Cachefs na serwerach aplikacji osiągną twoją część twojego celu. Rozumiem, że wszystko, co napisano, nadal trafi na serwer centralny, ale przynajmniej odczyty mogą zostać buforowane lokalnie. Może to potencjalnie znacznie opóźnić odczyt w zależności od wzorców użytkowania.

Warto też przyjrzeć się mabye UnionFS. W związku z tym myślę, że każda lokalizacja byłaby eksportem NFS, a następnie można użyć UnionFS w każdej lokalizacji, aby to i wszystkie inne podłączenia NFS z tej lokalizacji były wyświetlane jako jeden system plików. Nie mam z tym jednak doświadczenia.

Kyle Brandt
źródło
Dzięki @Kyle, nie wiedziałem o UnionFS, wraz z agresywnym buforowaniem, NFS może być dobrym rozwiązaniem. Wydaje mi się, że utrzymanie liczby lokalizacji może sprawić więcej problemów, ale przyjrzę się temu, zanim zdecyduję.
dpb
0

Możesz zajrzeć do DRBD w celu zreplikowania dysków. http://www.drbd.org/ . Jest to linuksowe rozwiązanie wysokiej dostępności, które właśnie znalazło się w jądrze.

Ma to jednak pewne ograniczenia:

  1. Można skonfigurować tylko dwa węzły
  2. Sieć WAN może być zbyt zawodna, aby zapewnić niezawodność DRBD.

źródło
Ciekawy pomysł, ale nie sądzę, że dałbym mojej aplikacji cokolwiek nad innymi rozproszonymi systemami plików. (połysk, glusterfs itp.). Dzięki za opublikowanie ...
dpb
0

Jeśli chcesz to uprościć, spójrz na rsync, rozwiązuje wiele problemów i może być skryptowany.

The Unix Janitor
źródło
0

Sprawdź chironfs .

Może może zrobić to, co chcesz, na podstawie systemu plików.

Dom
źródło
0

Btsync to kolejne rozwiązanie, z którym miałem dobre doświadczenia. Używa protokołu BitTorrent do przesyłania plików, więc im więcej masz serwerów, tym szybciej synchronizujesz nowe pliki.

W przeciwieństwie do rozwiązania opartego na rsync, wykrywa kiedy zmieniasz nazwy plików / folderów i zmienia ich nazwy na wszystkich węzłach zamiast usuwania / kopiowania.

Twoi klienci btsync mogą następnie udostępniać foldery w sieci lokalnej.

Jedynym minusem, który znalazłem (w porównaniu do MS DFS) jest to, że nie wykryje lokalnej kopii pliku. Zamiast tego zinterpretuje go jako nowy plik przesłany do wszystkich peerów.

Do tej pory btsync wydaje się być najlepszym rozwiązaniem do synchronizacji i można go zainstalować na urządzeniach z Windows, Linux, Android i ARM (np. NAS)

Alex G.
źródło