Wyszukiwanie w witrynie

Jak skonfigurować replikację Redis (z wyłączonym trybem klastra) w CentOS 8 — część 1


Redis (Remote Dictionary Server) to bardzo popularny i powszechnie używany serwer baz danych/struktur danych o otwartym kodzie źródłowym, szybki, rozproszony i wydajny w pamięci.

Oferuje bogaty zestaw funkcji, dzięki którym jest skuteczny w szerokim zakresie zastosowań: jako baza danych, warstwa buforująca, broker komunikatów lub kolejka; ma zastosowanie w aplikacjach internetowych, aplikacjach do czatowania i przesyłania wiadomości, grach, analizie danych w czasie rzeczywistym i wielu innych.

Obsługuje elastyczne struktury danych, asynchroniczną replikację master-slave w celu skalowania wydajności odczytu i ochrony przed utratą danych, sharding po stronie klienta w celu skalowania wydajności zapisu, dwie formy trwałości do zapisywania danych w pamięci na dysku w kompaktowym formacie, klastrowanie i partycjonowanie. Zawiera także automatyczne przełączanie awaryjne w celu wdrożenia wysokiej dostępności za pośrednictwem Redis Sentinel, skryptów Lua, transakcji i wielu innych.

Będąc BEZ SQL lub nierelacyjnej bazy danych, Redis oferuje pewne korzyści w zakresie wydajności w porównaniu z tradycyjnymi systemami baz danych (takimi jak MySQL/MariaDB, PostgreSQL itp.), ponieważ wszystkie dane znajdują się lub są przechowywane w pamięci, dzięki czemu są łatwo dostępne dla aplikacji, podczas gdy tradycyjne bazy danych muszą zapisywać wszystkie dane na dysku lub z zewnętrznego źródła lub je z nich odczytywać.

Redis staje się coraz bardziej powszechnym wyborem w przypadku buforowania, co pozwala na ponowne wykorzystanie danych w pamięci podręcznej (przechowywanych w głównej pamięci aplikacji) zamiast ciągłego wysyłania zapytań do bazy danych o często używane dane. Jest więc fantastycznym towarzyszem RDMS (systemów zarządzania relacyjnymi bazami danych), aby ostatecznie poprawić wydajność aplikacji.

W tej trzyczęściowej serii samouczków Redis omówimy, jak skonfigurować i używać niektórych kluczowych funkcji Redis, takich jak replikacja, wysoka dostępność przy użyciu Redis Sentinel i Klaster Redis, artykuły to:

Ten przewodnik pokazuje, jak skonfigurować replikację Redis (z wyłączonym trybem klastra) w CentOS 8 Linux, w tym jak zainstalować Redis, skonfigurować główny i repliki oraz przetestuj replikację.

Ważne: Klaster Redis (tj. Klaster replikacji) z wyłączonym trybem klastra ma pojedynczą grupę węzłów ( np. master i jedna lub dwie repliki), gdzie klaster Redis z włączonym trybem klastra może składać się z dwóch lub więcej grup węzłów (np. trzech masterów każdy ma urządzenia slave lub dwa).

Warunki wstępne:

  1. Serwery z instalacją CentOS 8

Konfiguracja środowiska testowego

Redis Master Server: 10.42.0.247
Redis Replica1/Slave1: 10.42.0.21
Redis Replica2/Slave2: 10.42.0.34

W przypadku powyższej konfiguracji (która ma jeden węzeł podstawowy/główny do odczytu/zapisu i 2 węzły repliki tylko do odczytu) mamy pojedynczą grupę węzłów zawierającą wszystkie dane klastra w każdym węźle. Gdy urządzenie podrzędne połączy się z urządzeniem głównym, otrzyma początkową kopię pełnej bazy danych, a wszelkie dane, które wcześniej znajdowały się na urządzeniu podrzędnym, zostaną odrzucone.

Poza tym klient może zapisywać tylko do mastera, ale czytać z dowolnego węzła w klastrze. W miarę wykonywania zapisów na urządzeniu głównym są one propagowane do wszystkich podłączonych urządzeń podrzędnych w celu aktualizacji zestawów danych urządzeń podrzędnych w czasie rzeczywistym.

Krok 1: Instalowanie Redis na CentOS 8

1. Na początek zaloguj się do wszystkich węzłów CentOS 8 przez SSH, a następnie zainstaluj pakiet Redis na wszystkich węzłach (głównym i replikach ) za pomocą menedżera pakietów DNF, jak pokazano.


dnf install @redis

2. Po zakończeniu instalacji pakietu Redis uruchom usługę Redis, włącz ją, aby automatycznie uruchamiała się przy każdym uruchomieniu systemu i sprawdź, czy jest i działa w następujący sposób.

systemctl start redis
systemctl enable redis
systemctl status redis

