Czy klaster Redis potrzebuje wartownika?

Dzięki Gitlab Enterprise Edition możesz użyć pakietu Omnibus, aby skonfigurować wiele maszyn z demem Sentinel.

Redis Sentinel i Fix-Slave-Config Problem: Węzeł Redis jest ustawiony jako niewolnik dwóch mistrzów, gdy nie powinien być.

Używałem Redis Sentinel do przełączania awaryjnego we dużej flocie Redis składającej się z 12 wartowników i ponad 500 odłamków, każdy z jednym mistrzem i jednym niewolnikiem. Jednak napotkałem dziwny problem, w którym niektóre węzły Redis są wielokrotnie wydawane przez Sentinels Command +Fix-Slave-config. Spowodowało to, że niektórzy niewolnicy przełączają się między właściwym mistrzem a innym niewłaściwym mistrzem. Nie zauważyłem tego problemu na mniejszą skalę. Szukam porady na temat naprawy lub dalszego debugowania tego problemu.

Zaobserwowałem dwa konkretne problemy:

A) wiadomości +Fix-Slave-config, o których wspomniałem wcześniej.

B) Sentinel.Plik CONF pokazuje, że niektórzy niewolnicy mają dwóch mistrzów, nawet jeśli powinni mieć tylko jeden.

Początkowo flota ma określony węzeł niewolniczy xxx.Xxx.Xxx.177 z Master XXX.Xxx.Xxx.244 (Forming Shard 188). Jednak bez żadnych awarii węzła mistrz tego niewolnika zostaje przełączany na xxx.Xxx.Xxx.96 (który jest mistrzem odłamka 188), a następnie z powrotem do właściwego mistrza, a ten cykl powtarza się. Sprawdziłem to, uzyskując dostęp do węzłów niewolników i głównych i używając polecenia Info Redis-CLI. Wszystkie węzły Redis są uruchamiane z prawidłową konfiguracją, a wszystkie węzły Sentinel mają odpowiednią konfigurację w swoim wartowniku.Pliki Con. Kiedy zapytam każdego wartownika, wszystkie mają dokładnie taką samą listę mistrzów po każdej zmianie niewolnika na mistrza.

Po sprawdzeniu plików dziennika moich 12 wartowników widzę, że każda minuta jest wysyłana wiadomość +Fix-Slave-Config. Oto kilka przykładów:

Sentinel #8: 20096: x 22 października 01:41:49.793 * +FIX-SLAVE-CONFIG SLAVE XXX.Xxx.Xxx.177: 6379 xxx.Xxx.Xxx.177 6379 @ Shard-188 xxx.Xxx.Xxx.96 6379
Sentinel #1: 9832: x 22 października 01:42:50.795 * +FIX-SLAVE-CONFIG SLAVE XXX.Xxx.Xxx.177: 6379 xxx.Xxx.Xxx.177 6379 @ Shard-172 xxx.Xxx.Xxx.244 6379
Sentinel #6: 20528: x 22 października 01:43:52.458 * +FIX-SLAVE-CONFIG SLAVE XXX.Xxx.Xxx.177: 6379 xxx.Xxx.Xxx.177 6379 @ Shard-188 xxx.Xxx.Xxx.96 6379
Sentinel #10: 20650: x 22 października 01:43:52.464 * +FIX-SLAVE-CONFIG SLAVE XXX.Xxx.Xxx.177: 6379 xxx.Xxx.Xxx.177 6379 @ Shard-188 xxx.Xxx.Xxx.96 6379
Sentinel #2: 20838: x 22 października 01:44:53.489 * +FIX-SLAVE-CONFIG SLAVE XXX.Xxx.Xxx.177: 6379 xxx.Xxx.Xxx.177 6379 @ Shard-172 xxx.Xxx.Xxx.244 6379

Kiedy prowadzę polecenie Sentinel Masters, zauważyłem coś dziwnego. W przypadku 1 Shard-188 ma dwóch niewolników zamiast jednego. Ten sam wzór jest obserwowany, gdy xxx.Xxx.Xxx.177 spada pod Shard-172 lub Shard-182:

Przypadek 1) Master to xxx.Xxx.Xxx.244 i xxx.Xxx.Xxx.177 jest jednym z jego niewolników:

183) 1) „Nazwa”
2) „Shard-172”
3) „IP”
4) „xxx.Xxx.Xxx.244 “
5) „Port”
6) „6379”
7) „Runid”
8) „CA02DA1F0002A25A880E6765AED306B1857EE2F7”
9) „Flagi”
10) „Mistrz”
11) „Oczekiwane powiązania”
12) „0”
13) „Ostatnie ping-sent”
14) „0”
15) „Last-Ok-Ping-Reply”
16) „14”
17) „Ostatnie ping-one”
18) „14”
19) „Down-After-Milliiseconds”
20) „30000”
21) „Info-Refresh”
22) „5636”
23) „zgłaszane role”
24) „Mistrz”
25) „zgłaszany przez rolę”
26) „17154406”
27) „config-epoch”
28) „0”
29) „Num-SLAVES”
30) „1”
31) „Num-In-to-Sentinels”
32) „12”
33) „Quorum”
34) „7”
35) „czas awaryjny”
36) „60000”
37) „synchroniki równoległe”
38) „1”
72) 1) „Nazwa”
2) „Shard-188”
3) „IP”
4) „xxx.Xxx.Xxx.96 “
5) „Port”
6) „6379”
7) „Runid”
8) „95CD3A457EF71FC91FF1A1C5A6D5D4496B266167”
9) „Flagi”
10) „Mistrz”
11) „Oczekiwane powiązania”
12) „0”
13) „Ostatnie ping-sent”
14) „0”
15) „Last-Ok-Ping-Reply”
16) „927”
17) „Ostatnie ping-one”
18) „927”
19) „Down-After-Milliiseconds”
20) „30000”
21) „Info-Refresh”
22) „5333”
23) „zgłaszane role”
24) „Mistrz”
25) „zgłaszany przez rolę”
26) „17154312”
27) „config-epoch”
28) „0”
29) „Num-SLAVES”
30) „2”
31) „Num-In-to-Sentinels”
32) „12”
33) „Quorum”
34) „7”
35) „czas awaryjny”
36) „60000”
37) „synchroniki równoległe”
38) „1”

Przypadek 2) Master to xxx.Xxx.Xxx.96 i xxx.Xxx.Xxx.177 jest jednym z jego niewolników:

79) 1) „Nazwa”
2) „Shard-172”
3) „IP”
4) „xxx.Xxx.Xxx.244 “
5) „Port”
6) „6379”
7) „Runid”
8) „CA02DA1F0002A25A880E6765AED306B1857EE2F7”
9) „Flagi”
10) „Mistrz”
11) „Oczekiwane powiązania”
12) „0”
13) „Ostatnie ping-sent”
14) „0”
15) „Last-Ok-Ping-Reply”
16) „1012”
17) „Ostatnie ping-one”
18) „1012”
19) „Down-After-Milliiseconds”
20) „30000”
21) „Info-Refresh”
22) „1261”
23) „zgłaszane role”
24) „Mistrz”
25) „zgłaszany przez rolę”
26) „17059720”
27) „config-epoch”
28) „0”
29) „Num-SLAVES”
30) „1”
31) „Num-In-to-Sentinels”
32) „12”
33) „Quorum”
34) „7”
35) „czas awaryjny”
36) „60000”
37) „synchroniki równoległe”
38) „1”
273) 1) „Nazwa”
2) „Shard-188”
3) „IP”
4) „xxx.Xxx.Xxx.96 “
5) „Port”
6) „6379”
7) „Runid”
8) „95CD3A457EF71FC91FF1A1C5A6D5D4496B266167”
9) „Flagi”
10) „Mistrz”
11) „Oczekiwane powiązania”
12) „0”
13) „Ostatnie ping-sent”
14) „0”
15) „Last-Ok-Ping-Reply”
16) „886”
17) „Ostatnie ping-one”
18) „886”
19) „Down-After-Milliiseconds”
20) „30000”
21) „Info-Refresh”
22) „5333”
23) „zgłaszane role”
24) „Mistrz”
25) „zgłaszany przez rolę”
26) „17154312”
27) „config-epoch”
28) „0”
29) „Num-SLAVES”
30) „2”
31) „Num-In-to-Sentinels”
32) „12”
33) „Quorum”
34) „7”
35) „czas awaryjny”
36) „60000”
37) „synchroniki równoległe”
38) „1”

