MariaDB
 sql >> Base de données >  >> RDS >> MariaDB

Mon administrateur de base de données est malade - Conseils de basculement de base de données pour les administrateurs système

Le meilleur scénario est qu'en cas de défaillance de la base de données, vous disposez d'un bon plan de reprise après sinistre (DRP) et d'un environnement hautement disponible avec un processus de basculement automatique, mais… que se passe-t-il en cas d'échec pour une raison inattendue? Que faire si vous devez effectuer un basculement manuel ? Dans ce blog, nous partagerons quelques recommandations à suivre au cas où vous auriez besoin de basculer votre base de données.

Vérifications

Avant d'effectuer toute modification, vous devez vérifier certaines choses de base pour éviter de nouveaux problèmes après le processus de basculement.

Statut de réplication

Il est possible qu'au moment de la panne, le nœud esclave ne soit pas à jour, en raison d'une panne de réseau, d'une charge élevée ou d'un autre problème, vous devez donc vous assurer que votre slave a toutes (ou presque toutes) les informations. Si vous avez plusieurs nœuds esclaves, vous devez également vérifier lequel est le nœud le plus avancé et le choisir pour le basculement.

par exemple :vérifions l'état de la réplication dans un serveur 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)

Dans le cas de PostgreSQL, c'est un peu différent car vous devez vérifier le statut des WAL et comparer ceux appliqués à ceux récupérés.

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)

Identifiants

Avant d'exécuter le basculement, vous devez vérifier si votre application/vos utilisateurs pourront accéder à votre nouveau maître avec les informations d'identification actuelles. Si vous ne répliquez pas les utilisateurs de votre base de données, les informations d'identification ont peut-être été modifiées. Vous devrez donc les mettre à jour dans les nœuds esclaves avant toute modification.

par exemple :vous pouvez interroger la table des utilisateurs dans la base de données mysql pour vérifier les informations d'identification de l'utilisateur dans un serveur MariaDB/MySQL :

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)

Dans le cas de PostgreSQL, vous pouvez utiliser la commande '\du' pour connaître les rôles, et vous devez également vérifier le fichier de configuration pg_hba.conf pour gérer l'accès utilisateur (pas les informations d'identification). Donc :

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                          | {}

Et 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

Accès réseau/pare-feu

Les informations d'identification ne sont pas le seul problème possible pour accéder à votre nouveau maître. Si le nœud se trouve dans un autre centre de données, ou si vous avez un pare-feu local pour filtrer le trafic, vous devez vérifier si vous êtes autorisé à y accéder ou même si vous avez la route réseau pour atteindre le nouveau nœud maître.

par exemple :iptables. Autorisons le trafic depuis le réseau 167.124.57.0/24 et vérifions les règles actuelles après l'avoir ajouté :

$ 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

ex :routes. Supposons que votre nouveau nœud maître est dans le réseau 10.0.0.0/24, votre serveur d'application est en 192.168.100.0/24, et vous pouvez atteindre le réseau distant en utilisant 192.168.100.100, donc dans votre serveur d'application, ajoutez la route correspondante :

$ 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

Points d'action

Après avoir vérifié tous les points mentionnés, vous devriez être prêt à effectuer les actions pour basculer votre base de données.

Nouvelle adresse IP

Comme vous allez promouvoir un nœud esclave, l'adresse IP maître changera, vous devrez donc la changer dans votre application ou votre accès client.

L'utilisation d'un équilibreur de charge est un excellent moyen d'éviter ce problème/changement. Après le processus de basculement, l'équilibreur de charge détectera l'ancien maître comme étant hors ligne et (selon la configuration) enverra le trafic au nouveau pour qu'il y écrive, vous n'avez donc rien à changer dans votre application.

ex :Voyons un exemple pour une configuration 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

Dans ce cas, si un nœud est en panne, HAProxy n'y enverra pas de trafic et n'enverra le trafic qu'au nœud disponible.

Reconfigurer les nœuds esclaves

Si vous avez plus d'un nœud esclave, après avoir promu l'un d'entre eux, vous devez reconfigurer le reste des esclaves pour se connecter au nouveau maître. Cette tâche peut prendre du temps, selon le nombre de nœuds.

