MariaDB
 sql >> Baza danych >  >> RDS >> MariaDB

Mój administrator baz danych jest chory — porady dotyczące przełączania awaryjnego bazy danych dla administratorów SysAdmin

Najlepszym scenariuszem jest to, że w przypadku awarii bazy danych masz dobry plan odzyskiwania po awarii (DRP) i wysoce dostępne środowisko z automatycznym procesem przełączania awaryjnego, ale… co się stanie, jeśli jakiś nieoczekiwany powód? Co zrobić, jeśli trzeba wykonać ręczne przełączanie awaryjne? Na tym blogu podzielimy się kilkoma zaleceniami, których należy przestrzegać w przypadku konieczności przełączenia awaryjnego bazy danych.

Kontrole weryfikacyjne

Przed wprowadzeniem jakichkolwiek zmian musisz zweryfikować kilka podstawowych rzeczy, aby uniknąć nowych problemów po procesie przełączania awaryjnego.

Stan replikacji

Możliwe, że w momencie awarii węzeł podrzędny nie jest aktualny z powodu awarii sieci, dużego obciążenia lub innego problemu, więc musisz upewnić się, że niewolnik ma wszystkie (lub prawie wszystkie) informacje. Jeśli masz więcej niż jeden węzeł podrzędny, powinieneś również sprawdzić, który z nich jest najbardziej zaawansowany i wybrać go do przełączenia awaryjnego.

np. Sprawdźmy stan replikacji na serwerze MariaDB.

MariaDB [(none)]> SHOW SLAVE STATUS\G

*************************** 1. row ***************************

Slave_IO_State: Waiting for master to send event

Master_Host: 192.168.100.110

Master_User: rpl_user

Master_Port: 3306

Connect_Retry: 10

Master_Log_File: binlog.000014

Read_Master_Log_Pos: 339

Relay_Log_File: relay-bin.000002

Relay_Log_Pos: 635

Relay_Master_Log_File: binlog.000014

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

Last_Errno: 0

Skip_Counter: 0

Exec_Master_Log_Pos: 339

Relay_Log_Space: 938

Until_Condition: None

Until_Log_Pos: 0

Master_SSL_Allowed: No

Seconds_Behind_Master: 0

Master_SSL_Verify_Server_Cert: No

Last_IO_Errno: 0

Last_SQL_Errno: 0

Replicate_Ignore_Server_Ids:

Master_Server_Id: 3001

Using_Gtid: Slave_Pos

Gtid_IO_Pos: 0-3001-20

Parallel_Mode: conservative

SQL_Delay: 0

SQL_Remaining_Delay: NULL

Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it

Slave_DDL_Groups: 0

Slave_Non_Transactional_Groups: 0

Slave_Transactional_Groups: 0

1 row in set (0.000 sec)

W przypadku PostgreSQL jest nieco inaczej, ponieważ musisz sprawdzić stan listów WAL i porównać zastosowane z pobranymi.

postgres=# SELECT CASE WHEN pg_last_wal_receive_lsn()=pg_last_wal_replay_lsn()

postgres-# THEN 0

postgres-# ELSE EXTRACT (EPOCH FROM now() - pg_last_xact_replay_timestamp())

postgres-# END AS log_delay;

 log_delay

-----------

         0

(1 row)

Poświadczenia

Przed uruchomieniem przełączania awaryjnego należy sprawdzić, czy aplikacja/użytkownicy będą mogli uzyskać dostęp do nowego systemu głównego przy użyciu bieżących poświadczeń. Jeśli nie replikujesz użytkowników bazy danych, być może poświadczenia zostały zmienione, więc będziesz musiał zaktualizować je w węzłach podrzędnych przed wprowadzeniem jakichkolwiek zmian.

np. Możesz wysłać zapytanie do tabeli użytkowników w bazie danych mysql, aby sprawdzić poświadczenia użytkownika w MariaDB/MySQL Server:

MariaDB [(none)]> SELECT Host,User,Password FROM mysql.user;

+-----------------+--------------+-------------------------------------------+

| Host            | User | Password                                  |

+-----------------+--------------+-------------------------------------------+

| localhost       | root | *CD7EC70C2F7DCE88643C97381CB42633118AF8A8 |

| localhost       | mysql | invalid                                   |

| 127.0.0.1       | backupuser | *AC01ED53FA8443BFD3FC7C448F78A6F2C26C3C38 |

| 192.168.100.100 | cmon         | *F80B5EE41D1FB1FA67D83E96FCB1638ABCFB86E2 |

| 127.0.0.1       | root | *CD7EC70C2F7DCE88643C97381CB42633118AF8A8 |

| ::1             | root | *CD7EC70C2F7DCE88643C97381CB42633118AF8A8 |

| localhost       | backupuser | *AC01ED53FA8443BFD3FC7C448F78A6F2C26C3C38 |

| 192.168.100.112 | user1        | *CD7EC70C2F7DCE88643C97381CB42633118AF8A8 |

