Tryb failover i stosowanie poprawek dla usługi Azure cache for RedisFailover and patching for Azure Cache for Redis

Aby tworzyć odporne i pomyślne aplikacje klienckie, należy zapoznać się z trybem failover w kontekście usługi Redis w pamięci podręcznej platformy Azure.To build resilient and successful client applications, it's critical to understand failover in the context of the Azure Cache for Redis service. Tryb failover może być częścią planowanych operacji zarządzania lub może być spowodowany nieplanowanymi awariami sprzętu lub sieci.A failover can be a part of planned management operations, or might be caused by unplanned hardware or network failures. Typowym zastosowaniem trybu failover pamięci podręcznej jest to, kiedy usługa zarządzania poprawkami pamięci podręcznej platformy Azure dla plików binarnych RedisA common use of cache failover comes when the management service patches the Azure Cache for Redis binaries. W tym artykule opisano, jak działa tryb failover, w jaki sposób występuje podczas stosowania poprawek i jak utworzyć odporną aplikację kliencką.This article covers what a failover is, how it occurs during patching, and how to build a resilient client application.

Co to jest tryb failover?What is a failover?

Zacznijmy od omówienia trybu failover dla usługi Azure cache for Redis.Let's start with an overview of failover for Azure Cache for Redis.

Krótkie podsumowanie architektury pamięci podręcznejA quick summary of cache architecture

Pamięć podręczna jest zbudowana z wielu maszyn wirtualnych z oddzielnymi prywatnymi adresami IP.A cache is constructed of multiple virtual machines with separate, private IP addresses. Każda maszyna wirtualna, znana także jako węzeł, jest połączona z udostępnionym modułem równoważenia obciążenia z pojedynczym wirtualnym adresem IP.Each virtual machine, also known as a node, is connected to a shared load balancer with a single virtual IP address. Każdy węzeł uruchamia proces serwera Redis i jest dostępny za pomocą nazwy hosta i portów Redis.Each node runs the Redis server process and is accessible by means of the host name and the Redis ports. Każdy węzeł jest traktowany jako węzeł podstawowy lub replika.Each node is considered either a primary or a replica node. Gdy aplikacja kliencka nawiązuje połączenie z pamięcią podręczną, ruch przechodzi przez ten moduł równoważenia obciążenia i jest automatycznie kierowany do węzła podstawowego.When a client application connects to a cache, its traffic goes through this load balancer and is automatically routed to the primary node.

W podstawowej pamięci podręcznej pojedynczy węzeł jest zawsze podstawowym.In a Basic cache, the single node is always a primary. W pamięci podręcznej standardowa lub Premium istnieją dwa węzły: jeden jest wybierany jako podstawowy, a drugi to replika.In a Standard or Premium cache, there are two nodes: one is chosen as the primary and the other is the replica. Ponieważ pamięć podręczna w warstwach Standardowa i Premium ma wiele węzłów, jeden węzeł może być niedostępny, a drugi nadal przetwarza żądania.Because Standard and Premium caches have multiple nodes, one node might be unavailable while the other continues to process requests. Klastrowane pamięci podręczne składają się z wielu fragmentów, z których każdy ma odrębne węzły podstawowe i repliki.Clustered caches are made of many shards, each with distinct primary and replica nodes. Jeden fragmentu może nie działać, gdy pozostałe pozostają dostępne.One shard might be down while the others remain available.

Uwaga

Podstawowa pamięć podręczna nie ma wielu węzłów i nie oferuje umowy dotyczącej poziomu usług (SLA) na potrzeby jej dostępności.A Basic cache doesn't have multiple nodes and doesn't offer a service-level agreement (SLA) for its availability. Podstawowe pamięci podręczne są zalecane tylko w celach deweloperskich i testowych.Basic caches are recommended only for development and testing purposes. Użyj pamięci podręcznej standardowa lub Premium do wdrożenia wielowęzłowego, aby zwiększyć dostępność.Use a Standard or Premium cache for a multi-node deployment, to increase availability.

Wyjaśnienie trybu failoverExplanation of a failover