3. Możesz także sprawdzić, czy serwer Redis jest uruchomiony i działa, sprawdzając porty nasłuchiwania za pomocą polecenia ss w następujący sposób.

ss -ltpn | grep redis-server

Krok 2: Konfiguracja serwera głównego Redis

4. Redis jest konfigurowany przy użyciu pliku konfiguracyjnego /etc/redis.conf, będącego przykładowym plikiem konfiguracyjnym, który jest dokumentacją własną. Najpierw utwórz kopię zapasową oryginalnego pliku, a następnie otwórz go do edycji za pomocą wybranego edytora wiersza poleceń.

cp /etc/redis.conf /etc/redis.conf.org
vi /etc/redis.conf

5. Domyślnie instancja Redis jest skonfigurowana do nasłuchiwania i akceptowania połączeń w interfejsie loopback przy użyciu dyrektywy bind. Aby komunikować się z replikami, master powinien być skonfigurowany do nasłuchiwania na adresie zwrotnym IPv4 i jego adresie IP w sieci LAN, tj. 10.42.0.247.

bind 127.0.0.1 10.42.0.247

6. Następnie ustaw parametr trybu chronionego na no, aby umożliwić komunikację z replikami, jak pokazano.

protected-mode no

Ponadto Redis nasłuchuje na porcie 6379, który jest ustawiony przy użyciu dyrektywy port. Jest to port danych służący do komunikacji z interfejsami API aplikacji lub klientami CLI.

port 6379

7. Aby opcjonalnie zabezpieczyć komunikację replika główna, możemy chronić jednostkę główną za pomocą dyrektywy requirepass, dzięki czemu klienci/repliki muszą wystaw hasło uwierzytelniające przed wykonaniem jakichkolwiek poleceń lub rozpoczęciem procesu synchronizacji replikacji, w przeciwnym razie master odrzuci żądanie klienta/repliki (pamiętaj o ustawieniu bezpiecznego hasła).

Poniższą opcję wykorzystamy w celach demonstracyjnych, aby pokazać, jak to działa.

requirepass  Securep@55Here

8. Dzienniki Redis są również przechowywane w pliku /var/log/redis/redis.log, ustawia się to za pomocą dyrektywy logfile a domyślny poziom szczegółowości serwera to notice, zdefiniowany za pomocą parametru loglevel.

loglevel  notice
logfile  /var/log/redis/redis.log

9. Ponieważ systemd jest domyślnym menedżerem systemu i usług w CentOS 8, możesz skonfigurować Redis do interakcji drzewo nadzoru systemd, ustawiając parametr nadzorowany na systemd.

supervised systemd

10. Po dokonaniu wszystkich niezbędnych konfiguracji zapisz plik i zamknij go. Następnie uruchom ponownie usługę Redis, aby zastosować nowe zmiany.

systemctl daemon-reload
systemctl restart redis

11. Aby uzyskać dostęp do serwera Redis, musimy użyć redis-cli (interfejs wiersza poleceń do serwera redis). Domyślnie łączy się z serwerem na localhost (na porcie 127.0.0.1 6379). Należy pamiętać, że ponieważ serwer jest zabezpieczony przed klientami za pomocą hasła, uruchomienie polecenia przed uwierzytelnieniem powinno zakończyć się niepowodzeniem.

Użyj polecenia auth, aby podać hasło uwierzytelniające, jak pokazano na poniższym zrzucie ekranu.

redis-cli
127.0.0.1:6379> client list
127.0.0.1:6379> AUTH Securep@55Here
127.0.0.1:6379> client list

12. Aby połączyć się z repliką (po ich skonfigurowaniu zgodnie z opisem w następnej sekcji), użyj -h i -p opcje umożliwiające określenie odpowiednio adresu IP/nazwy hosta i portu repliki (nie ten port 6379 musi być otwarty w zaporze ogniowej repliki).

redis-cli -h 10.42.0.21 -p 6379

13. Następnie otwórz port danych serwera Redis w zaporze, aby umożliwić połączenia przychodzące do urządzenia głównego, a następnie ponownie załaduj reguły zapory za pomocą polecenia firewall-cmd, jak pokazano.

firewall-cmd --zone=public --permanent --add-port=6379/tcp 
firewall-cmd --reload

Krok 3: Konfigurowanie serwerów replik/podrzędnych Redis

14. Aby szybko ustawić instancję Redis jako replikę w locie, użyj narzędzia redis-cli i wywołaj funkcję REPLICAOF polecenie, jak pokazano.

redis-cli replicaof 10.42.0.247 6379
OR
redis-cli
127.0.0.1:6379> REPLICAOF 10.42.0.247 6379