| localhost       | cmonexporter | *0F7AD3EAF21E28201D311384753810C5066B0964 |

| 127.0.0.1       | cmonexporter | *0F7AD3EAF21E28201D311384753810C5066B0964 |

| ::1             | cmonexporter | *0F7AD3EAF21E28201D311384753810C5066B0964 |

| 192.168.100.110 | rpl_user     | *EEA7B018B16E0201270B3CDC0AF8FC335048DC63 |

+-----------------+--------------+-------------------------------------------+

12 rows in set (0.001 sec)

W przypadku PostgreSQL możesz użyć polecenia „\du”, aby poznać role, a także musisz sprawdzić plik konfiguracyjny pg_hba.conf, aby zarządzać dostępem użytkowników (nie poświadczeniami). A więc:

postgres=# \du

                                       List of roles

    Role name     |             Attributes         | Member of

------------------+------------------------------------------------------------+-----------

 admindb          | Superuser, Create role, Create DB                          | {}

 cmon_replication | Replication                                                | {}

 cmonexporter     |                                             | {}

 postgres         | Superuser, Create role, Create DB, Replication, Bypass RLS | {}

 s9smysqlchk      | Superuser, Create role, Create DB                          | {}

I pg_hba.conf:

# TYPE DATABASE USER ADDRESS METHOD

host replication  cmon_replication  localhost  md5

host  replication  cmon_replication  127.0.0.1/32  md5

host  all  s9smysqlchk  localhost  md5

host  all  s9smysqlchk  127.0.0.1/32  md5

local   all            all                   trust

host    all            all 127.0.0.1/32 trust

Dostęp do sieci/zapory

Poświadczenia to nie jedyny możliwy problem z dostępem do nowego mastera. Jeśli węzeł znajduje się w innym centrum danych lub masz lokalną zaporę sieciową do filtrowania ruchu, musisz sprawdzić, czy masz do niego dostęp, a nawet czy masz trasę sieciową umożliwiającą dotarcie do nowego węzła głównego.

np. iptables. Zezwólmy na ruch z sieci 167.124.57.0/24 i po dodaniu sprawdź aktualne reguły:

$ iptables -A INPUT  -s 167.124.57.0/24 -m state --state NEW  -j ACCEPT

$ iptables -L -n

Chain INPUT (policy ACCEPT)

target     prot opt source               destination

ACCEPT     all -- 167.124.57.0/24      0.0.0.0/0 state NEW

Chain FORWARD (policy ACCEPT)

target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)

target     prot opt source               destination

np. trasy. Załóżmy, że nowy węzeł główny znajduje się w sieci 10.0.0.0/24, serwer aplikacji jest w 192.168.100.0/24, a do sieci zdalnej można się połączyć za pomocą 192.168.100.100, więc w serwerze aplikacji dodaj odpowiednią trasę:

$ route add -net 10.0.0.0/24 gw 192.168.100.100

$ route -n

Kernel IP routing table

Destination     Gateway Genmask         Flags Metric Ref Use Iface

0.0.0.0         192.168.100.1 0.0.0.0         UG 0 0 0 eth0

10.0.0.0        192.168.100.100 255.255.255.0   UG 0 0 0 eth0

169.254.0.0     0.0.0.0 255.255.0.0     U 1027 0 0 eth0

192.168.100.0   0.0.0.0 255.255.255.0   U 0 0 0 eth0

Punkty akcji

Po sprawdzeniu wszystkich wspomnianych punktów, powinieneś być gotowy do podjęcia działań w celu przełączenia awaryjnego bazy danych.

Nowy adres IP

Gdy będziesz promować węzeł podrzędny, główny adres IP ulegnie zmianie, więc będziesz musiał go zmienić w dostępie do aplikacji lub klienta.

Korzystanie z Load Balancera to doskonały sposób na uniknięcie tego problemu/zmiany. Po zakończeniu procesu przełączania awaryjnego Load Balancer wykryje stary master jako offline i (w zależności od konfiguracji) wyśle ​​ruch do nowego, aby mógł na nim pisać, więc nie musisz nic zmieniać w swojej aplikacji.

np. Zobaczmy przykład konfiguracji HAProxy:

listen  haproxy_5433

        bind *:5433

        mode tcp

        timeout client  10800s

        timeout server  10800s

        balance leastconn

        option tcp-check

        server 192.168.100.119 192.168.100.119:5432 check

        server 192.168.100.120 192.168.100.120:5432 check

W tym przypadku, jeśli jeden węzeł nie działa, HAProxy nie wyśle ​​tam ruchu i prześle go tylko do dostępnego węzła.

Ponowna konfiguracja węzłów podrzędnych

Jeśli masz więcej niż jeden węzeł podrzędny, po wypromowaniu jednego z nich musisz ponownie skonfigurować pozostałe podrzędne, aby połączyć się z nowym nadrzędnym. Może to być czasochłonne zadanie, w zależności od liczby węzłów.

