Wdrażanie plików na wielu serwerach

11

Mamy centralne repozytorium plików w powiedzmy serwer-1 na /srv/www. Mamy też N liczbę serwerów. Chcemy, aby serwer-1 mógł wdrażać swoje pliki /srv/wwwna wszystkich serwerach tak szybko i wydajnie, jak to możliwe.

Czy istnieje coś takiego jak rsync, ale zamiast określać pojedynczy cel, określając klaster (N serwerów) celów?

Myślałem, że gitmoże działać, ale czy możemy też określić wiele pilotów do wypchnięcia?

Jakie jest najlepsze rozwiązanie, zakładając, że N serwerów może ostatecznie osiągnąć setki.

Justin
źródło
2
Zakładam, że sieciowy system plików nie jest możliwy?
cjc
stackoverflow.com/questions/849308/... za sztuczkę git do wypchnięcia wielu pilotów. Nie jestem jednak pewien co do setek.
cjc

Odpowiedzi:

14

Cóż, zarówno Twitter , jak i Facebook zaczęły używać bittorrent w swoich klastrach do dystrybucji nowych wersji kodu. W ten sposób są w stanie przesłać kod na dziesiątki tysięcy serwerów w bardzo krótkim czasie w porównaniu do oldskulowych scentralizowanych metod wdrażania.

Nie brzmi to tak, jakbyś był jeszcze na taką skalę, ale nie ma nic złego w projektowaniu systemu wdrażania, aby w najbliższym czasie nie stał się wąskim gardłem.

EEAA
źródło
1
Jak korzystają z Bittorrent?
Dragos
3
Zobacz artykuły, z którymi się łączyłem.
EEAA
@EEAA Twitter link jest zepsuty
gprasant
@ gprasant naprawiony.
EEAA
7

Nie polecam git dla skal, z którymi rozmawiasz. Może działać, ale osobiście widzę pewne braki w korzystaniu z tego modelu do pobierania.

Jest kilka rzeczy, które określają, jak najlepiej to zrobić:

  1. Jak duże repo musi zostać udostępnione.
  2. Jak szybko musi się zbiegać.

Aby uzyskać idealną zbieżność i maksymalną prędkość, musisz korzystać z sieciowego systemu plików, takiego jak NFSv4. Klastrowe systemy plików, o których wiem, nie skalują się do „wielu setek” węzłów, więc musi to być system plików sieciowych. To stwarza własne wyzwania, ale oznacza, że ​​osiągniesz konwergencję w momencie aktualizacji plików na głowie NFS.

Aby uzyskać szybką konwergencję, możesz użyć sztuczek rsync. Jeśli demon rsync zostanie ostatecznie związany z procesorem, z pewnością można umieścić kilka trzech serwerów rsync za modułem równoważenia obciążenia, takim jak haproxy. Połącz to z zadaniami crona, aby pobrać dane (lub inną metodą wyzwalania aktualizacji kodu), a możesz szybko uzyskać konwergencję.

W obu powyższych przypadkach dobrym pomysłem będzie umieszczenie centralnego repozytorium na łączach 10GbE w celu uzyskania maksymalnej przepustowości.

Alternatywą jest push-rsync, w którym jest uruchamiany z centralnego repozytorium w celu wypychania aktualizacji na twoje serwery. Nie zbiegnie się tak szybko jak jedno z powyższych, ale będzie bardziej przyjazny dla twojej wewnętrznej przepustowości. Użyj większej liczby hostów, przesuwając do podzielonych zakresów, aby uzyskać lepszą prędkość.

sysadmin1138
źródło
1

rdist może dla ciebie pracować.

Scott
źródło
1
Chociaż teoretycznie może to odpowiedzieć na pytanie, lepiej byłoby zawrzeć tutaj istotne części odpowiedzi i podać odnośnik.
Mark Henderson
-1

[powiązany] Korzystając z Kwatee ( http://www.kwatee.net ), możesz wdrożyć na dowolnej liczbie serwerów. Wdrożenia są przyrostowe (przesyłane są tylko zmodyfikowane pliki) i można je zrównoleglać, więc jest to bardzo szybkie. Możesz również skonfigurować Kwatee, aby był świadomy usługi równoważenia obciążenia, dzięki czemu serwery są usuwane z LB podczas aktualizacji, a następnie ponownie wkładane. Interfejs graficzny służy do konfigurowania parametrów wdrażania, a następnie wdrożenia można uruchamiać ręcznie za pomocą graficznego interfejsu użytkownika lub automatycznie za pomocą poleceń python.

prochowiec
źródło
chcesz wyjaśnić głosowanie w dół?
Mac
1
Dołączenie do strony tylko w celu ulepszenia własnego produktu często budzi tutaj obawy.
ceejayoz
Niezależnie od tego, tyle za uczciwe i przejrzyste odpowiedzi
Mac