Idealny scenariusz docelowy
Tak, należy użyć modułu równoważenia obciążenia i aktualizować jedno wystąpienie na raz. Nie jestem pewien, gdzie pojawia się komunikacja między kontenerami.
Na przykład wyobraź sobie, że masz moduł równoważenia obciążenia, który obsługuje witrynę A. Użytkownicy łączą się z nim tylko jako „A” i znają go tylko jako „A”. Moduł równoważenia obciążenia wie, że istnieją dwa lub więcej backendów (B, C itp.) I to, czy są to maszyny wirtualne, czy kontenery, nie ma znaczenia.
Następnie chcesz zaktualizować backendy, które w tym przypadku są instancjami Apache.
- usunąć B z kwalifikujących się backendów dla modułu równoważenia obciążenia, aby nie akceptował już żadnego ruchu.
- poczekaj na obsłużenie aktualnie aktywnych żądań i zamknięcie istniejących połączeń.
- zaktualizuj kontener lub maszynę wirtualną, która obsługuje B
- uruchom ponownie B, poczekaj, aż się załaduje i zacznij działać
- przetestuj B, aby upewnić się, że poprawnie obsługuje nowe żądania
- dodaj B z powrotem do puli zaplecza modułu równoważenia obciążenia, aby ponownie włączyć ruch
Następnie wykonaj ten sam proces dla C, D itp.
Pamiętaj, że od listopada 2013 r. Istnieje otwarta prośba o uaktualnienia w miejscu kontenerów Docker , ale wydaje się, że nie ma dużego postępu, więc powyższe rozwiązanie jest tym, co powinieneś zrobić w międzyczasie.
Co zrobić w przypadku istniejącej witryny na żywo
Prawdopodobnie pytasz o to, ponieważ już prowadzisz działającą witrynę w tym modelu i chcesz ją uaktualnić bez przestojów. Musimy więc osiągnąć powyższy idealny stan docelowy, ale stopniowo.
Załóżmy, że:
- masz nazwę DNS wskazującą na swój kontener
- twój kontener działa na jakimś adresie IP
- Twoi użytkownicy nie znają adresu IP kontenera i nie jest nigdzie zakodowany
Jeśli te założenia są fałszywe, najpierw należy to naprawić, aby było prawidłowe.
Następnie wykonaj następujące kroki:
- Utwórz moduł równoważenia obciążenia w nowym adresie IP i skieruj go na istniejący kontener jako jedyny backend
- zmień DNS, aby wskazywał bezpośrednio moduł równoważenia obciążenia zamiast adresu IP kontenera
- dodaj identyczny backend Apache z tą samą konfiguracją kontenera VM +
- teraz masz moduł równoważenia obciążenia z dwoma backendami B i C, więc postępuj zgodnie ze wskazówkami w sekcji „idealny scenariusz docelowy”, aby aktualizować je pojedynczo
Jak zaktualizować moduł równoważenia obciążenia
Łatwy (hostowany) sposób
Najłatwiejszą opcją jest nie uruchamianie własnego balansera. Na przykład, jeśli używasz platformy chmurowej, która zapewnia równoważenie obciążenia jako usługi, rozważ skorzystanie z niej, a następnie konserwacja i aktualizacja modułu równoważenia obciążenia nie będzie problemem.
Sposób ręczny
Jeśli prowadzisz własny moduł równoważenia obciążenia, pomocne będzie dodanie kolejnej warstwy pośredniej (tj. DNS). Załóżmy, że:
- że mamy nazwę hosta rozstrzygającą adres IP naszego modułu równoważenia obciążenia A, który chcielibyśmy zaktualizować
- nasz moduł równoważenia obciążenia ma pulę zaplecza P1, P2 itp.
Postępujemy w następujący sposób:
i jesteś skończony.
Szczegóły, diagramy i oprzyrządowanie
Zobacz te opisy i narzędzia, które mogą pomóc zautomatyzować proces, ale ogólna idea jest taka sama:
Morał
„Wszystkie problemy w informatyce można rozwiązać przez inny poziom pośredni, z wyjątkiem oczywiście problemu zbyt wielu pośrednich”. - David Wheeler