Zweryfikuj i skonfiguruj kopie zapasowe

Gdy masz już wszystko na swoim miejscu (awansowanie nowego mastera, rekonfiguracja slave'ów, pisanie aplikacji w nowym masterze), ważne jest, aby podjąć niezbędne działania, aby zapobiec nowemu problemowi, więc tworzenie kopii zapasowych jest koniecznością ten krok. Najprawdopodobniej przed incydentem była uruchomiona polityka tworzenia kopii zapasowych (jeśli nie, musisz ją mieć na pewno), więc musisz sprawdzić, czy kopie zapasowe nadal działają, czy też będą działać w nowej topologii. Możliwe, że kopie zapasowe były uruchomione na starym węźle głównym lub w węźle podrzędnym, który jest teraz nadrzędny, więc musisz to sprawdzić, aby upewnić się, że zasady tworzenia kopii zapasowych będą nadal działać po zmianach.

Monitorowanie bazy danych

Kiedy wykonujesz proces przełączania awaryjnego, monitorowanie jest koniecznością przed, w trakcie i po procesie. Dzięki temu możesz zapobiec problemowi, zanim się pogorszy, wykryć nieoczekiwany problem podczas przełączania awaryjnego, a nawet dowiedzieć się, czy coś pójdzie nie tak po nim. Na przykład musisz monitorować, czy Twoja aplikacja może uzyskać dostęp do nowego urządzenia głównego, sprawdzając liczbę aktywnych połączeń.

Kluczowe wskaźniki do monitorowania

Przyjrzyjmy się niektórym z najważniejszych wskaźników, które należy wziąć pod uwagę:

  • Opóźnienie replikacji
  • Stan replikacji
  • Liczba połączeń
  • Wykorzystanie/błędy sieci
  • Obciążenie serwera (procesor, pamięć, dysk)
  • Dzienniki bazy danych i systemu

Wycofanie

Oczywiście, jeśli coś poszło nie tak, musisz mieć możliwość wycofania. Blokowanie ruchu do starego węzła i utrzymywanie go w jak największej izolacji może być dobrą strategią, więc na wypadek konieczności wycofania starego węzła będzie dostępny. Jeśli wycofanie nastąpi po kilku minutach, w zależności od ruchu, prawdopodobnie będziesz musiał wprowadzić dane z tych minut do starego węzła głównego, więc upewnij się, że masz również dostępny i izolowany tymczasowy węzeł główny, aby wziąć te informacje i zastosować je z powrotem .

Automatyzacja procesu przełączania awaryjnego za pomocą ClusterControl

Widząc wszystkie te zadania niezbędne do wykonania przełączenia awaryjnego, najprawdopodobniej chcesz je zautomatyzować i uniknąć całej tej ręcznej pracy. W tym celu możesz skorzystać z niektórych funkcji, które ClusterControl może zaoferować dla różnych technologii baz danych, takich jak automatyczne odzyskiwanie, kopie zapasowe, zarządzanie użytkownikami, monitorowanie, a wszystko to z poziomu tego samego systemu.

Dzięki ClusterControl możesz weryfikować stan replikacji i jej opóźnienie, tworzyć lub modyfikować poświadczenia, znać stan sieci i hosta, a także przeprowadzać więcej weryfikacji.

Za pomocą ClusterControl możesz również wykonywać różne akcje klastra i węzła, takie jak promowanie urządzenia podrzędnego , zrestartuj bazę danych i serwer, dodaj lub usuń węzły bazy danych, dodaj lub usuń węzły równoważenia obciążenia, odbuduj urządzenie podrzędne replikacji i nie tylko.

Korzystając z tych działań, możesz również w razie potrzeby cofnąć przełączanie awaryjne, odbudowując i promując poprzedni mistrz.

ClusterControl oferuje usługi monitorowania i ostrzegania, które pomagają wiedzieć, co się dzieje, a nawet jeśli coś się wydarzyło wcześniej.

Możesz również użyć sekcji pulpitu nawigacyjnego, aby uzyskać bardziej przyjazny dla użytkownika widok o stanie Twoich systemów.

Wnioski

W przypadku awarii głównej bazy danych będziesz chciał mieć wszystkie informacje na miejscu, aby podjąć niezbędne działania JAK NAJSZYBCIEJ. Posiadanie dobrego DRP jest kluczem do utrzymania działania systemu przez cały (lub prawie cały) czas. Ten plan DRP powinien obejmować dobrze udokumentowany proces przełączania awaryjnego, aby mieć akceptowalny RTO (cel czasu odzyskiwania) dla firmy.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak uruchomić POKAŻ LOKALIZACJE w MariaDB

  2. Jak działa PI() w MariaDB

  3. Natywny klaster ProxySQL z Kubernetes

  4. Jak działa RTRIM() w MariaDB

  5. Zapoznanie się z możliwościami i funkcjami MariaDB SkySQL