To są szczegóły mojego problemu z Redis Sentinel i problem Fix-Slave-Config. Wydaje się, że niektórzy niewolnicy są ustawiani jako niewolnicy dwóch mistrzów, co powoduje nieoczekiwane zachowanie w moim klastrze Redis. Szukam rozwiązania tego problemu i doceniam wszelkie porady lub sugestie.

Czy klaster Redis potrzebuje wartownika

Dzięki Gitlab Enterprise Edition możesz użyć pakietu Omnibus, aby skonfigurować wiele maszyn z demem Sentinel.

Redis Sentinel i Fix-Slave-Config Problem: Węzeł Redis jest ustawiony jako niewolnik dwóch mistrzów, gdy nie powinien być.

Возожно, ареса электроннy почты являюczeń анонимныи для этой групыы и POŁĄCZ вам т н н на н на н н н на н н н на н н н на н н нат н нат н н на н нат н на н на н на н н н на нат н н н н н н н н н н н н н н н н н н н н н н н н н н ектроной почты е частников, чтобы увидеть исходное собщениеS.

Próbuję użyć Sentinel do przełączania awaryjnego we dużej flocie Redis (12 wartowników, ponad 500 odłamków jednego mistrza i jednego niewolnika). Spotykam bardzo dziwny problem, w którym moi wartownicy wielokrotnie wydają polecenie +Fix-Slave-Config do niektórych węzłów Redis, a wynikiem jest pewne niewolnicy przełączający się między właściwym mistrzem a innym niewłaściwym Mistrzem. Nie zauważyłem, że dzieje się to na mniejszą skalę, ponieważ warto. Wszelkie porady dotyczące naprawy lub dalszego debugowania?

Zauważyłem dwa konkretne problemy:

A) +FIX-SLAVE-CONFIG KOMOWANIA, jak stwierdzono powyżej.

B) Sentinel.COND pokazuje niektórych niewolników mających dwóch mistrzów (powinni mieć tylko jeden)

Flota w stanie początkowym ma określony węzeł niewolniczy xxx.Xxx.Xxx.177 z Master XXX.Xxx.Xxx.244 (razem obejmują odłamek 188 we flocie). Bez awarii węzła mistrz niewolnika jest przełączany na xxx.Xxx.Xxx.96 (Mistrz dla Shard 188), a następnie z powrotem, a potem naprzód. Jest to weryfikowane przez sshing do niewolników i węzłów głównych i sprawdzanie informacji o Redis-CLI. Wszystkie węzły Redis rozpoczęły się we właściwej konfiguracji. Wszystkie węzły Sentinel miały prawidłową konfigurację w swoim Sentinel.conf. Każdy wartość ma dokładnie taką samą listę mistrzów, gdy je zapytam po każdej z tych zmian niewolników->.

W moich 12 wartownikach, następujące są zalogowane. W każdej minucie wysyłana jest wiadomość +Fix-Slave-Config:

Sentinel #8: 20096: x 22 października 01:41:49.793 * +FIX-SLAVE-CONFIG SLAVE XXX.Xxx.Xxx.177: 6379 xxx.Xxx.Xxx.177 6379 @ Shard-188 xxx.Xxx.Xxx.96 6379
Sentinel #1: 9832: x 22 października 01:42:50.795 * +FIX-SLAVE-CONFIG SLAVE XXX.Xxx.Xxx.177: 6379 xxx.Xxx.Xxx.177 6379 @ Shard-172 xxx.Xxx.Xxx.244 6379
Sentinel #6: 20528: x 22 października 01:43:52.458 * +FIX-SLAVE-CONFIG SLAVE XXX.Xxx.Xxx.177: 6379 xxx.Xxx.Xxx.177 6379 @ Shard-188 xxx.Xxx.Xxx.96 6379
Sentinel #10: 20650: x 22 października 01:43:52.464 * +FIX-SLAVE-CONFIG SLAVE XXX.Xxx.Xxx.177: 6379 xxx.Xxx.Xxx.177 6379 @ Shard-188 xxx.Xxx.Xxx.96 6379
Sentinel #2: 20838: x 22 października 01:44:53.489 * +FIX-SLAVE-CONFIG SLAVE XXX.Xxx.Xxx.177: 6379 xxx.Xxx.Xxx.177 6379 @ Shard-172 xxx.Xxx.Xxx.244 6379

Oto dane wyjściowe polecenia Sentinel Masters. Dziwne jest to, że Shard-188 ma dwóch niewolników, podczas gdy w rzeczywistości powinien mieć tylko 1. Wyjście wygląda tak samo, gdy xxx.Xxx.Xxx.177 jest pod Shard-172 i Shard-182.

Przypadek 1) xxx.Xxx.Xxx.244 jest mistrzem xxx.Xxx.Xxx.177

183) 1) „Nazwa”
2) „Shard-172”
3) „IP”
4) „xxx.Xxx.Xxx.244 ”
5) „Port”
6) „6379”
7) „Runid”
8) „CA02DA1F0002A25A880E6765AED306B1857EE2F7”
9) „Flagi”
10) „Mistrz”
11) „Oczekiwane powiązania”
12) „0”
13) „Ostatnie ping-sent”
14) „0”
15) „Last-Ok-Ping-Reply”
16) „14”
17) „Ostatnie ping-one”
18) „14”
19) „Down-After-Milliiseconds”
20) „30000”
21) „Info-Refresh”
22) „5636”
23) „zgłaszane role”
24) „Mistrz”
25) „zgłaszany przez rolę”
26) „17154406”
27) „config-epoch”
28) „0”
29) „Num-SLAVES”
30) „1”
31) „Num-In-to-Sentinels”
32) „12”
33) „Quorum”
34) „7”
35) „czas awaryjny”
36) „60000”
37) „synchroniki równoległe”
38) „1”
72) 1) „Nazwa”
2) „Shard-188”
3) „IP”
4) „xxx.Xxx.Xxx.96 ”
5) „Port”
6) „6379”
7) „Runid”
8) „95CD3A457EF71FC91FF1A1C5A6D5D4496B266167”
9) „Flagi”
10) „Mistrz”
11) „Oczekiwane powiązania”
12) „0”
13) „Ostatnie ping-sent”
14) „0”
15) „Last-Ok-Ping-Reply”
16) „927”
17) „Ostatnie ping-one”
18) „927”
19) „Down-After-Milliiseconds”
20) „30000”
21) „Info-Refresh”
22) „5333”
23) „zgłaszane role”
24) „Mistrz”
25) „zgłaszany przez rolę”
26) „17154312”
27) „config-epoch”
28) „0”
29) „Num-SLAVES”
30) „2”
31) „Num-In-to-Sentinels”
32) „12”
33) „Quorum”
34) „7”
35) „czas awaryjny”
36) „60000”
37) „synchroniki równoległe”
38) „1”

Przypadek 2) xxx.Xxx.Xxx.96 jest mistrzem xxx.Xxx.Xxx.177

