Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Note
Ten artykuł zawiera odwołania do terminu podrzędny (replika), który jest terminem, który Microsoft już nie używa. Po usunięciu terminu z oprogramowania Redis usuniemy go z tego artykułu.
Użyj tych wzorców, aby skoordynować dostępność bazy danych ze stopniową aktualizacją puli węzłów usługi Azure Kubernetes Service (AKS).
Procedury opisane w tym artykule to struktury planowania, brak dostępności ani gwarancje trwałości danych. Wynik zależy od topologii bazy danych, trybu replikacji, magazynu, operatora, ustawień zakłóceń, zachowania ponawiania próby klienta i obciążenia. Przećwicz całą procedurę w reprezentatywnym środowisku i sprawdź, czy pozwala osiągnąć docelowy czas odtworzenia (RTO) oraz docelowy punkt odtworzenia (RPO).
Wzorce uaktualniania bazy danych omówione w tym artykule
Ten artykuł przedstawia wzorce aktualizacji specyficzne dla baz danych dla klastrów AKS z obciążeniami stanowymi, w tym:
- Kontrolowane przełączanie bazy danych PostgreSQL.
- Krocząca aktualizacja klastra Redis, zaczynając od replik.
- Aktualizacja krocząca zestawu replik MongoDB, rozpoczynana od węzłów pomocniczych.
- Listy kontrolne uaktualniania awaryjnego dla odpowiedzi na zabezpieczenia.
- Planowanie walidacji i wycofywania.
W przeciwieństwie do standardowej aktualizacji puli węzłów usługi AKS, te wzorce koordynują kontrole replikacji bazy danych i zmiany ról z wymianą węzłów Kubernetes. Administratorzy baz danych i usługi AKS mogą używać tych wzorców. Użyj udokumentowanych operacji przełączania lub uaktualniania dla operatora bazy danych, który zarządza wdrożeniem. Nie należy zastępować tych wzorców instrukcjami specyficznymi dla operatora.
Aby uzyskać więcej informacji, zobacz następujące powiązane artykuły:
- Aby uaktualnić produkcyjne klastry AKS, zobacz Strategie uaktualniania produkcyjnego usługi AKS.
- Aby porównać metody uaktualniania dla klastra usługi AKS, zobacz Opcje uaktualniania i zalecenia.
- Aby użyć centrum scenariuszy, aby ułatwić wybór odpowiedniego podejścia do uaktualniania usługi AKS, zobacz Scenariusze uaktualniania usługi AKS: Wybierz ścieżkę.
Aby uzyskać szybki start, wybierz wzorzec wdrożonego produktu i topologii:
- Lista kontrolna uaktualniania awaryjnego
- Kontrolowane przełączanie bazy danych PostgreSQL
- Uaktualnianie stopniowe repliki klastra Redis
- Uaktualnianie stopniowe zestawu replik bazy danych MongoDB
Wybieranie wzorca uaktualniania bazy danych
| Typ bazy danych | Wzorzec aktualizacji | Zagadnienia dotyczące dostępności | Najlepsze dla |
|---|---|---|---|
| PostgreSQL | Kontrolowane przełączenie | Operacje zapisu są wstrzymane podczas wygaszania połączeń i przełączenia. Zmierz odstęp w swoim środowisku. | Wdrożenia podstawowe i zapasowe w trybie strumieniowej gotowości z obsługiwanym mechanizmem przełączania awaryjnego |
| Klaster Redis | Uaktualnianie stopniowe z pierwszą repliką | Klienci mogą napotykać przejściowe błędy lub przekierowania podczas przełączenia awaryjnego. Klaster Redis używa replikacji asynchronicznej. | Wdrożenia Redis Cluster z repliką dla każdego węzła głównego |
| MongoDB | Uaktualnienie stopniowe po raz pierwszy pomocnicze | Operacje zapisu kończą się niepowodzeniem od momentu ustąpienia do czasu wybrania nowego węzła podstawowego. | Zestawy replik złożone z trzech lub większej liczby węzłów z pomocniczym węzłem mogącym zostać wybranym |
Lista kontrolna uaktualniania awaryjnego
Jeśli potrzebujesz przyspieszonego uaktualnienia w celu rozwiązania problemu z zabezpieczeniami, nie pomijaj kontroli kondycji i odzyskiwania bazy danych.
Sprawdź wymagania wstępne dotyczące obciążenia i uaktualnienia usługi AKS:
# Verify the database pods and their node placement. kubectl get pods -l tier=database -o wide # Confirm that the latest backup job completed. kubectl get job backup-job -o jsonpath='{.status.completionTime}'Sprawdź również kondycję replikacji przy użyciu polecenia obsługiwanego przez bazę danych lub operatora. Przywróć najnowszą kopię zapasową w izolowanym środowisku i upewnij się, że klienci ponawiają próby po przejściowych błędach połączenia i błędach wyboru lidera.
Wybierz tylko wzorzec zgodny z produktem i topologią:
- PostgreSQL: użyj kontrolowanego przełączania.
- Klaster Redis: Użyj aktualizacji kroczącej, zaczynając od replik.
- Zestaw replik bazy danych MongoDB: użyj pomocniczego uaktualnienia stopniowego.
W przypadku innych produktów baz danych postępuj zgodnie ze wskazówkami dotyczącymi uaktualniania dla tego produktu lub operatora Kubernetes.
Działaj z zabezpieczeniem:
- Zawsze testuj procedury wycofywania z wyprzedzeniem.
- Monitorowanie metryk aplikacji podczas uaktualniania.
- Niech zespół ds. baz danych będzie w gotowości.
- Zatrzymaj aktualizację, jeśli replikacja, kworum, pokrycie slotów lub stan aplikacji ulegną pogorszeniu.
Kontrolowane przełączanie bazy danych PostgreSQL
Użyj tego schematu kontrolowanego przełączenia dla podstawowego serwera PostgreSQL z serwerami rezerwowymi korzystającymi z replikacji strumieniowej. Przykłady pokazują kontrole stanu, ale polecenia służące do promowania, izolowania i ponownego dołączania węzłów zależą od używanego operatora PostgreSQL lub implementacji mechanizmu wysokiej dostępności.
Ważna
Nie promuj serwera zapasowego, dopóki zapisy aplikacji nie zostaną wstrzymane, kandydat nie nadrobi zaległości, a mechanizm wysokiej dostępności nie będzie mógł odizolować ani ponownie skonfigurować poprzedniego węzła podstawowego. Promowanie serwera rezerwowego, gdy stary serwer podstawowy nadal akceptuje zapisy, może prowadzić do rozbieżnych linii czasu bazy danych.
Prerequisites
- Użyj obsługiwanej wersji bazy danych PostgreSQL i obsługiwanego operatora lub implementacji wysokiej dostępności.
- Umieść członków w domenach awarii. Skonfiguruj budżety zakłóceń dla zasobników i ograniczenia rozkładu topologicznego dla swojego wdrożenia.
- Zweryfikuj najnowszą kopię zapasową, przywracając ją w izolowanym środowisku.
- Upewnij się, że aplikacja ponownie łączy się po zmianie podstawowej.
- Zapisz polecenia specyficzne dla danego operatora dotyczące przełączenia, wycofania i ponownego dołączenia przed rozpoczęciem uaktualniania AKS.
Krok 1. Weryfikowanie topologii replikacji
Uruchom następujące zapytanie na bieżącym serwerze podstawowym:
kubectl exec <current-primary-pod> -- psql -X -c "
SELECT application_name, state, sync_state, write_lsn, flush_lsn, replay_lsn
FROM pg_stat_replication;"
Docelowy kandydat do przełączenia musi być w stanie streaming. Jeśli Twoje RPO wymaga replikacji synchronicznej, zweryfikuj również, czy kandydat ma oczekiwane sync_state dla Twojej konfiguracji.
Uruchom następujące zapytanie dotyczące zamierzonego wstrzymania:
kubectl exec <candidate-standby-pod> -- psql -X -c "
SELECT pg_is_in_recovery(), pg_last_wal_receive_lsn(), pg_last_wal_replay_lsn();"
Potwierdź, że pg_is_in_recovery() zwraca true oraz że lokalizacje odbioru i odtwarzania spełniają przetestowany próg przełączenia. Replikacja strumieniowa PostgreSQL jest domyślnie asynchroniczna, więc sam pod w stanie Ready nie oznacza, że serwer zapasowy nadrobił opóźnienie.
Krok 2. Wstrzymywanie zapisów i przełączanie prawyborów
Jeśli cały ruch aplikacji przechodzi przez narzędzie PgBouncer, połącz się z bazą danych administracji pgBouncer i wstrzymaj bazę danych aplikacji:
kubectl exec <pgbouncer-pod> -- psql -p 6432 -U <admin-user> pgbouncer -c "PAUSE app_db;"
PAUSE oczekuje na zwolnienie połączeń serwera zgodnie ze skonfigurowanym trybem buforowania. Zanim zaczniesz polegać na tym mechanizmie, sprawdź, czy operacje zapisu aplikacji nie mogą omijać PgBouncera.
Po wstrzymaniu operacji zapisu wykonaj te akcje przy użyciu operatora lub implementacji wysokiej dostępności:
- Sprawdź ponownie pozycje odbioru i odtwarzania WAL kandydata.
- Uruchom obsługiwaną operację przełączania.
- Sprawdź, czy istnieje dokładnie jeden zapisywalny element podstawowy.
- Sprawdź, czy poprzedni węzeł podstawowy został odizolowany lub ponownie skonfigurowany jako węzeł rezerwowy.
- Sprawdź, czy usługa zapisywania lub punkt końcowy są rozpoznawane jako nowe podstawowe.
Wznów narzędzie PgBouncer dopiero po wykonaniu tych testów:
kubectl exec <pgbouncer-pod> -- psql -p 6432 -U <admin-user> pgbouncer -c "RESUME app_db;"
Krok 3. Weryfikowanie przełączenia
# Verify the new primary is writable and no longer in recovery.
kubectl exec <new-primary-pod> -- psql -X -c "SELECT pg_is_in_recovery();"
# Verify all expected standbys stream from the new primary.
kubectl exec <new-primary-pod> -- psql -X -c "
SELECT application_name, state, sync_state, replay_lsn
FROM pg_stat_replication;"
Przetestuj operacje odczytu, zapisu, transakcji i ponownego łączenia aplikacji. Porównaj czas niedostępności zapisów oraz rezultat replikacji z wartościami RTO i RPO, zanim przejdziesz dalej.
Opcjonalna konfiguracja replikacji synchronicznej
Replikacja synchroniczna może zmniejszyć RPO dla potwierdzonych transakcji, ale zwiększa opóźnienie zatwierdzania i może zmniejszyć dostępność operacji zapisu, jeśli wymagane serwery rezerwowe nie są dostępne. Poniższy przykład oczekuje, aż dowolne dwa nazwane, bezpośrednio połączone serwery rezerwowe odtworzą każdą zatwierdzoną transakcję:
# Use synchronous replication with multiple standbys
# postgresql.conf
synchronous_standby_names = 'ANY 2 (standby1, standby2, standby3)'
synchronous_commit = 'remote_apply'
Wybierz synchronous_standby_names i synchronous_commit na podstawie zmierzonych opóźnień, rozmieszczenia w domenie awarii oraz wymagań dotyczących trwałości. Ta konfiguracja nie gwarantuje określonego czasu trwania przełączania.
Walidacja powodzenia
Aby zweryfikować postęp, użyj następującej listy kontrolnej:
- Nowy element podstawowy akceptuje odczyty i zapisy.
- Wszystkie repliki mają prawidłowy stan replikacji.
- Aplikacja ponownie łączy się automatycznie.
- Kontrole integralności danych i spójności aplikacji zostały pomyślnie zakończone.
- Testy tworzenia kopii zapasowych i przywracania przebiegają pomyślnie na nowym serwerze głównym.
Uaktualnij pulę węzłów usługi AKS
Operacja az aks nodepool upgrade aktualizuje całą pulę węzłów. Usługa AKS dodaje pojemność skoków, kordony i opróżnia stare węzły, odtwarza je i powtarza proces zgodnie z ustawieniami uaktualniania puli węzłów. Nie uruchamiaj polecenia raz dla każdego węzła lub ręcznie opróżnij węzły przed operacją zarządzaną.
Wyświetl listę obsługiwanych celów uaktualniania dla klastra:
az aks get-upgrades \ --resource-group <resource-group-name> \ --name <cluster-name> \ --output tableUpewnij się, że płaszczyzna sterowania jest już w wybranej wersji docelowej. Skonfiguruj ustawienia stopniowego uaktualniania puli węzłów na podstawie przetestowanego zachowania obciążenia, limitu przydziału i dostępnych adresów podsieci. W poniższym przykładzie użyto zalecanej wartości produkcyjnej
maxSurge:az aks nodepool update \ --resource-group <resource-group-name> \ --cluster-name <cluster-name> \ --name <node-pool-name> \ --max-surge 33% \ --drain-timeout <minutes> \ --node-soak-duration <minutes>Uruchom jedną zarządzaną aktualizację puli węzłów, używając celu zwróconego przez
az aks get-upgrades:az aks nodepool upgrade \ --resource-group <resource-group-name> \ --cluster-name <cluster-name> \ --name <node-pool-name> \ --kubernetes-version <target-version>Monitoruj zdarzenia uaktualniania usługi AKS i kondycję bazy danych podczas całej operacji:
kubectl events --all-namespaces kubectl get pods -l app=postgres -o wide --watchMonitoruj replikację, dostępność bazy danych, błędy aplikacji, opóźnienie i kondycję magazynu w systemie obserwacji. Jeśli Pod Disruption Budget uniemożliwia opróżnienie węzła, rozwiąż problem z dostępnością obciążenia zamiast obchodzić ten budżet.
Weryfikowanie i odzyskiwanie
Po zakończeniu uaktualniania zarządzanego sprawdź wersje węzłów, topologię postgreSQL i zachowanie aplikacji:
kubectl get nodes
kubectl get pods -l app=postgres -o wide
kubectl exec <current-primary-pod> -- psql -X -c "
SELECT application_name, state, sync_state, replay_lsn
FROM pg_stat_replication;"
Usługa AKS nie obsługuje obniżania poziomu klastra ani puli węzłów do wcześniejszej wersji platformy Kubernetes. Jeśli baza danych jest w złej kondycji, zatrzymaj zapisywanie aplikacji i użyj obsługiwanej procedury odzyskiwania lub przełączania operatora bazy danych. Nie przekierowuj zapisów do dawnego węzła głównego PostgreSQL, chyba że bezpiecznie dołączył on do bieżącej osi czasu i został awansowany przez mechanizm wysokiej dostępności. Jeśli uaktualnienie platformy Kubernetes powoduje nieodwracalny problem ze zgodnością, przywróć usługę, przenosząc obciążenie do przetestowanego klastra lub puli węzłów i przywracając lub replikując dane zgodnie z planem odzyskiwania.
Uaktualnianie stopniowe repliki klastra Redis
Użyj tego wzorca dla klastra Redis z co najmniej trzema węzłami podstawowymi i co najmniej jedną repliką dla każdego podstawowego. Udokumentowana kolejność uaktualniania węzła klastra Redis polega na pierwszym uaktualnieniu replik, ręcznym przełączeniu w tryb failover poszczególnych replik podstawowych do uaktualnionej repliki, a następnie uaktualnieniu zdegradowanej poprzedniej podstawowej repliki. Klaster Redis może zwracać błędy przejściowe lub przekierowania podczas zmian topologii. Ponieważ klaster Redis używa replikacji asynchronicznej, może utracić potwierdzone zapisy. Zweryfikuj mechanizm ponawiania prób przez klienta oraz akceptowalny poziom RPO przed uaktualnieniem.
Note
Jeśli klastrem zarządza operator Redis, użyj udokumentowanej procedury aktualizacji kroczącej. Nie należy łączyć ręcznych poleceń dotyczących klastra z aktywnym operatorem, chyba że jego dokumentacja wyraźnie zaleca takie działanie.
Krok 1. Rejestrowanie i weryfikowanie topologii
kubectl exec <redis-pod> -- redis-cli CLUSTER NODES
kubectl exec <redis-pod> -- redis-cli --cluster check 127.0.0.1:6379
Zapisz identyfikator każdego węzła, jego rolę, przypisanie węzła głównego do repliki oraz zakres slotów skrótu. Nie kontynuuj, chyba że zostaną uwzględnione wszystkie 16 384 gniazda, każdy podstawowy ma replikę w dobrej kondycji w innej domenie awarii, a klaster zgłasza cluster_state:ok.
Krok 2. Uaktualnianie replik
Dla każdej repliki, po jednej na raz:
- Użyj mechanizmu wdrażania operatora lub obciążenia roboczego, aby zastąpić replikę lub uruchomić ją ponownie na zaktualizowanych zasobach usługi AKS.
- Poczekaj, aż pod będzie gotowy i aż replikacja nadrobi zaległości.
- Potwierdź za pomocą
CLUSTER NODES, że nadal jest przypisany do oczekiwanego węzła podstawowego.
Nie uruchamiaj CLUSTER FORGET w celu ponownego uruchomienia poda, które zachowuje tożsamość węzła Redis. Jeśli element zastępczy ma nowy identyfikator węzła, użyj redis-cli --cluster add-node z --cluster-master-id i --cluster-slave, aby dodać go jako replikę zamierzonego węzła podstawowego. Poczekaj, aż nowa replika pojawi się w topologii klastra.
kubectl exec <existing-redis-pod> -- redis-cli --cluster add-node \
<new-replica-ip>:6379 127.0.0.1:6379 \
--cluster-slave \
--cluster-master-id <primary-node-id>
Krok 3: Przełączenie awaryjne i uaktualnienie węzłów podstawowych
Dla każdego elementu podstawowego jeden naraz:
Wybierz uaktualnioną, przechwyconą replikę tego podstawowego elementu.
Uruchom polecenie
CLUSTER FAILOVERna replice, którą chcesz awansować, a nie na bieżącym węźle głównym:kubectl exec <candidate-replica-pod> -- redis-cli CLUSTER FAILOVERSprawdzaj
ROLE,INFO REPLICATIONlubCLUSTER NODES, aż kandydat stanie się węzłem podstawowym, a poprzedni węzeł podstawowy jego repliką. OdpowiedźOKoznacza tylko, że usługa Redis zaakceptowała żądanie trybu failover.Zastąp lub uruchom ponownie zdegradowany były węzeł podstawowy w ramach zaktualizowanej pojemności AKS.
Poczekaj, aż ponownie będzie działać jako zsynchronizowana replika, zanim przejdziesz do następnego węzła podstawowego.
Nie należy używać CLUSTER FAILOVER FORCE ani TAKEOVER podczas planowanego uaktualniania. Te opcje pomijają normalną koordynację i wymagają oddzielnych procedur odzyskiwania po awarii.
Krok 4. Weryfikowanie klastra redis
kubectl exec <redis-pod> -- redis-cli CLUSTER INFO
kubectl exec <redis-pod> -- redis-cli CLUSTER NODES
kubectl exec <redis-pod> -- redis-cli --cluster check 127.0.0.1:6379
Sprawdź pokrycie slotów, przypisania instancji podstawowych do replik, stan replikacji, odczyty i zapisy aplikacji, obsługę przekierowań oraz obserwowany wskaźnik RPO.
Uaktualnianie stopniowe zestawu replik bazy danych MongoDB
Użyj tego wzorca dla zestawu replik bazy danych MongoDB z trzema elementami członkowskimi lub większym zestawem replik, który ma możliwość wyboru pomocniczego. Podczas ustępowania węzła podstawowego i wyboru nowego operacje zapisu kończą się niepowodzeniem, dopóki nie zostanie wybrany nowy węzeł podstawowy. Aplikacje muszą ponowić próby kwalifikujących się operacji zapisu i przejściowych transakcji zgodnie ze wskazówkami dotyczącymi sterowników bazy danych MongoDB.
Note
Jeśli operator MongoDB zarządza zestawem replik, użyj udokumentowanej procedury aktualizacji kroczącej i kontroli gotowości.
Krok 1. Weryfikowanie zestawu replik
kubectl exec <mongodb-pod> -- mongosh --quiet --eval "rs.status()"
Upewnij się, że wszyscy oczekiwani członkowie działają prawidłowo, zidentyfikuj obecny węzeł podstawowy i sprawdź, czy co najmniej jeden węzeł wtórny, który może zostać wybrany, jest zsynchronizowany. Sprawdź również najnowszą kopię zapasową za pomocą przywracania testowego.
Krok 2: Uaktualnij serwery pomocnicze
Dla każdego drugorzędnego elementu, po jednym na raz:
Zastąp lub uruchom ponownie element członkowski w uaktualnionej pojemności usługi AKS przy użyciu mechanizmu wdrażania operatora lub obciążenia.
Poczekaj, aż pod będzie gotowy.
Sprawdź, czy składnik wraca do stanu
SECONDARYi nadrabia zaległości przed zaktualizowaniem innego składnika.kubectl exec <mongodb-pod> -- mongosh --quiet --eval \ "rs.status().members.map(member => ({name: member.name, state: member.stateStr, optime: member.optimeDate}))"
Krok 3: Obniż wartość podstawową
Uruchom rs.stepDown() tylko względem bieżącego elementu podstawowego. Pierwszy argument określa, jak długo nie można ponownie wybrać poprzedniego podstawowego. Drugi argument określa, ile czasu wybieralny węzeł pomocniczy ma na nadrobienie zaległości. Wybierz wartości na podstawie przetestowanego zachowania wyborczego.
kubectl exec <current-primary-pod> -- mongosh --quiet --eval "rs.stepDown(60, 30)"
Polecenie może odłączyć lub zwrócić błąd jako podstawowe kroki w dół. Sprawdzaj stan zestawu replikacji z poziomu innego członka, aż zostanie wybrany dokładnie jeden nowy węzeł podstawowy:
kubectl exec <mongodb-pod> -- mongosh --quiet --eval \
"rs.status().members.map(member => ({name: member.name, state: member.stateStr}))"
Jeśli żaden pomocniczy węzeł kwalifikujący się do wyboru nie nadrobi zaległości w skonfigurowanym czasie, węzeł podstawowy nie zrezygnuje ze swojej roli. Rozwiąż problemy ze stanem replikacji przed ponowieniem próby. Nie wymuszaj przełączenia na niższy poziom podczas planowanej aktualizacji.
Krok 4. Uaktualnianie i weryfikowanie poprzedniego podstawowego elementu
Zastąp lub uruchom ponownie poprzedni element podstawowy w uaktualnionej pojemności usługi AKS. Poczekaj, aż powróci jako pomocnicza w dobrej kondycji, a następnie zweryfikuj:
- Dokładnie jeden członek ma wartość
PRIMARY. - Wszystkie inne elementy nośne danych są
SECONDARYi są uwikłane. - Odczyty aplikacji, zapisy aplikacji, operacje zapisu z ponawianiem prób i transakcje zachowują się zgodnie z oczekiwaniami.
- Zmierzony czas elekcji spełnia wymaganie RTO aplikacji.
- Kontrole kopii zapasowej i przywracania zakończyły się pomyślnie.