Utrzymuję dwa centra danych, a ponieważ większa część naszej ważnej infrastruktury zaczyna być kontrolowana przez marionetkę, ważne jest, aby mistrz marionetek pracował w drugim miejscu, w przypadku awarii naszego głównego miejsca.
Jeszcze lepiej byłoby mieć rodzaj aktywnej / aktywnej konfiguracji, aby serwery w drugiej lokacji nie odpytywały sieci WAN.
Czy są jakieś standardowe metody wysokiej dostępności kukiełek w wielu miejscach?
puppet
high-availability
Kyle Brandt
źródło
źródło
git
lubsvn
lubrsync
jakimkolwiek innym systemem kontroli wersji, którego używasz, będąc tym, czego potrzebujesz do skalowania, a nie marionetkowym mistrzem.Odpowiedzi:
Marionetka w rzeczywistości nadaje się całkiem dobrze do środowisk z wieloma mistrzami, z pewnymi zastrzeżeniami. Główny? Wiele części Lalek lubi być scentralizowanych. Urząd certyfikacji, usługi związane z inwentaryzacją i pulpitem nawigacyjnym / raportowaniem, gromadzeniem plików i przechowywanymi konfiguracjami - wszystkie są w najlepszej formie (lub po prostu wymagają) konfiguracji, w której jest tylko jedno miejsce do rozmowy.
Jest jednak całkiem wykonalne, aby wiele ruchomych części pracowało w środowisku z wieloma wzorcami, jeśli nie masz nic przeciwko płynnej utracie niektórych funkcji po utracie głównej witryny.
Zacznijmy od podstawowej funkcji, aby węzeł raportował do mastera:
Moduły i manifesty
Ta część jest prosta. Kontrola wersji. Jeśli jest to rozproszony system kontroli wersji, po prostu scentralizuj i zsynchronizuj oraz odpowiednio zmodyfikuj przepływ push / pull w witrynie trybu failover. Jeśli jest to Subversion, prawdopodobnie będziesz chciał
svnsync
repozytorium na swojej stronie trybu failover.Urząd certyfikacji
Jedną z opcji jest tutaj synchronizacja plików urzędu certyfikacji między wzorcami, aby wszystkie miały ten sam certyfikat główny i mogły podpisywać certyfikaty. Zawsze wydawało mi się, że „robię to źle”;
Nie mogę szczerze powiedzieć, że dokładnie przetestowałem tę opcję, ponieważ wydaje się to okropne. Jednak wydaje się, że Puppet Labs nie chcą zachęcać do tej opcji, zgodnie z notatką tutaj .
Więc to, co pozostawia, to mieć centralnego mistrza CA. Wszystkie relacje zaufania działają nadal, gdy urząd certyfikacji jest wyłączony, ponieważ wszyscy klienci i inni mistrzowie buforują certyfikat urzędu certyfikacji i listę CRL (chociaż nie odświeżają listy CRL tak często, jak powinni), ale nie będzie można podpisywać nowych certyfikatów, dopóki odzyskujesz główną witrynę lub przywracasz główny urząd certyfikacji z kopii zapasowych w witrynie przełączania awaryjnego.
Wybierz jednego wzorca, który będzie pełnił rolę urzędu certyfikacji, i wyłącz wszystkie pozostałe wzorce:
Następnie chcesz, aby ten system centralny pobierał cały ruch związany z certyfikatem. Jest na to kilka opcji;
SRV
rekordu w 3.0, aby skierować wszystkie węzły agenta we właściwe miejsce dla urzędu certyfikacji -_x-puppet-ca._tcp.example.com
ca_server
opcję konfiguracji wepuppet.conf
wszystkich agentachProxy cały ruch dla żądań związanych z urzędami certyfikacji od agentów do właściwego wzorca. Na przykład, jeśli uruchamiasz wszystkie swoje serwery główne w Apache przez pasażera, skonfiguruj to na urządzeniach innych niż CA:
I to powinno wystarczyć.
Zanim przejdziemy do usług pomocniczych, notatka dodatkowa;
Nazwy DNS dla certyfikatów głównych
Myślę, że właśnie tutaj jest najbardziej przekonujący powód przejścia na wersję 3.0. Powiedzmy, że chcesz wskazać węzeł na „dowolnego mistrza roboczego”.
W wersji 2.7 potrzebujesz ogólnej nazwy DNS
puppet.example.com
, a wszyscy mistrzowie potrzebują jej w swoim certyfikacie. Oznacza to ustawieniedns_alt_names
w ich konfiguracji, ponowne wystawienie certyfikatu, który mieli przed skonfigurowaniem go jako wzorca, ponowne wystawienie certyfikatu ponownie, gdy trzeba dodać nową nazwę DNS do listy (na przykład, jeśli chcesz wielu nazw DNS, aby agenci wolą mistrzów na swojej stronie) .. brzydkie.W wersji 3.0 możesz używać
SRV
rekordów. Daj to wszystkim swoim klientom;Zatem nie są wymagane specjalne certyfikaty dla mistrzów - po prostu dodaj nowy rekord do swojego
SRV
RR na_x-puppet._tcp.example.com
i jesteś gotowy, to mistrz na żywo w grupie. Co więcej, możesz łatwo uczynić logikę wyboru głównego bardziej wyrafinowaną; „dowolny stary mistrz pracy, ale wolisz ten w swojej witrynie”, ustanawiając różne zestawySRV
rekordów dla różnych witryn; niedns_alt_names
potrzebneRaporty / pulpit nawigacyjny
Ten działa najlepiej scentralizowany, ale jeśli możesz żyć bez niego, gdy Twoja podstawowa strona nie działa, nie ma problemu. Po prostu skonfiguruj wszystkich swoich mistrzów w odpowiednim miejscu do umieszczenia raportów.
... i wszystko gotowe. Nieprzesłanie raportu nie jest krytyczne dla uruchomienia konfiguracji; po prostu przepadnie, jeśli toast serwera deski rozdzielczej.
Inwentaryzacja faktów
Kolejną miłą rzeczą, którą przykleiłem do deski rozdzielczej, jest usługa inwentaryzacji. Przy
facts_terminus
ustawieniu narest
zalecanym w dokumentacji spowoduje to przerwanie uruchamiania konfiguracji, gdy centralna usługa spisu jest wyłączona. Sztuczka polega na tym, aby użyćinventory_service
terminala na nie-centralnych masterach, co pozwala na pełną wdzięku porażkę.Ustaw centralny serwer zapasów w taki sposób, aby przechowywał dane zapasów za pośrednictwem ActiveRecord lub PuppetDB i powinien być na bieżąco, gdy usługa będzie dostępna.
Tak więc - jeśli nie masz nic przeciwko temu, aby przejść do całkiem przyzwoitego środowiska zarządzania konfiguracją, w którym nie możesz nawet użyć urzędu certyfikacji do podpisania certyfikatu nowego węzła, dopóki nie zostanie przywrócony, to może to działać dobrze - choć byłoby naprawdę fajnie jeśli niektóre z tych komponentów były nieco bardziej przyjazne dla dystrybucji .
źródło
SRV
rekord odpowiednio -SRV
zapisy wydają mi się tutaj najbardziej eleganckim rozwiązaniem pomimo mojej ogólnej ambiwalencji wobec nich ...)Podejście „mistrzowskiej marionetki”, które opisuje Ladadadada, jest tym, które znam najbardziej (jest to w zasadzie to, co robimy z radmindem w mojej firmie). Myślę, że dokładniej jest to „Wielu mistrzów zsynchronizowanych przez proces zewnętrzny”, gdzie każdy serwer mógłby (teoretycznie) służyć naszemu wszechświatowi w nagłych wypadkach.
W naszym przypadku ze względu na naturę radmind po prostu
rsync
transkrypty i pliki danych z zatwierdzonego urządzenia głównego na serwer radmind każdego zdalnego serwisu, a klienci pobierają swoje aktualizacje z serwera o krótkiejradmind
nazwie hosta (dzięki magiiresolv.conf
to oceniaradmind.[sitename].mycompany.com
- zawsze lokalny serwer radmind. Jeśli serwer lokalny jest wyłączony, łatwo jest go zastąpić i wskazać na serwer innej witryny).Ten rodzaj procesu rsync prawdopodobnie działałby również w twojej sytuacji, ale prawdopodobnie jest on nieoptymalny w porównaniu do rozwiązania opartego na kontroli wersji.
Dla lalek lub szefa kuchni system oparty na kontroli wersji ma więcej sensu niż prosty rsync z kilku powodów - dużym z nich jest to, że kontrolujesz wersje skryptów lalkowych (zamiast całych obrazów systemu operacyjnego, tak jak w przypadku radmind).
Jako dodatkowe korzyści związane z zarządzaniem opartym na kontroli wersji, możesz mieć wielu ludzi pracujących nad repozytorium naraz (świetna wygrana dla równoległości), dostajesz historię zmian zasadniczo za darmo, a jeśli ktoś złamie środowisko Puppet, możesz łatwo wycofać (zakładając, że „ ponownie używasz
git
masz również,git blame
co robi to, co jest napisane na puszce).Twórcze rozgałęzianie i łączenie pozwala nawet obsłużyć znaczną aktualizację systemu operacyjnego lub inne przejście w ramach kontroli wersji - kiedy już to zrobisz, po prostu przełącz się na nową gałąź i (mam nadzieję), że produkcja zacznie działać.
Gdybym to tutaj wdrożył, prawdopodobnie skorzystałbym z haków przed zatwierdzeniem i po zatwierdzeniu w git, aby upewnić się, że zatwierdzone konfiguracje marionetek są rozsądne (po stronie klienta) i wypchnąć je do reszty wszechświata, jeśli są (po stronie serwera - prawdopodobnie również uruchamiają aktualizację środowiska, jeśli zasady wdrażania zezwalają na takie zachowanie).
Jeśli chodzi o uruchamianie nowych serwerów puppetmaster w każdej witrynie, możesz po prostu sprawdzić środowisko kukiełkowe dla każdego zdalnego puppetmaster i użyć albo hackery resolv.conf / hostname, który opisałem powyżej, albo adresów IP usługi anycast przekierowanych do systemów lokalnych, jak sugerował Michuelnik ( ta ostatnia jest przydatna, jeśli chcesz automatycznego przełączania awaryjnego, jeśli jeden z puppetmasterów jednej strony wysadzi się w powietrze), aby upewnić się, że każda strona widzi „właściwego” puppetmaster i nie zatyka linków WAN, próbując uzyskać aktualizacje.
Ludzie z Brain Tree Payments najwyraźniej połączyli kontrolę wersji i rozwiązania rsync z niektórymi niestandardowymi zadaniami Capistrano - ich rozwiązanie wydaje się być na wpół wypalone w tym sensie, że nadal opiera się na ręcznych elementach przepływu pracy, ale można je dostosować i zautomatyzować bez za dużo pracy.
Paranoiczny kompulsywny tester ma we mnie zamiłowanie do
noop
kroku sprawdzania rozsądku - nie znoszę ręcznych procesów życzy sobie pewnego poziomu automatyzacji wokół niego ...źródło