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/www
na 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 git
moż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.
rsync
deployment
git
Justin
źródło
źródło
Odpowiedzi:
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.
źródło
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ć:
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ść.
źródło
rdist może dla ciebie pracować.
źródło
[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.
źródło