Tryb failover występuje, gdy węzeł repliki promuje się do węzła podstawowego, a stary węzeł podstawowy zamyka istniejące połączenia.A failover occurs when a replica node promotes itself to become a primary node, and the old primary node closes existing connections. Po utworzeniu kopii zapasowej węzła podstawowego następuje zmiana w rolach i obniżanie poziomu, aby stał się repliką.After the primary node comes back up, it notices the change in roles and demotes itself to become a replica. Następnie nawiązuje połączenie z nowym serwerem podstawowym i synchronizuje dane.It then connects to the new primary and synchronizes data. Przejście w tryb failover może być planowane lub nieplanowane.A failover might be planned or unplanned.

Planowana praca w trybie failover odbywa się podczas aktualizacji systemu, takich jak poprawki Redis lub uaktualnienia systemu operacyjnego oraz operacje zarządzania, takie jak skalowanie i ponowne uruchamianie.A planned failover takes place during system updates, such as Redis patching or OS upgrades, and management operations, such as scaling and rebooting. Ponieważ węzły otrzymują zaawansowaną informację o aktualizacji, mogą wspólnie wymieniać role i szybko aktualizować moduł równoważenia obciążenia zmiany.Because the nodes receive advance notice of the update, they can cooperatively swap roles and quickly update the load balancer of the change. Planowane przełączenie w tryb failover zwykle kończy się krócej niż 1 sekunda.A planned failover typically finishes in less than 1 second.

Nieplanowana praca w trybie failover może wystąpić z powodu awarii sprzętu, awarii sieci lub innych nieoczekiwanych awarii węzła głównego.An unplanned failover might happen because of hardware failure, network failure, or other unexpected outages to the primary node. Węzeł repliki promuje się do podstawowego, ale proces trwa dłużej.The replica node promotes itself to primary, but the process takes longer. Węzeł repliki musi najpierw wykryć, że jego węzeł podstawowy nie jest dostępny, zanim będzie mógł zainicjować proces przełączania do trybu failover.A replica node must first detect that its primary node is not available before it can initiate the failover process. Węzeł repliki musi również sprawdzić, czy ten nieplanowany błąd nie jest przejściowy, czy lokalny, aby uniknąć niepotrzebnego przejścia w tryb failover.The replica node must also verify that this unplanned failure is not transient or local, to avoid an unnecessary failover. To opóźnienie wykrywania oznacza, że nieplanowane przełączenie w tryb failover zwykle kończy się w okresie od 10 do 15 sekund.This delay in detection means that an unplanned failover typically finishes within 10 to 15 seconds.

Jak występuje poprawka?How does patching occur?

Usługa Azure cache for Redis regularnie aktualizuje pamięć podręczną przy użyciu najnowszych funkcji i poprawek platformy.The Azure Cache for Redis service regularly updates your cache with the latest platform features and fixes. Aby poprawić pamięć podręczną, usługa wykonuje następujące czynności:To patch a cache, the service follows these steps:

  1. Usługa zarządzania wybiera jeden węzeł, który ma zostać poprawiony.The management service selects one node to be patched.
  2. Jeśli wybrany węzeł jest węzłem podstawowym, odpowiadający mu węzeł repliki wspólnie promuje się do siebie.If the selected node is a primary node, the corresponding replica node cooperatively promotes itself. Promocja jest uznawana za planowane przejście w tryb failover.This promotion is considered a planned failover.
  3. Wybrany węzeł zostanie uruchomiony ponownie w celu przeprowadzenia nowych zmian i zostanie przywrócony jako węzeł repliki.The selected node reboots to take the new changes and comes back up as a replica node.
  4. Węzeł repliki nawiązuje połączenie z węzłem podstawowym i synchronizuje dane.The replica node connects to the primary node and synchronizes data.
  5. Po zakończeniu synchronizacji danych proces stosowania poprawek powtarza się dla pozostałych węzłów.When the data sync is complete, the patching process repeats for the remaining nodes.