Vérifier et configurer les sauvegardes

Une fois que vous avez tout en place (nouveau maître promu, esclaves reconfigurés, application écrivant dans le nouveau maître), il est important de prendre les mesures nécessaires pour éviter un nouveau problème, les sauvegardes sont donc indispensables dans cette étape. Vous aviez très probablement une politique de sauvegarde en cours d'exécution avant l'incident (sinon, vous devez l'avoir à coup sûr), vous devez donc vérifier si les sauvegardes sont toujours en cours d'exécution ou si elles le feront dans la nouvelle topologie. Il est possible que les sauvegardes s'exécutent sur l'ancien maître ou utilisent le nœud esclave qui est maître maintenant, vous devez donc le vérifier pour vous assurer que votre politique de sauvegarde fonctionnera toujours après les modifications.

Surveillance de la base de données

Lorsque vous effectuez un processus de basculement, la surveillance est indispensable avant, pendant et après le processus. Grâce à cela, vous pouvez prévenir un problème avant qu'il ne s'aggrave, détecter un problème inattendu lors du basculement ou même savoir si quelque chose ne va pas après. Par exemple, vous devez surveiller si votre application peut accéder à votre nouveau maître en vérifiant le nombre de connexions actives.

Métriques clés à surveiller

Voyons quelques-unes des mesures les plus importantes à prendre en compte :

  • Délai de réplication
  • Statut de réplication
  • Nombre de connexions
  • Utilisation du réseau/erreurs
  • Charge du serveur (CPU, Mémoire, Disque)
  • Journaux de la base de données et du système

Restauration

Bien sûr, en cas de problème, vous devez pouvoir revenir en arrière. Bloquer le trafic vers l'ancien nœud et le garder aussi isolé que possible pourrait être une bonne stratégie pour cela, donc au cas où vous auriez besoin de revenir en arrière, vous aurez l'ancien nœud disponible. Si la restauration est après quelques minutes, en fonction du trafic, vous devrez probablement insérer les données de ces minutes dans l'ancien maître, alors assurez-vous d'avoir également votre nœud maître temporaire disponible et isolé pour prendre ces informations et les appliquer en retour .

Automatiser le processus de basculement avec ClusterControl

En voyant toutes ces tâches nécessaires pour effectuer un basculement, vous souhaitez probablement l'automatiser et éviter tout ce travail manuel. Pour cela, vous pouvez profiter de certaines des fonctionnalités que ClusterControl peut vous offrir pour différentes technologies de base de données, comme la récupération automatique, les sauvegardes, la gestion des utilisateurs, la surveillance, entre autres fonctionnalités, toutes à partir du même système.

Avec ClusterControl, vous pouvez vérifier l'état de la réplication et son décalage, créer ou modifier les informations d'identification, connaître l'état du réseau et de l'hôte, et encore plus de vérifications.

En utilisant ClusterControl, vous pouvez également effectuer différentes actions de cluster et de nœud, comme promouvoir l'esclave , redémarrez la base de données et le serveur, ajoutez ou supprimez des nœuds de base de données, ajoutez ou supprimez des nœuds d'équilibrage de charge, reconstruisez un esclave de réplication, etc.

À l'aide de ces actions, vous pouvez également annuler votre basculement si nécessaire en reconstruisant et en promouvant le maître précédent.

ClusterControl dispose de services de surveillance et d'alerte qui vous aident à savoir ce qui se passe ou même si quelque chose s'est passé auparavant.

Vous pouvez également utiliser la section tableau de bord pour avoir une vue plus conviviale sur l'état de vos systèmes.

Conclusion

En cas de défaillance de la base de données principale, vous souhaiterez avoir toutes les informations en place pour prendre les mesures nécessaires dès que possible. Avoir un bon DRP est la clé pour que votre système fonctionne tout le temps (ou presque). Ce DRP doit inclure un processus de basculement bien documenté pour avoir un RTO (objectif de temps de récupération) acceptable pour l'entreprise.