15. Aby połączenie replikacyjne było trwałe, należy dokonać następujących zmian w pliku konfiguracyjnym. Zacznij od utworzenia kopii zapasowej oryginalnego pliku, a następnie otwórz go do edycji.

cp /etc/redis.conf /etc/redis.conf.org
vi /etc/redis.conf

16. Aby umożliwić klientom łączenie się z repliką w celu odczytania danych, dodaj adres IP repliki do dyrektywy bind.

replica1
bind 127.0.0.1 10.42.0.21

replica2
bind 127.0.0.1 10.42.0.34

Ustawianie instancji Redis jako repliki

17. Aby skonfigurować instancję Redis jako replikę, użyj parametru replicaof i ustaw adres IP (lub nazwę hosta) węzła głównego oraz port jako wartości.

replicaof 10.42.0.247 6379

Ustawianie repliki tak, aby uwierzytelniała się na serwerze głównym

18. Następnie, ponieważ nasza instancja główna jest zabezpieczona hasłem, musimy ustawić hasło w konfiguracji repliki, aby umożliwić jej uwierzytelnienie w instancji głównej przy użyciu masterauth parametr.

masterauth Securep@55Here

19. Dodatkowo, gdy replika traci połączenie z repliką główną lub gdy replikacja jest w toku, replika jest skonfigurowana tak, aby odpowiadać na żądania klientów, prawdopodobnie z komunikatem „nieaktualna ”dane. Ale jeśli jest to pierwsza synchronizacja, zestaw danych może być po prostu pusty. To zachowanie jest kontrolowane przez parametr replica-serve-stale-data.

A ponieważ w wersji Redis 2.6 repliki są domyślnie tylko do odczytu, jest to kontrolowane przez parametr replika-tylko do odczytu. Można wprowadzić inne zmiany w konfiguracji repliki, aby dostosować je do potrzeb aplikacji.

20. Po wprowadzeniu wszystkich niezbędnych zmian uruchom ponownie usługę Redis na wszystkich replikach.

systemctl restart redis

21. Otwórz także port 6379 w zaporze, aby umożliwić połączenia od urządzenia głównego i klientów do replik, a następnie załaduj ponownie reguły zapory.

firewall-cmd --zone=public --permanenent --add-port=6379/tcp
firewall-cmd --reload

Krok 4: Sprawdź status replikacji głównej

22. Po zakończeniu konfiguracji replikacji repliki głównej możemy sprawdzić, czy konfiguracja działa prawidłowo, w następujący sposób.

Na urządzeniu głównym uruchom następujące polecenia.

redis-cli
127.0.0.1:6379> AUTH Securep@55Here
127.0.0.1:6379> info replication

23. Sprawdź także status replikacji na replikach/urządzeniach podrzędnych w następujący sposób.

redis-cli
127.0.0.1:6379> info replication

23. Teraz przetestujmy replikację, ustawiając parę klucz-wartość w instancji głównej i sprawdźmy, czy dane są zsynchronizowane z replikami.

Na urządzeniu głównym wykonaj następujące czynności:

redis-cli
127.0.0.1:6379> AUTH Securep@55Here
127.0.0.1:6379> set domain 'linux-console.net'

24. Następnie sprawdź, czy dane zostały zsynchronizowane z replikami, jak pokazano.

redis-cli
127.0.0.1:6379> get domain

Ochrona instancji głównej przed ryzykiem utraty niektórych zapisów

25. Redis posiada funkcję, która umożliwia instancji głównej ograniczenie do określonej liczby sekund ryzyka utraty niektórych zapisów w przypadku braku wystarczającej liczby replik.

Oznacza to, że master może przestać akceptować zapisy, jeśli podłączonych jest mniej niż N replik, z opóźnieniem mniejszym lub równym M sekund, kontrolowanym przez min odpowiednio -replicas-to-write i min-replicas-max-lag.

Aby je ustawić, odkomentuj je i ustaw wartości zgodnie z wymaganiami konfiguracyjnymi w /etc/redis.conf, jak pokazano na poniższym zrzucie ekranu. Ta konfiguracja oznacza, że od ostatniego pingu do replik, po 10 sekundach, jeśli w trybie online będą mniej niż 2 repliki, master przestanie akceptować zapisy.

min-replicas-to-write 2
min-replicas-max-lag 10

Więcej opcji znajdziesz w pozostałej części pliku konfiguracyjnego /etc/redis.conf, a więcej szczegółów znajdziesz w dokumentacji Redis na temat replikacji.

W następnym artykule omówimy, jak skonfigurować Redis pod kątem wysokiej dostępności z Sentinel w CentOS 8. Do tego czasu pozostań zamknięty i pamiętaj, aby podzielić się swoimi przemyśleniami i pytaniami, korzystając z poniższego formularza komentarza, dzięki któremu możesz się z nami skontaktować.