Ponieważ stosowanie poprawek jest planowanym trybem failover, węzeł repliki szybko promuje się do podstawowego i rozpoczyna żądania obsługi oraz nowe połączenia.Because patching is a planned failover, the replica node quickly promotes itself to become a primary and begins servicing requests and new connections. Podstawowe pamięci podręczne nie mają węzła repliki i są niedostępne do momentu ukończenia aktualizacji.Basic caches don't have a replica node and are unavailable until the update is complete. Każdy fragmentu klastrowanej pamięci podręcznej jest instalowany oddzielnie i nie zamyka połączeń z innym fragmentu.Each shard of a clustered cache is patched separately and won't close connections to another shard.

Ważne

W celu zapobieżenia utracie danych węzły są w tej chwili poprawiane.Nodes are patched one at a time to prevent data loss. Pamięć podręczna w warstwie Podstawowa będzie miała utratę danych.Basic caches will have data loss. Klastrowane pamięci podręczne są poprawiane po jednym fragmentu w danym momencie.Clustered caches are patched one shard at a time.

Wiele pamięci podręcznych w tej samej grupie zasobów i w tym samym regionie jest również instalowanych pojedynczo.Multiple caches in the same resource group and region are also patched one at a time. Pamięci podręczne, które znajdują się w różnych grupach zasobów lub różnych regionach mogą być jednocześnie poprawiane.Caches that are in different resource groups or different regions might be patched simultaneously.

Ze względu na to, że pełna synchronizacja danych jest wykonywana przed powtórzeniem procesu, podczas korzystania z pamięci podręcznej standardowej lub Premium nie występuje utrata danych.Because full data synchronization happens before the process repeats, data loss is unlikely to occur when you use a Standard or Premium cache. Możesz zwiększyć ochronę przed utratą danych, eksportując dane i włączając trwałość.You can further guard against data loss by exporting data and enabling persistence.

Dodatkowe obciążenie pamięci podręcznejAdditional cache load

Zawsze, gdy nastąpi przełączenie w tryb failover, warstwy pamięci podręcznej standardowa i Premium muszą replikować dane z jednego węzła do drugiego.Whenever a failover occurs, the Standard and Premium caches need to replicate data from one node to the other. Ta replikacja powoduje wzrost obciążenia zarówno pamięci serwera, jak i procesora CPU.This replication causes some load increase in both server memory and CPU. Jeśli wystąpienie pamięci podręcznej jest już silnie załadowane, aplikacje klienckie mogą powodować zwiększone opóźnienia.If the cache instance is already heavily loaded, client applications might experience increased latency. W skrajnych przypadkach aplikacje klienckie mogą otrzymywać wyjątki przekroczenia limitu czasu.In extreme cases, client applications might receive time-out exceptions. Aby zmniejszyć wpływ tego dodatkowego obciążenia, Skonfiguruj ustawienia pamięci podręcznej maxmemory-reserved .To help mitigate the impact of this additional load, configure the cache's maxmemory-reserved setting.

Jak działa przejście w tryb failover na moją aplikację kliencką?How does a failover affect my client application?

Liczba błędów widzianych przez aplikację kliencką zależy od liczby operacji oczekujących na to połączenie w momencie przejścia w tryb failover.The number of errors seen by the client application depends on how many operations were pending on that connection at the time of the failover. Wszystkie połączenia, które są kierowane przez węzeł, który zamknął połączenie, zobaczą błędy.Any connection that's routed through the node that closed its connections will see errors. Wiele bibliotek klienckich może generować różne typy błędów w przypadku przerwania połączeń, w tym wyjątków limitu czasu, wyjątków połączeń lub wyjątków gniazda.Many client libraries can throw different types of errors when connections break, including time-out exceptions, connection exceptions, or socket exceptions. Liczba i typ wyjątków zależy od tego, gdzie znajduje się w ścieżce kodu żądania, gdy pamięć podręczna zamknie połączenia.The number and type of exceptions depends on where in the code path the request is when the cache closes its connections. Na przykład operacja wysyłająca żądanie, ale nie otrzymała odpowiedzi, gdy nastąpi przejście w tryb failover, może uzyskać wyjątek limitu czasu.For instance, an operation that sends a request but hasn't received a response when the failover occurs might get a time-out exception. Nowe żądania dotyczące zamkniętego obiektu połączenia odbierają wyjątki połączeń do momentu pomyślnego ponownego nawiązania połączenia.New requests on the closed connection object receive connection exceptions until the reconnection happens successfully.