79) 1) „Nazwa”
2) „Shard-172”
3) „IP”
4) „xxx.Xxx.Xxx.244 ”
5) „Port”
6) „6379”
7) „Runid”
8) „CA02DA1F0002A25A880E6765AED306B1857EE2F7”
9) „Flagi”
10) „Mistrz”
11) „Oczekiwane powiązania”
12) „0”
13) „Ostatnie ping-sent”
14) „0”
15) „Last-Ok-Ping-Reply”
16) „1012”
17) „Ostatnie ping-one”
18) „1012”
19) „Down-After-Milliiseconds”
20) „30000”
21) „Info-Refresh”
22) „1261”
23) „zgłaszane role”
24) „Mistrz”
25) „zgłaszany przez rolę”
26) „17059720”
27) „config-epoch”
28) „0”
29) „Num-SLAVES”
30) „1”
31) „Num-In-to-Sentinels”
32) „12”
33) „Quorum”
34) „7”
35) „czas awaryjny”
36) „60000”
37) „synchroniki równoległe”
38) „1”
273) 1) „Nazwa”
2) „Shard-188”
3) „IP”
4) „xxx.Xxx.Xxx.96 ”
5) „Port”
6) „6379”
7) „Runid”
8) „95CD3A457EF71FC91FF1A1C5A6D5D4496B266167”
9) „Flagi”
10) „Mistrz”
11) „Oczekiwane powiązania”
12) „0”
13) „Ostatnie ping-sent”
14) „0”
15) „Last-Ok-Ping-Reply”
16) „886”
17) „Ostatnie ping-one”
18) „886”
19) „Down-After-Milliiseconds”
20) „30000”
21) „Info-Refresh”
22) „5762”
23) „zgłaszane role”
24) „Mistrz”
25) „zgłaszany przez rolę”
26) „17059758”
27) „config-epoch”
28) „0”
29) „Num-SLAVES”
30) „2”
31) „Num-In-to-Sentinels”
32) „12”
33) „Quorum”
34) „7”
35) „czas awaryjny”
36) „60000”
37) „synchroniki równoległe”
38) „1”

Mój początkowy wartownik.conf dla każdego wartownika jest

MaxClients 20000
Uwaga LOTLEVEL
logfile “/home/redis/logs/sentinel.dziennik”
Sentinel Monitor Shard-172 Redis-B-172 7
Sentinel Down-MiliseConds Shard-172 30000
Sentinel Failover Timeout Shard-172 60000
Sentinel równoległe synchroniki odłamki-172 1
.
Sentinel Monitor Shard-188 Redis-B-188 7
Sentinel Down-MiliseConds Shard-188 30000
Sentinel Failover Timeout Shard-188 60000
Sentinel równoległe synchroniki odłamki-188 1

Oto powstały wartownik.conf (dla wszystkich wartowników) po kilku minutach- zwróć uwagę na dwóch niewolników:

Sentinel Monitor Shard-172 xxx.Xxx.Xxx.244 6379 7
Sentinel Failover Timeout Shard-172 60000
Sentinel Config-epoch Shard-172 0
lider Sentinel-Epoch Shard-172 0
Sentinel znany odłamek niewolnika-172 xxx.Xxx.Xxx.177 6379 Sentinel znany sentinel Shard-172 .
.
Sentinel Monitor Shard-188 xxx.Xxx.Xxx.96 6379 7
Sentinel Failover Timeout Shard-188 60000
Sentinel Config-epoch Shard-188 0
lider Sentinel-Epoch Shard-188 0
Sentinel znany odłamek-niewolnik-188 xxx.Xxx.Xxx.194 6379 Sentinel znany odłamek SLAVE-188 xxx.Xxx.Xxx.177 6379
Sentinel znany Sentinel Shard-188 .

Replikacja Redis i przełączanie awaryjne z omnibus gitlab (Jaźń premium)

Uwaga: jest to dokumentacja dla pakietów Omnibus Gitlab. Aby używać własnego niewidlonego Redis, postępuj zgodnie z odpowiednią dokumentacją.

UWAGA: W Lingo Redis podstawowa nazywa się master. W tym dokumencie zamiast master używany jest podstawowy, z wyjątkiem ustawień, w których Master jest wymagany.

Korzystanie z Redis w skalowalnym środowisku jest możliwe za pomocą Podstawowy X Replika Topologia z usługą Redis Sentinel do oglądania i automatycznie rozpoczynającej procedurę przełączania awaryjnego.

Redis wymaga uwierzytelnienia, jeśli jest używany z Sentinel. Więcej informacji można znaleźć w dokumentacji bezpieczeństwa Redis. Zalecamy użycie kombinacji hasła Redis i ścisłych zasad zapory, aby zabezpieczyć usługę Redis. Zachęcamy do przeczytania dokumentacji Redis Sentinel przed skonfigurowaniem Redis z Gitlabem, aby w pełni zrozumieć topologię i architekturę.

Przed zanurzeniem się w szczegóły konfiguracji Redis i Redis Sentinel w celu powtórzonego topologii, upewnij się, że przeczytałeś ten dokument jako całość, aby lepiej zrozumieć, w jaki sposób komponenty są ze sobą powiązane.

Potrzebujesz co najmniej 3 niezależnych maszyn: fizycznych lub maszyn wirtualnych wpadających na odrębne maszyny fizyczne. Konieczne jest, aby wszystkie instancje pierwotne i repliki Redis działały w różnych maszynach. Jeśli nie dostarczysz maszyn w ten konkretny sposób, każdy problem ze wspólnym środowiskiem może obniżyć całą konfigurację.

Można uruchomić wartownik obok pierwotnej lub repliki instancji Redis. Jednak na tym samym komputerze nie powinien być więcej niż jeden.

Musisz także wziąć pod uwagę podstawową topologię sieci, upewniając się, że masz zbędną łączność między instancjami Redis / Sentinel i Gitlab, w przeciwnym razie sieci stają się jednym punktem awarii.

Uruchomienie Redis w skalowanym środowisku wymaga kilku rzeczy:

  • Wiele instancji Redis
  • Uruchom redis w Podstawowy X Replika topologia
  • Wiele instancji Sentinel
  • Wsparcie i widoczność aplikacji dla wszystkich instancji Sentinel i Redis

Redis Sentinel może obsługiwać najważniejsze zadania w środowisku HA, a to pomaga utrzymać serwery w Internecie bez minimalnego lub bez przestoju. Redis Sentinel:

  • Monitory Podstawowy I Repliki przypadki, aby sprawdzić, czy są dostępne
  • Promuje Replika Do Podstawowy kiedy Podstawowy niepowodzenie
  • Degrada Podstawowy Do Replika Kiedy nie powiodło się Podstawowy wraca online (aby zapobiec dzielowi danych)
  • Może być zapytane przez aplikację, aby zawsze łączyć się z bieżącym Podstawowy serwer

Kiedy Podstawowy nie odpowiada, jest to odpowiedzialność aplikacji (w naszym przypadku Gitlab) za radzenie sobie z limitem czasu i ponownego połączenia (zapytanie Posterunek dla nowego Podstawowy).

Aby lepiej zrozumieć, jak prawidłowo skonfigurować Sentinel, najpierw przeczytaj dokumentację Redis Sentinel, ponieważ nie można jej prawidłowo skonfigurować, może prowadzić do utraty danych lub zmniejszyć całą klaster, unieważniając wysiłek awaryjny.

Zalecana konfiguracja

Aby uzyskać minimalną konfigurację, musisz zainstalować pakiet Omnibus Gitlab w 3 niezależny maszyny, oba z Redis I Posterunek:

  • Redis Primary + Sentinel
  • Redis Replica + Sentinel
  • Redis Replica + Sentinel

Jeśli nie jesteś pewien lub nie rozumiesz, dlaczego i skąd pochodzi ilość węzłów, przeczytaj przegląd konfiguracji Redis i przegląd konfiguracji Sentinel.

Aby uzyskać zalecaną konfigurację, która może oprzeć się większej liczbie awarii, musisz zainstalować pakiet Omnibus Gitlab w 5 niezależny maszyny, oba z Redis I Posterunek:

  • Redis Primary + Sentinel
  • Redis Replica + Sentinel
  • Redis Replica + Sentinel
  • Redis Replica + Sentinel
  • Redis Replica + Sentinel

Przegląd konfiguracji Redis

Musisz mieć co najmniej 3 serwery Redis: 1 pierwotne, 2 repliki i muszą one być na niezależnych maszynach (patrz wyjaśnienie powyżej).

Możesz mieć dodatkowe węzły Redis, co pomaga przetrwać sytuację, w której coraz więcej węzłów spada. Ilekroć jest tylko 2 węzły online, nie jest inicjatywa awaryjna.

Jako przykład, jeśli masz 6 węzłów Redis, maksymalnie 3 może być jednocześnie w dół.

Istnieją różne wymagania dotyczące węzłów Sentinel. Jeśli hostujesz je w tych samych maszynach Redis, może być konieczne uwzględnienie tych ograniczeń przy obliczaniu ilości węzłów, które należy udostępnić. Aby uzyskać więcej informacji.

Wszystkie węzły Redis powinny być skonfigurowane w ten sam sposób i z podobnymi specyfikacjami serwera, jak w sytuacji przełączania awaryjnego, dowolne Replika można promować jako nowy Podstawowy przez serwery Sentinel.

Replikacja wymaga uwierzytelnienia, więc musisz zdefiniować hasło, aby chronić wszystkie węzły Redis i wartowniki. Wszystkie dzielą to samo hasło, a wszystkie instancje muszą być w stanie rozmawiać ze sobą przez sieć.

Przegląd konfiguracji Sentinel

Sentinels obserwuje oba inne sentryle i węzły Redis. Ilekroć Sentinel wykrywa, że ​​węzeł Redis nie odpowiada, ogłasza status węzła na rzecz pozostałych wartowników. Strażnicy muszą dotrzeć do kworum (Minimalna ilość wartowników zgadzających się z węzłem spadła), aby móc rozpocząć przełączanie awaryjne.

Ilekroć kworum jest spotkany, większość Ze wszystkich znanych węzłów Sentinel muszą być dostępne i osiągalne, aby mogły wybrać Sentinel lider który podejmuje wszystkie decyzje, aby przywrócić dostępność usług przez:

  • Promowanie nowego Podstawowy
  • Rekonfiguracja drugiego Repliki i spraw, aby wskazać nowe Podstawowy
  • Ogłaszaj nowy Podstawowy Do każdego innego Sentinel Raider
  • Ponownie skonfiguruj stare Podstawowy i zdegraduj do Replika Kiedy wraca online

Musisz mieć co najmniej 3 serwery Redis Sentinel i muszą one być każdy w niezależnej maszynie (które, jak się uważa, zawodzą niezależnie), najlepiej na różnych obszarach geograficznych.

Możesz je skonfigurować w tych samych maszynach, w których skonfigurowałeś inne serwery Redis, ale rozumiesz, że jeśli cały węzeł spadnie, tracisz zarówno wartość, jak i instancję Redis.

Liczba wartowników powinna zawsze być dziwne liczba, aby algorytm konsensusu był skuteczny w przypadku awarii.

W topologii 3 węzłów możesz sobie pozwolić tylko na 1 sentinel węzeł. Ilekroć większość Spośród wartowników spada, ochrona przed partycją sieciową zapobiega niszczycielskie działania i przełączanie awaryjne nie jest uruchomiony.

Oto kilka przykładów:

  • Z 5 lub 6 wartowników maksymalnie 2 może zejść na początek awaryjnego.
  • Z 7 wartownikami maksymalnie 3 węzły może zejść.

Lider Wybory mogą czasem poradzić sobie w rundzie głosu, kiedy zgoda nie jest osiągnięte (patrz nieparzysty wymagań węzłów powyżej). W takim przypadku podejmowana jest nowa próba po ilości czasu zdefiniowanej w Sentinel [„Failover_timeout”] (w milisekundach).

UWAGA: Widzimy, gdzie Sentinel [„uprawień_timeout”] jest zdefiniowany później.

Zmienna Failover_Timeout ma wiele różnych przypadków użycia. Zgodnie z oficjalną dokumentacją:

  • Czas potrzebny na ponowne uruchomienie przełączania awaryjnego po poprzednim przełączaniu awaryjnym był już wypróbowany przeciwko tej samej podstawowej przez danego wartownika.
  • Czas potrzebny replice repliki do niewłaściwego podstawowego zgodnie z konfiguracją prądu Sentinel, który ma być zmuszony do powtórzenia z właściwym podstawowym, jest dokładnie czasem przełączania awaryjnego (liczenie od momentu wykrycia błędnej konfiguracji).
  • Czas potrzebny na anulowanie przełączania awaryjnego, który jest już w toku, ale nie spowodował żadnej zmiany konfiguracji (replika nikt jeszcze nie potwierdzony przez promowaną replikę).
  • Maksymalny czas, w którym w trakcie przełączania awaryjnego czeka, aż wszystkie repliki zostaną ponownie skonfigurowane jako repliki nowego pierwotnego. Jednak nawet po tym czasie repliki są ponownie skonfigurowane przez Sentinels, ale nie z dokładnym postępem synchronizacji równoległej, jak określono.

Konfigurowanie Redis

To jest sekcja, w której instalujemy i konfigurujemy nowe instancje Redis.

Zakłada się, że zainstalowałeś gitlab i wszystkie jego komponenty od zera. Jeśli masz już zainstalowane i uruchomione Redis, przeczytaj, jak przełączyć się z instalacji jednomiejskiej.

Uwaga: węzły Redis (zarówno podstawowe, jak i repliki) potrzebują tego samego hasła zdefiniowanego w Redis [„Hasło”] . W dowolnym momencie podczas przełączania awaryjnego Sentinels może ponownie skonfigurować węzeł i zmienić jego status z podstawowej na replikę i odwrotnie.

Wymagania

Wymagania dotyczące konfiguracji Redis są następujące:

  1. Udostępnij minimalną wymaganą liczbę instancji określonych w zalecanej sekcji konfiguracji.
  2. My Nie rób Zalecaj zainstalowanie Redis lub Redis Sentinel w tych samych maszynach, na której działa aplikacja Gitlab, ponieważ osłabia to konfigurację HA. Możesz jednak zdecydować się na zainstalowanie Redis i Sentinel w tym samym komputerze.
  3. Wszystkie węzły Redis muszą być w stanie rozmawiać ze sobą i akceptować przychodzące połączenia nad portykami Redis (6379) i Sentinel (26379) (chyba że zmienisz domyślne).
  4. Serwer, który hostuje aplikację Gitlab, musi mieć dostęp do węzłów Redis.
  5. Chroń węzły przed dostępem z sieci zewnętrznych (Internet), korzystając z zapory ogniowej.

Przełączanie się z istniejącej instalacji jednoczesnej maszyny

Jeśli masz już działającą instalację gitlab single-mat.

Twoja instalacja jednomina Podstawowy, a 3 pozostałe powinny być skonfigurowane jako Replika wskazując na tę maszynę.

Po nadrobieniu zaległości, musisz zatrzymać usługi w instalacji jednoczesnej, aby obrócić Podstawowy do jednego z nowych węzłów.

Dokonaj wymaganych zmian w konfiguracji i ponownie uruchom ponownie nowe węzły.

Aby wyłączyć Redis w pojedynczej instalacji, edytuj/etc/gitlab/gitlab.RB:

Redis[[['włączać'] = FAŁSZ

Jeśli nie powiesz najpierw, możesz stracić dane (nieprzetworzone zadania w tle).

Krok 1. Konfigurowanie podstawowej instancji Redis

  1. Ssh do Podstawowy Serwer Redis.
  2. Pobierz/zainstaluj pakiet Omnibus Gitlab, którego chcesz używać Kroki 1 i 2 Na stronie pobierania Gitlab.
    • Upewnij się, że wybierzesz prawidłowy pakiet Omnibus, z tą samą wersją i typem (społeczność, edycje korporacyjne) swojej bieżącej instalacji.
    • Nie wykonuj żadnych innych kroków na stronie pobierania.
  3. Edycja/etc/gitlab/gitlab.RB i dodaj zawartość:

# Określ rolę serwera jako „redis_master_role” Role [[[„redis_master_role”] # Adres IP wskazujący na lokalny adres IP, do którego mogą dotrzeć inne maszyny. # Możesz także ustawić powiązanie z '0.0.0.0 ', które słuchają we wszystkich interfejsach. # Jeśli naprawdę chcesz powiązać z zewnętrznym dostępnym adresem IP, zrób # na pewno dodasz dodatkowe zasady zapory, aby zapobiec nieautoryzowanemu dostępowi. Redis[[['wiązać'] = '10.0.0.1 ' # Zdefiniuj port, aby Redis mógł słuchać żądań TCP, które umożliwiają inne # Maszyny do połączenia się z nim. Redis[[['Port'] = 6379 # Skonfiguruj uwierzytelnianie hasła dla redis (użyj tego samego hasła we wszystkich węzłach). Redis[[['hasło'] = „Redis-Password-Goes-here”

gitlab_rails[[[„Auto_migrate”] = FAŁSZ

Uwaga: Możesz określić wiele ról, takich jak Sentinel i Redis jako: role [„redis_sentinel_role”, „redis_master_role”] . Przeczytaj więcej o rolach.

Krok 2. Konfigurowanie instancji repliki Redis

  1. Ssh do replika Serwer Redis.
  2. Pobierz/zainstaluj pakiet Omnibus Gitlab, którego chcesz używać Kroki 1 i 2 Na stronie pobierania Gitlab.
    • Upewnij się, że wybierzesz prawidłowy pakiet Omnibus, z tą samą wersją i typem (społeczność, edycje korporacyjne) swojej bieżącej instalacji.
    • Nie wykonuj żadnych innych kroków na stronie pobierania.
  3. Edycja/etc/gitlab/gitlab.RB i dodaj zawartość:

# Określ rolę serwera jako „redis_replica_role” Role [[[„Redis_replica_Role”] # Adres IP wskazujący na lokalny adres IP, do którego mogą dotrzeć inne maszyny. # Możesz także ustawić powiązanie z '0.0.0.0 ', które słuchają we wszystkich interfejsach. # Jeśli naprawdę chcesz powiązać z zewnętrznym dostępnym adresem IP, zrób # na pewno dodasz dodatkowe zasady zapory, aby zapobiec nieautoryzowanemu dostępowi. Redis[[['wiązać'] = '10.0.0.2 ' # Zdefiniuj port, aby Redis mógł słuchać żądań TCP, które umożliwiają inne # Maszyny do połączenia się z nim. Redis[[['Port'] = 6379 # To samo hasło do uwierzytelniania Redis, które skonfigurujesz dla węzła podstawowego. Redis[[['hasło'] = „Redis-Password-Goes-here” # IP głównego węzła Redis. Redis[[[„Master_ip”] = '10.0.0.1 ' # Port głównego serwera Redis, odkształcenie na zmianę na nie domyślne. Domyślne # do „6379”. #Redis ['master_port'] = 6379

Sudo Touch /etc/gitlab/skip-auto-reconfigure

Uwaga: Możesz określić wiele ról, takich jak Sentinel i Redis jako: role [„redis_sentinel_role”, „redis_master_role”] . Przeczytaj więcej o rolach.

Wartości te nie muszą być ponownie zmieniane w/etc/gitlab/gitlab.RB po przełączaniu awaryjnym, ponieważ węzły są zarządzane przez Sentinels, a nawet po rekonfiguracji Gitlab-Ctl, przywrócono ich konfigurację przez te same wartowniki.

Krok 3. Konfigurowanie instancji Redis Sentinel

Uwaga: Jeśli używasz zewnętrznej instancji Redis Sentinel, należy wykluczyć parametr wymagany z konfiguracji Sentinel. Ten parametr powoduje, że klienci zgłaszają wymagane uwierzytelnianie NOAuth. . Redis Sentinel 3.2.X nie obsługuje uwierzytelniania hasła.

Teraz, gdy serwery Redis są skonfigurowane, skonfigurujmy serwery Sentinel.

Jeśli nie masz pewności, czy Twoje serwery Redis działają i poprawnie replikuje się, przeczytaj replikację rozwiązywania problemów i napraw przed konfiguracją Sentinel.

Musisz mieć co najmniej 3 serwery Redis Sentinel, a one muszą być każdy w niezależnej maszynie. Możesz je skonfigurować w tych samych maszynach, w których skonfigurowałeś inne serwery Redis.

Dzięki Gitlab Enterprise Edition możesz użyć pakietu Omnibus, aby skonfigurować wiele maszyn z demem Sentinel.

  1. SSH na serwerze, który hostuje Redis Sentinel.
  2. Możesz pominąć ten krok, jeśli wartowniki są hostowane w tym samym węźle, co inne instancje Redis.Pobierz/zainstaluj pakiet Omnibus Gitlab Enterprise Edition Kroki 1 i 2 Na stronie pobierania Gitlab.
    • Upewnij się, że wybierzesz prawidłowy pakiet omnibus, z tą samą wersją, którą uruchomiła aplikacja Gitlab.
    • Nie wykonuj żadnych innych kroków na stronie pobierania.
  3. Edycja/etc/gitlab/gitlab.RB i dodaj zawartość (jeśli instalujesz wartowniki w tym samym węźle, co inne instancje Redis, niektóre wartości mogą być powielone poniżej):

Role [[[„Redis_sentinel_Role”] # Musi być taki sam w każdym węźle Sentinel Redis[[[„Master_name”] = „Gitlab-Redis” # To samo hasło do uwierzytelniania Redis, które skonfigurujesz dla węzła podstawowego. Redis[[[„Master_password”] = „Redis-Password-Goes-here” # IP głównego węzła Redis. Redis[[[„Master_ip”] = '10.0.0.1 ' # Zdefiniuj port, aby Redis mógł słuchać żądań TCP, które umożliwiają inne # Maszyny do połączenia się z nim. Redis[[['Port'] = 6379 # Port głównego serwera Redis, odkształcenie na zmianę na nie domyślne. Domyślne # do „6379”. #Redis ['master_port'] = 6379 ## Skonfiguruj Sentinel posterunek[[['wiązać'] = '10.0.0.1 ' # Port, na którym służy Sentinel, odkształcenie, aby zmienić się na nieoczekiwane. Domyślne # do „26379”. # Sentinel ['port'] = 26379 ## QUORUM musi odzwierciedlać kwotę głosowania, jakiej potrzeba, aby rozpocząć przełączanie awaryjne. ## Wartość nie może być większa niż kwota wartowników. ## ## Kworum można wykorzystać do dostrojenia Sentinel na dwa sposoby: ## 1. Jeśli kworum jest ustawione na wartość mniejszą niż większość wartowników ## wdrażamy, w zasadzie sprawia, że ​​Sentinel jest bardziej rozsądny dla pierwotnych awarii, ## Wywołuwanie awaryjnego przełączania awaryjnego, gdy tylko nawet mniejszość Sentinels nie jest już ## Potrafi rozmawiać z podstawową. ## 1. Jeśli kworum jest ustawione na wartość większą niż większość wartowników, jesteśmy ## sprawiają, że Sentinel jest w stanie przełączyć się tylko wtedy, gdy jest bardzo duża liczba (większa ## niż większość) dobrze połączonych wartowników, które zgadzają się na to, że podstawowa istota.S posterunek[[['kworum'] = 2 ## Rozważ serwer nie do reagowania w dół po x ilość MS. # Sentinel ['Down_After_Milliseconds'] = 10000 ## określa limit czasu awaryjnego w milisekundach. Jest używany na wiele sposobów: ## ## - Czas potrzebny na ponowne uruchomienie przełączania awaryjnego po poprzednim przełączaniu awaryjnym ## już wypróbowane przeciwko tej samej podstawowej przez danego wartownika, to dwa ## razy czas awaryjny. ## ## - Czas potrzebny do replikacji repliki do niewłaściwego podstawowego według ## do aktualnej konfiguracji Sentinel, aby być zmuszonym do powtórzenia ## z właściwym podstawowym, jest dokładnie czasem przejściowym (od tego czasu liczenie ## moment, w którym wartość wykryła błędną konfigurację). ## ## - Czas potrzebny na anulowanie przełączania awaryjnego, który już jest w toku, ale ## nie stworzył żadnej zmiany konfiguracji (replika nikt jeszcze nie ## uznane przez promowaną replikę). ## ## - Maksymalny czas, w którym w toku przełączono przełączanie awaryjne, czeka na całą replikę ## ponownie skonfigurowane jako repliki nowego podstawowego. Jednak nawet po tym czasie ## Repliki są ponownie skonfigurowane przez wartowniki, ale nie z ## Dokładny postęp z synchronizacji równoległej, jak określono. # Sentinel ['uprawień_timeout'] = 60000

Sudo Touch /etc/gitlab/skip-auto-reconfigure

Krok 4. Konfigurowanie aplikacji Gitlab

Ostatnią częścią jest poinformowanie głównego serwera aplikacji Gitlab serwerów Redis Sentinels i poświadczeń uwierzytelniania.

Możesz włączyć lub wyłączyć obsługę Sentinel w dowolnym momencie w nowych lub istniejących instalacjach. Z perspektywy aplikacji Gitlab wszystko, czego wymaga, to prawidłowe poświadczenia dla węzłów Sentinel.

Chociaż nie wymaga listy wszystkich węzłów Sentinel, w przypadku awarii, musi uzyskać dostęp do co najmniej jednego z wymienionych.

Uwaga: Poniższe kroki powinny być wykonane na serwerze aplikacji Gitlab, który idealnie nie powinien mieć na nim redis ani wartowników dla konfiguracji HA.

  1. SSH na serwerze, na którym instalowana jest aplikacja Gitlab.
  2. Edycja/etc/gitlab/gitlab.RB i dodaj/zmień następujące wiersze:

## musi być taki sam w każdym węźle Sentinel Redis[[[„Master_name”] = „Gitlab-Redis” ## To samo hasło do uwierzytelniania Redis, które skonfigurujesz dla węzła podstawowego. Redis[[[„Master_password”] = „Redis-Password-Goes-here” ## Lista wartowników z „host” i „port” gitlab_rails[[[„redis_sentinels”] = [[[ 'gospodarz' => '10.0.0.1 ', 'Port' => 26379>, 'gospodarz' => '10.0.0.2 ', 'Port' => 26379>, 'gospodarz' => '10.0.0.3 ', 'Port' => 26379> ]

Krok 5. Włącz monitorowanie

Jeśli włączysz monitorowanie, należy go włączyć Wszystko Serwery Redis.

  1. Pamiętaj, aby zebrać Consul_Server_nodes, które są adresami IP lub rekordami DNS węzłów serwera konsuli. Uwaga są przedstawiane jako y.Y.Y.Y Consul1.Gitlab.przykład.com z.Z.Z.Z
  2. Utwórz/edytuj/etc/gitlab/gitlab.RB i dodaj następującą konfigurację:

# Włącz odkrycie usług dla Prometeusza konsul[[['włączać'] = PRAWDA konsul[[[„Monitoring_service_discovery”] = PRAWDA # Wymień symbole zastępcze # Y.Y.Y.Y Consul1.Gitlab.przykład.com z.Z.Z.Z # z adresami węzłów serwera konsu konsul[[['konfiguracja'] =  Retry_join: %W (y.Y.Y.Y Consul1.Gitlab.przykład.com z.Z.Z.Z), > # Ustaw adresy sieciowe, na których eksporterzy słuchają Node_exporter[[[„Słuchaj_address”] = '0.0.0.0: 9100 ' redis_exporter[[[„Słuchaj_address”] = '0.0.0.0: 9121 '

Przykład minimalnej konfiguracji z 1 pierwotnymi, 2 replikami i 3 wartownikami

W tym przykładzie uważamy, że wszystkie serwery mają wewnętrzny interfejs sieciowy z IPS w 10.0.0.x zakresu i że mogą się ze sobą łączyć za pomocą tych adresów IPS.

W prawdziwym użyciu, założyłeś również zasady zapory, aby zapobiec nieautoryzowanemu dostępowi z innych maszyn i blokowania ruchu z zewnątrz (Internet).

Używamy tych samych 3 węzłów z Redis + Posterunek Topologia omówiona w przeglądzie konfiguracji Redis i dokumentacja konfiguracji Sentinel.

Oto lista i opis każdego maszyna i przypisane Ip:

  • 10.0.0.1: Redis Primary + Sentinel 1
  • 10.0.0.2: Redis Replica 1 + Sentinel 2
  • 10.0.0.3: Redis Replica 2 + Sentinel 3
  • 10.0.0.4: Aplikacja Gitlab

Po początkowej konfiguracji, jeśli węzły Sentinel zainicjowane są przełączanie awaryjne, węzły Redis są ponownie skonfigurowane i Podstawowy zmienia się na stałe (w tym w Redis.conf) z jednego węzła do drugiego, aż nowa przełączanie awaryjne zostanie ponownie zainicjowane.

To samo dzieje się z Sentinel.Conf, który jest zastąpiony po początkowym wykonaniu, po tym, jak każdy nowy węzeł Sentinel zacznie oglądać Podstawowy, lub przełączanie awaryjne promuje inne Podstawowy węzeł.

Przykładowa konfiguracja dla Redis Primary i Sentinel 1

Role [[[„Redis_sentinel_Role”, „redis_master_role”] Redis[[['wiązać'] = '10.0.0.1 ' Redis[[['Port'] = 6379 Redis[[['hasło'] = „Redis-Password-Goes-here” Redis[[[„Master_name”] = „Gitlab-Redis” # musi być taki sam w każdym węźle Sentinel Redis[[[„Master_password”] = „Redis-Password-Goes-here” # Ta sama wartość zdefiniowana w redis [„hasło”] w podstawowej instancji Redis[[[„Master_ip”] = '10.0.0.1 ' # IP początkowej pierwotnej instancji Redis #Redis ['master_port'] = 6379 # port początkowej pierwotnej instancji Redis, odkształcenie się na zmianę na braku posterunek[[['wiązać'] = '10.0.0.1 ' # Sentinel ['port'] = 26379 # Uznotowanie, aby zmienić domyślny port posterunek[[['kworum'] = 2 # Sentinel ['Down_After_Milliseconds'] = 10000 # Sentinel ['uprawień_timeout'] = 60000

Ponownie konfiguruj Omnibus gitlab, aby zmiany w obowalniu.

Przykładowa konfiguracja Redis Replica 1 i Sentinel 2

Role [[[„Redis_sentinel_Role”, „Redis_replica_Role”] Redis[[['wiązać'] = '10.0.0.2 ' Redis[[['Port'] = 6379 Redis[[['hasło'] = „Redis-Password-Goes-here” Redis[[[„Master_password”] = „Redis-Password-Goes-here” Redis[[[„Master_ip”] = '10.0.0.1 ' # IP głównego serwera Redis #Redis ['master_port'] = 6379 # port głównego serwera Redis, niezmienność do zmiany na nie domyślnie Redis[[[„Master_name”] = „Gitlab-Redis” # musi być taki sam w każdym węźle Sentinel posterunek[[['wiązać'] = '10.0.0.2 ' # Sentinel ['port'] = 26379 # Uznotowanie, aby zmienić domyślny port posterunek[[['kworum'] = 2 # Sentinel ['Down_After_Milliseconds'] = 10000 # Sentinel ['uprawień_timeout'] = 60000

Ponownie konfiguruj Omnibus gitlab, aby zmiany w obowalniu.

Przykładowa konfiguracja Redis Replica 2 i Sentinel 3

Role [[[„Redis_sentinel_Role”, „Redis_replica_Role”] Redis[[['wiązać'] = '10.0.0.3 ' Redis[[['Port'] = 6379 Redis[[['hasło'] = „Redis-Password-Goes-here” Redis[[[„Master_password”] = „Redis-Password-Goes-here” Redis[[[„Master_ip”] = '10.0.0.1 ' # IP głównego serwera Redis #Redis ['master_port'] = 6379 # port głównego serwera Redis, niezmienność do zmiany na nie domyślnie Redis[[[„Master_name”] = „Gitlab-Redis” # musi być taki sam w każdym węźle Sentinel posterunek[[['wiązać'] = '10.0.0.3 ' # Sentinel ['port'] = 26379 # Uznotowanie, aby zmienić domyślny port posterunek[[['kworum'] = 2 # Sentinel ['Down_After_Milliseconds'] = 10000 # Sentinel ['uprawień_timeout'] = 60000

Ponownie konfiguruj Omnibus gitlab, aby zmiany w obowalniu.

Przykładowa konfiguracja aplikacji Gitlab

Redis[[[„Master_name”] = „Gitlab-Redis” Redis[[[„Master_password”] = „Redis-Password-Goes-here” gitlab_rails[[[„redis_sentinels”] = [[[ 'gospodarz' => '10.0.0.1 ', 'Port' => 26379>, 'gospodarz' => '10.0.0.2 ', 'Port' => 26379>, 'gospodarz' => '10.0.0.3 ', 'Port' => 26379> ]

Ponownie konfiguruj Omnibus gitlab, aby zmiany w obowalniu.

Zaawansowana konfiguracja

Omnibus gitlab konfiguruje niektóre rzeczy za zasłaniami, aby ułatwić życie Sysadminom. Jeśli chcesz wiedzieć, co się stanie pod spodem, dalej czytaj.

Uruchamianie wielu klastrów Redis

Omnibus Gitlab obsługuje uruchamianie oddzielnych instancji Redis i Sentinel dla różnych klas trwałości.

Klasa Zamiar
Pamięć podręczna Przechowuj dane buforowane.
Kolejki Praca w tle sklepików.
shared_state Przechowuj sesję i inne trwałe dane.
możliwe do działania Backend pub/substancja dla akcji.
trace_chunks Przechowuj dane Trace Fragmenty.

Aby to zadziałało z Sentinel:

  1. Skonfiguruj różne instancje Redis/Sentinels w oparciu o Twoje potrzeby.
  2. Dla każdej instancji aplikacji Rails edytuj ITS/ETC/GITLAB/GITLAB.plik RB:

gitlab_rails[[[„redis_cache_instance”] = Redis_cache_url gitlab_rails[[[„redis_queues_instance”] = Redis_queues_url gitlab_rails[[[„redis_shared_state_instance”] = Redis_shared_state_url gitlab_rails[[[„redis_actioncable_instance”] = Redis_actioncable_url gitlab_rails[[[„redis_trace_chunks_instance”] = Redis_trace_chunks_url # Skonfiguruj wartowniki gitlab_rails[[[„redis_cache_sentinels”] = [[[  gospodarz: Redis_cache_sentinel_host, Port: 26379 >,  gospodarz: Redis_cache_sentinel_host2, Port: 26379 > ] gitlab_rails[[[„redis_queues_sentinels”] = [[[  gospodarz: Redis_queues_sentinel_host, Port: 26379 >,  gospodarz: Redis_queues_sentinel_host2, Port: 26379 > ] gitlab_rails[[[„redis_shared_state_sentinels”] = [[[  gospodarz: Shared_state_sentinel_host, Port: 26379 >,  gospodarz: Shared_state_sentinel_host2, Port: 26379 > ] gitlab_rails[[[„redis_actioncable_sentinels”] = [[[  gospodarz: ActionCable_Sentinel_Host, Port: 26379 >,  gospodarz: ActionCable_Sentinel_Host2, Port: 26379 > ] gitlab_rails[[[„redis_trace_chunks_sentinels”] = [[[  gospodarz: Trace_chunks_sentinel_host, Port: 26379 >,  gospodarz: Trace_chunks_sentinel_host2, Port: 26379 > ]

  • URL Redis powinny znajdować się w formacie: redis: //: hasło@sentinel_primary_name, gdzie:
    • Hasło jest hasłem zwykłego tekstu dla instancji Redis.
    • Sentinel_primary_name to podstawowa nazwa Sentinel z Redis [„Master_name”], na przykład Gitlab-Redis-Cache .

    sudo GITLAB-CTL Reconfigura

    UWAGA: Dla każdej klasy trwałości domyślnie gitlab przy użyciu konfiguracji określonej w gitlab_rails [‘redis_sentinels’], chyba że zastąpiono wcześniej opisane ustawienia.

    Kontrola usług uruchamiających

    W poprzednim przykładzie użyliśmy redis_sentinel_role i redis_master_role, co upraszcza ilość zmian konfiguracji.

    Jeśli chcesz mieć większą kontrolę, oto, co każdy ustawia dla Ciebie automatycznie, gdy jest włączony:

    ## Redis Sentinel rola Redis_Sentinel_Role[[['włączać'] = PRAWDA # Gdy rola Sentinel jest włączona, włączone są również następujące usługi posterunek[[['włączać'] = PRAWDA # Następujące usługi są wyłączone Redis[[['włączać'] = FAŁSZ Bootstrap[[['włączać'] = FAŁSZ nginx[[['włączać'] = FAŁSZ PostgreSQL[[['włączać'] = FAŁSZ gitlab_rails[[['włączać'] = FAŁSZ poczta[[['włączać'] = FAŁSZ ------- ## REDIS Primary/Replica rola Redis_Master_Role[[['włączać'] = PRAWDA # Włącz tylko jeden z nich redis_replica_role[[['włączać'] = PRAWDA # Włącz tylko jeden z nich # Gdy włączona jest rola Redis Primary lub Replica, następujące usługi są # włączony wyłączony. Jeśli role Redis i Sentinel są łączone, oba # Usługi są włączone. # Następujące usługi są wyłączone posterunek[[['włączać'] = FAŁSZ Bootstrap[[['włączać'] = FAŁSZ nginx[[['włączać'] = FAŁSZ PostgreSQL[[['włączać'] = FAŁSZ gitlab_rails[[['włączać'] = FAŁSZ poczta[[['włączać'] = FAŁSZ # W przypadku roli repliki redis zmień również to ustawienie z domyślnego „prawdziwego” na „false”: Redis[[['gospodarz'] = FAŁSZ

    Odpowiednie atrybuty można znaleźć w Gitlab_rails.RB .

    Rozwiązywanie problemów

    Dalsze czytanie

    1. Architektury referencyjne
    2. Skonfiguruj bazę danych
    3. Skonfiguruj NFS
    4. Skonfiguruj równowagi obciążenia

    Redis Sentinel

    Uwaga. Przestarzały mechanizm Redis Sentinel zostanie wycofany w Creatio w wersji 7.18.3. Zalecamy przejście na klaster Redis po zaktualizowaniu Creatio do wersji 7.18.0.

    Mechanizm Redis Sentinel służy do zapewnienia tolerancji błędów dla repozytoriów Redis używanych przez Creatio. Zapewnia następujące funkcje:

    • Monitorowanie. Sentinel upewnia się, że instancje Master/Slave działają poprawnie w Redis.
    • Powiadomienia. Sentinel powiadomi administratorów systemów, jeśli jakiekolwiek błędy związane z instancją występują w Redis.
    • Automatyczne przełączanie awaryjne. Jeśli instancja Master Redis nie działa poprawnie, Sentinel promuje jedną z instancji niewolników dla mistrza i ponownie konfiguruje resztę do pracy z nową instancją główną. Creatio jest również powiadomiony o nowym adresie połączenia Redis.

    Uwaga. Creatio nie obsługuje klastrów Redis w wersji 7.17.4 i wcześniej.

    Redis Sentinel to system rozproszony, który jest zaprojektowany do uruchamiania wielu instancji, które wspólnie współpracują. Takie podejście ma następujące zalety:

    • Ustanie jest zarejestrowane tylko wtedy, gdy wiele instancji Sentinel (które tworzą kworum) zgadza się, że instancja główna jest niedostępna w Redis. Odbywa się to w celu zmniejszenia liczby fałszywych alertów.
    • Mechanizm Sentinel będzie nadal dostępny, nawet jeśli wiele instancji Sentinel nie reaguje lub nie działa całkowicie. Odbywa się to w celu zwiększenia tolerancji błędów.

    Godne uwagi szczegóły Sentinel

    • Do solidnego wdrożenia wymagane są co najmniej trzy instancje Sentinel. Instancje te powinny być umieszczone w komputerach lub maszynach wirtualnych, które, jak się uważa. mi., usterki zarejestrowane przez te instancje Sentinel powinny być spowodowane przez różne źródła. Na przykład komputery znajdują się w różnych strefach sieciowych.
    • Z powodu replikacji asynchronicznej system rozproszony (Sentinel + Redis) nie gwarantuje, że wszystkie dane zostaną zapisane, jeśli nastąpi awaria.
    • Tolerancję błędów w konfiguracji powinna być regularnie monitorowana i dodatkowo potwierdzona za pomocą testów symulujących awarie.
    • Docker Port Remappapping tworzy pewne problemy z procesami Sentinel (patrz blok Sentinel, Docker, NAT i możliwy problem dokumentacji Sentinel).

    Minimalne wymagania dotyczące tolerancji błędów dla Redis Sentinel

    • M1, M2 są instancjami Master Redis.
    • R1, R2, R3 są instancjami niewolników Redis.
    • S1, S2, S3 są instancjami Sentinel.
    • C1 to aplikacja Creatio.
    • [M2] jest instancją promowaną (e. G., od niewolnika do mistrza).

    Zalecamy użycie konfiguracji z co najmniej trzema instancjami Redis i Sentinel (patrz Przykład 2: Podstawowa konfiguracja z trzema pudełkami bloku dokumentacji Sentinel). Ta konfiguracja opiera się na trzech węzłach (komputerach lub maszynach wirtualnych), z których każdy zawiera działające instancje zarówno Redis, jak i Sentinel (ryc. 1). Dwa instancje Sentinel (S2 i S3) tworzą kworum (liczba instancji wymaganych do zapewnienia tolerancji błędów bieżącej instancji głównej).

    Figa. 1 Konfiguracja trzech węzłów: Quorum = 2

    scr_chapter_setup_redis_sentinel_3_pionts_configuration.png

    Podczas regularnej pracy aplikacja klienta Creatio zapisuje swoje dane do instancji głównej (M1). Dane te są następnie replikowane asynchronicznie na instancje niewolników (R2 i R3).

    Jeśli instancja główna Redis (M1) staje się niedostępna, instancje Sentinel (S1 i S2) uważają to za awarię i rozpocznij proces awaryjnego. Jedna z instancji niewolników Redis (R2 lub R3) jest promowana na mistrz.

    Uwaga. Istnieje ryzyko utraty rekordów w każdej konfiguracji Sentinel, która wykorzystuje asynchroniczną replikację danych. Dzieje się tak, jeśli dane nie zostały zapisane do instancji niewolnika, awansowane na mistrza.

    Notatka. Inne możliwe konfiguracje tolerujące usterki opisano w dokumentacji Sentinel .

    Problemy związane z separacją sieci

    Jeśli połączenie sieciowe zostanie utracone, istnieje ryzyko, że Creatio będzie nadal współpracować ze starą instancją Master Redis (M1), podczas gdy nowo promowana instancja główna ([M2]) została już przypisana (ryc. 2).

    Figa. 2 Separacja sieci

    scr_chapter_setup_redis_sentinel_nerwork_sptitting.png

    Można tego łatwo uniknąć, umożliwiając opcję zaprzestania zapisywania danych na wypadek, gdyby instancja główna wykryła, że ​​liczba instancji niewolników spadła. Aby to zrobić, ustaw następujące wartości w Redis.Plik konfiguracyjny Conf w instancji głównej Redis:

    MIN-SLAVES-to-Write 1 min min-slaves-max-lag 10

    W rezultacie, jeśli instancja główna Redis (M1) nie będzie w stanie przesyłać danych do co najmniej jednej instancji niewolników, przestanie otrzymywać dane w 10 sekund po pierwszej próbie. Po odzyskaniu systemu przez instancje Sentinel, które tworzą kworum (S2 i S3), aplikacja Creatio (C1) zostanie ponownie skonfigurowana do pracy z nową Master -Instance (M2).

    Uwaga. Jeśli sieć zostanie przywrócona, instancja główna nie będzie mogła kontynuować operacji automatycznie po zatrzymaniu. Jeśli pozostała instancja niewolników Redis (R3) również stanie się niedostępna, system przestanie całkowicie działać.

    Wymagania systemowe

    Redis to baza danych w pamięci, dlatego pojemność RAM i szybkość wydajności są głównymi wymaganiami dla jego prawidłowego działania. Ponieważ Redis to aplikacja jednokierunkowa, która korzysta z jednego rdzenia procesora, pojedynczy węzeł (komputer lub maszyna wirtualna) z procesorem dwurdzeniowym jest wymagany do pracy z pojedynczą instancją Redis. Instancje Sentinel wymagają stosunkowo niewielu zasobów i mogą działać w tym samym węźle co Redis.

    Zaleca się wdrożenie Redis i Sentinel w systemie Linux OS.

    Poniższa tabela pokazuje zalecane wymagania systemowe dla jednego węzła (komputer lub maszyna wirtualna), w zależności od liczby użytkowników Creatio.

    Czy klaster Redis potrzebuje wartownika?

    Оjed

    Ыы зарегистрир John. С помощю этой страницы ыы сожем оRipееделить, что запросы оRтравляете имено ыы, а не роvert. Почем это могло пRроизойиS?

    Эта страница отображается тех слччаях, когда автоматическими системамgz которые наршают усовия исполззования. Страница перестанеura. До этого момента для исползования слжжж Google неоtoś.

    Источником запросов может слжить ведоносное по, подкbarów. ыылку заRzy. Еarag ы исползеете общий доступ и интернет, проблема может ыть с компюююеyn с таким жж жж жесом, кк у комszczeюююе000. Обратитеunks к соем системном адинистратору. Подроlit.

    Проверка по слову может также появаятьenia, еaсли ы водите сложные ззапры, оind обычно enia оиизи инenia оtoś еами, или же водите заlektora.