Większość bibliotek klienta próbuje ponownie nawiązać połączenie z pamięcią podręczną, jeśli są skonfigurowane do tego celu.Most client libraries attempt to reconnect to the cache if they're configured to do so. Nieprzewidziane usterki mogą jednak czasami umieścić obiekty biblioteki w stanie nieodwracalnym.However, unforeseen bugs can occasionally place the library objects into an unrecoverable state. Jeśli błędy będą przechowywane dłużej niż w wstępnie skonfigurowanym czasie, należy ponownie utworzyć obiekt połączenia.If errors persist for longer than a preconfigured amount of time, the connection object should be recreated. W Microsoft.NET i innych językach zorientowanych na obiektach, ponowne tworzenie połączenia bez ponownego uruchamiania aplikacji można wykonać przy użyciu <T> wzorca z opóźnieniem.In Microsoft.NET and other object-oriented languages, recreating the connection without restarting the application can be accomplished by using a Lazy<T> pattern.

Jak mogę zrobić, aby moja aplikacja była odporna?How do I make my application resilient?

Ponieważ nie można całkowicie uniknąć przełączenia w tryb failover, należy napisać aplikacje klienckie pod kątem odporności na przerwy połączeń i Nieudane żądania.Because you can't avoid failovers completely, write your client applications for resiliency to connection breaks and failed requests. Mimo że większość bibliotek klienta automatycznie ponownie nawiązuje połączenie z punktem końcowym pamięci podręcznej, kilka z nich próbuje ponowić Nieudane żądania.Although most client libraries automatically reconnect to the cache endpoint, few of them attempt to retry failed requests. W zależności od scenariusza aplikacji może być przydatne użycie logiki ponawiania z wycofywania.Depending on the application scenario, it might make sense to use retry logic with backoff.

Aby przetestować odporność aplikacji klienta, należy przeprowadzić ponowny rozruch jako wyzwalacz ręczny dla przerw w połączeniach.To test a client application's resiliency, use a reboot as a manual trigger for connection breaks. Ponadto zaleca się zaplanowanie aktualizacji w pamięci podręcznej.Additionally, we recommend that you schedule updates on a cache. Poinformuj usługę zarządzania, aby stosowała poprawki środowiska uruchomieniowego Redis podczas określonych tygodniowych okien.Tell the management service to apply Redis runtime patches during specified weekly windows. Te okna są zwykle okresów, gdy ruch aplikacji klienckich jest niski, aby uniknąć potencjalnych zdarzeń.These windows are typically periods when client application traffic is low, to avoid potential incidents.

Sieć klienta — zmiany konfiguracjiClient network-configuration changes

Niektóre zmiany w konfiguracji sieci po stronie klienta mogą wyzwalać błędy "Brak dostępnego połączenia".Certain client-side network-configuration changes can trigger "No connection available" errors. Takie zmiany mogą obejmować:Such changes might include:

  • Zamienianie wirtualnego adresu IP aplikacji klienckiej między miejscami przejściowymi i produkcyjnymi.Swapping a client application's virtual IP address between staging and production slots.
  • Skalowanie rozmiaru lub liczby wystąpień aplikacji.Scaling the size or number of instances of your application.

Takie zmiany mogą spowodować problem z łącznością, który jest krótszy niż jedna minuta.Such changes can cause a connectivity issue that lasts less than one minute. Aplikacja kliencka prawdopodobnie utraci połączenie z innymi zasobami sieci zewnętrznej oprócz usługi Azure cache for Redis.Your client application will probably lose its connection to other external network resources in addition to the Azure Cache for Redis service.

Następne krokiNext steps