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

Basculement et basculement de base de données pour les sites Web Drupal utilisant MySQL ou PostgreSQL

Drupal est un système de gestion de contenu (CMS) conçu pour tout créer, des petits aux grands sites Web d'entreprise. Plus d'un million de sites Web fonctionnent sur Drupal et il est utilisé pour créer de nombreux sites Web et applications que vous utilisez tous les jours (y compris celui-ci). Drupal dispose d'un grand nombre de fonctionnalités standard telles que la création de contenu facile, des performances fiables et une excellente sécurité. Ce qui distingue Drupal, c'est sa flexibilité, car la modularité est l'un de ses principes fondamentaux.

Drupal est également un excellent choix pour créer des cadres numériques intégrés. Vous pouvez l'étendre avec les milliers de modules complémentaires disponibles. Ces modules étendent les fonctionnalités de Drupal. Les thèmes vous permettent de personnaliser la présentation de votre contenu et les distributions (packs Drupal) sont des bundles que vous pouvez utiliser comme starter-kits. Vous pouvez utiliser toutes ces fonctionnalités pour les mélanger et les assortir afin d'améliorer les capacités de base de Drupal ou d'intégrer Drupal à des services externes. C'est un logiciel de gestion de contenu puissant et évolutif.

Drupal utilise des bases de données pour stocker son contenu Web. Lorsque votre site Web ou votre application basée sur Drupal connaît un trafic important, cela peut avoir un impact sur votre serveur de base de données. Lorsque vous êtes dans cette situation, vous avez besoin d'un équilibrage de charge, d'une haute disponibilité et d'une architecture redondante pour maintenir votre base de données en ligne.

Lorsque j'ai commencé à faire des recherches sur ce blog, j'ai réalisé qu'il existait de nombreuses réponses à ce problème en ligne, mais les solutions recommandées étaient très anciennes. Cela pourrait être le résultat de l'augmentation de la part de marché de WordPress, entraînant une communauté open source plus petite. Ce que j'ai trouvé, ce sont quelques exemples d'implémentation de la haute disponibilité en utilisant Master/Master (Haute Disponibilité) ou Master/Master/Slave (Haute Disponibilité/Haute Performance).

Drupal prend en charge un large éventail de bases de données, mais il a été initialement conçu à l'aide de variantes MySQL. Bien que l'utilisation de MySQL soit entièrement prise en charge, il existe de meilleures approches que vous pouvez mettre en œuvre. Cependant, la mise en œuvre de ces autres approches, si elle n'est pas effectuée correctement, peut entraîner de nombreuses interruptions de votre site Web, entraîner des problèmes de performances pour votre application et entraîner des problèmes d'écriture sur vos esclaves. L'exécution de la maintenance serait également difficile car vous avez besoin d'un basculement pour appliquer les mises à niveau ou les correctifs du serveur (matériel ou logiciel) sans temps d'arrêt. Cela est particulièrement vrai si vous disposez d'une grande quantité de données, ce qui peut avoir un impact majeur sur votre entreprise.

Ce sont des situations que vous ne voulez pas qu'elles se produisent, c'est pourquoi nous verrons dans ce blog comment vous pouvez implémenter le basculement de base de données pour vos bases de données MySQL ou PostgreSQL.

Pourquoi votre site Web Drupal a-t-il besoin d'un basculement de base de données ?

De Wikipedia "le basculement consiste à basculer vers un serveur, un système, un composant matériel ou un réseau redondant ou de secours en cas de panne ou d'arrêt anormal de l'application, du serveur, du système, du composant matériel ou du réseau précédemment actif. Le basculement et le basculement sont essentiellement la même opération, sauf que le basculement est automatique et fonctionne généralement sans avertissement, tandis que le basculement nécessite une intervention humaine.

Dans les opérations de base de données, le basculement est également un terme utilisé pour le basculement manuel, ce qui signifie qu'il nécessite une personne pour opérer le basculement. Le basculement est pratique pour tout administrateur car il isole les problèmes indésirables tels que les suppressions/suppressions accidentelles de tables, les longues heures d'indisponibilité entraînant un impact sur l'entreprise, la corruption de la base de données ou la corruption au niveau du système.

Le basculement de base de données consiste en plusieurs nœuds de base de données, physiquement ou virtuellement. Idéalement, puisque le basculement vous oblige à basculer vers un autre nœud, vous pouvez tout aussi bien basculer vers un autre serveur de base de données, si un hôte exécute plusieurs instances de base de données sur un seul hôte. Il peut toujours s'agir d'un basculement ou d'un basculement, mais il s'agit généralement de redondance et de haute disponibilité en cas de catastrophe sur cet hôte actuel.

Basculement MySQL pour Drupal

L'exécution d'un basculement pour votre application basée sur Drupal nécessite que les données gérées par la base de données ne se différencient pas, ni ne se séparent. Il existe plusieurs solutions disponibles, et nous avons déjà discuté de certaines d'entre elles dans les précédents blogs de Manynines. Vous voudrez peut-être lire notre introduction au basculement pour la réplication MySQL - le blog 101.

Le basculement maître-esclave

Les approches les plus courantes pour MySQL Failover utilisent le basculement maître-esclave ou le basculement manuel. Il y a deux approches que vous pouvez faire ici :

  • Vous pouvez implémenter votre base de données avec une réplication maître-esclave asynchrone typique.
  • ou peut mettre en œuvre une réplication maître-esclave asynchrone à l'aide d'une réplication basée sur GTID.

Passer à un autre maître pourrait être plus rapide et plus facile. Cela peut être fait avec la syntaxe MySQL suivante :

mysql> SET GLOBAL read_only = 1; /* enable read-only */

mysql> CHANGE MASTER TO MASTER_HOST = '<hostname-or-ip>', MASTER_USER = '<user>', MASTER_PASSWORD = '<password>', MASTER_LOG_FILE = '<master-log-file>', MASTER_LOG_POS=<master_log_position>; /* master information to connect */

mysql> START SLAVE; /* start replication */

mysql> SHOW SLAVE STATUS\G /* check replication status */

ou avec GTID, vous pouvez simplement faire,

...

mysql> CHANGE MASTER TO MASTER_HOST = '<hostname-or-ip>', MASTER_USER = '<user>', MASTER_PASSWORD = '<password>', MASTER_AUTO_POSITION = 1; /* master information to connect */

...

Wit

L'utilisation de l'approche non-GTID nécessite que vous déterminiez d'abord le fichier journal du maître et la position du journal du maître. Vous pouvez le déterminer en examinant l'état du maître dans le nœud maître avant de basculer.

mysql> MASTER STATUS;

Vous pouvez également envisager de renforcer votre serveur en ajoutant sync_binlog =1 et innodb_flush_log_at_trx_commit =1 car, en cas de plantage de votre maître, vous aurez plus de chances que les transactions du maître soient synchronisées avec votre esclave ( s). Dans un tel cas, le maître promu a plus de chances d'être un nœud de source de données cohérent.

Ceci, cependant, n'est peut-être pas la meilleure approche pour votre base de données Drupal car cela pourrait imposer de longs temps d'arrêt s'il n'est pas effectué correctement, comme une suppression brutale. Si votre nœud de base de données maître rencontre un bogue entraînant le blocage d'une base de données, vous aurez besoin que votre application pointe vers une autre base de données en attente en tant que nouveau maître ou en ayant votre esclave promu maître. Vous devrez spécifier exactement quel nœud doit prendre le relais, puis déterminer le décalage et la cohérence de ce nœud. Réaliser cela n'est pas aussi simple que de simplement faire SET GLOBAL read_only=1; CHANGE MASTER TO… (etc.), certaines situations nécessitent une analyse plus approfondie, en examinant les transactions viables requises pour être présentes sur ce serveur de secours ou maître promu, pour le faire.

Basculement Drupal avec MHA

MHA est l'un des outils les plus courants pour le basculement automatique et manuel. Il existe depuis longtemps et est toujours utilisé par de nombreuses organisations. Vous pouvez consulter ces blogs précédents que nous avons sur le sujet, Principaux problèmes courants avec MHA et comment les résoudre ou Outils de haute disponibilité MySQL - Comparaison de MHA, MRM et ClusterControl.

Basculement Drupal à l'aide d'Orchestrator

Orchestrator a été largement adopté maintenant et est utilisé par de grandes organisations telles que Github et Booking.com. Il vous permet non seulement de gérer un basculement, mais également la gestion de la topologie, la découverte d'hôtes, la refactorisation et la récupération. Il y a un joli blog externe ici que j'ai trouvé très utile pour en savoir plus sur son mécanisme de basculement avec Orchestrator. C'est une série de blogs en deux parties; première partie et deuxième partie.

Basculement Drupal avec MaxScale

MaxScale n'est pas seulement un équilibreur de charge conçu pour le serveur MariaDB, il étend également la haute disponibilité, l'évolutivité et la sécurité pour MariaDB tout en simplifiant le développement d'applications en le dissociant de l'infrastructure de base de données sous-jacente. Si vous utilisez MariaDB, alors MaxScale pourrait être une technologie pertinente pour vous. Consultez nos blogs précédents sur la façon dont vous pouvez utiliser le mécanisme de basculement MaxScale.

Basculement Drupal à l'aide de ClusterControl

ClusterControl de Severalnines offre un large éventail de solutions de gestion et de surveillance de bases de données. Une partie des solutions que nous proposons est le basculement automatique, le basculement manuel et la récupération de cluster/nœud. Ceci est très utile car s'il agit en tant qu'administrateur de votre base de données virtuelle, vous avertissant en temps réel si votre cluster est en «mode panique», tout en gérant la récupération par le système. Vous pouvez consulter ce blog Comment automatiser le basculement de base de données avec ClusterControl pour en savoir plus sur le basculement de ClusterControl.

Autres solutions MySQL

Certaines des anciennes approches sont toujours applicables lorsque vous souhaitez basculer. Il y a MMM, MRM, ou vous pouvez vérifier la réplication de groupe ou Galera (remarque :Galera n'utilise pas de réplication asynchrone, mais plutôt synchrone). Le basculement dans un cluster Galera ne fonctionne pas de la même manière qu'avec la réplication asynchrone. Avec Galera, vous pouvez simplement écrire sur n'importe quel nœud ou, si vous implémentez une approche maître-esclave, vous pouvez diriger votre application vers un autre nœud qui sera le rédacteur actif du cluster.

Basculement Drupal PostgreSQL

Puisque Drupal prend en charge PostgreSQL, nous allons également vérifier les outils pour implémenter un processus de basculement ou de basculement pour PostgreSQL. PostgreSQL utilise la réplication en continu intégrée, mais vous pouvez également la configurer pour utiliser une réplication logique (ajoutée en tant qu'élément central de PostgreSQL dans la version 10).

Basculement Drupal avec pg_ctlcluster

Si votre environnement est Ubuntu, l'utilisation de pg_ctlcluster est un moyen simple et facile de réaliser le basculement. Par exemple, vous pouvez simplement exécuter la commande suivante :

$ pg_ctlcluster 9.6 pg_7653 promote

ou avec RHEL/Centos, vous pouvez utiliser la commande pg_ctl comme,

$ sudo -iu postgres /usr/lib/postgresql/9.6/bin/pg_ctl promote -D  /data/pgsql/slave/data

server promoting

Vous pouvez également déclencher le basculement d'un serveur de secours d'envoi de journaux en créant un fichier déclencheur avec le nom de fichier et le chemin spécifiés par trigger_file dans recovery.conf.

Vous devez être prudent avec la promotion de veille ou la promotion d'esclave ici car vous devrez peut-être vous assurer qu'un seul maître accepte la demande de lecture-écriture. Cela signifie que, lors de la commutation, vous devrez peut-être vous assurer que le maître précédent a été relâché ou arrêté.

La prise en charge du basculement ou du basculement manuel du serveur principal vers le serveur de secours peut être rapide, mais il faut un certain temps pour re-préparer le cluster de basculement. Le passage régulier du système principal au système de secours est une pratique utile car il permet des temps d'arrêt réguliers sur chaque système pour la maintenance. Cela sert également de test du mécanisme de basculement, pour s'assurer qu'il fonctionnera vraiment quand vous en aurez besoin. Des procédures administratives écrites sont toujours conseillées.

Basculement automatique Drupal PostgreSQL

Au lieu d'une approche manuelle, vous pourriez avoir besoin d'un basculement automatique. Cela est particulièrement nécessaire lorsqu'un serveur tombe en panne en raison d'une panne matérielle ou d'une corruption de la machine virtuelle. Vous pouvez également demander à une application d'effectuer automatiquement le basculement afin de réduire le temps d'arrêt de votre application Drupal. Nous allons maintenant passer en revue certains de ces outils qui peuvent être utilisés pour le basculement automatique.

Basculement Drupal avec Patroni

Patroni est un modèle qui vous permet de créer votre propre solution personnalisée à haute disponibilité en utilisant Python et - pour une accessibilité maximale - un magasin de configuration distribué comme ZooKeeper, etcd, Consul ou Kubernetes. Les ingénieurs de base de données, les administrateurs de base de données, les ingénieurs DevOps et les SRE qui cherchent à déployer rapidement HA PostgreSQL dans le centre de données - ou n'importe où ailleurs - le trouveront, espérons-le, utile

Basculement Drupal à l'aide de Pgpool

Pgpool-II est un logiciel proxy qui se situe entre les serveurs PostgreSQL et un client de base de données PostgreSQL. En plus d'avoir un basculement automatique, il dispose de plusieurs fonctionnalités qui incluent le regroupement de connexions, l'équilibrage de charge, la réplication et la limitation des connexions excédentaires. Vous pouvez en savoir plus sur cet outil dans notre blog en trois parties; première partie, deuxième partie, troisième partie.

Basculement Drupal avec pglookout

pglookout est un démon de surveillance et de basculement de la réplication PostgreSQL. pglookout surveille les nœuds de la base de données, leur état de réplication et agit en fonction de cet état. Par exemple, appeler une commande de basculement prédéfinie pour promouvoir un nouveau maître au cas où le précédent disparaîtrait.

pglookout prend en charge deux types de nœuds différents, ceux qui sont installés sur les nœuds db eux-mêmes et les nœuds observateurs qui peuvent être installés n'importe où. Le but d'avoir pglookout sur les nœuds de la base de données PostgreSQL est de surveiller l'état de réplication du cluster et d'agir en conséquence, les observateurs ont un mandat plus limité :ils observent simplement l'état du cluster pour donner un autre point de vue sur l'état du cluster.

Basculement Drupal avec repmgr

repmgr est une suite d'outils open source pour gérer la réplication et le basculement dans un cluster de serveurs PostgreSQL. Il améliore les capacités de secours intégrées de PostgreSQL avec des outils permettant de configurer des serveurs de secours, de surveiller la réplication et d'effectuer des tâches administratives telles que des opérations de basculement ou de basculement manuel.

repmgr a fourni une prise en charge avancée des mécanismes de réplication intégrés de PostgreSQL depuis leur introduction dans la version 9.0. La série repmgr actuelle, repmgr 4, prend en charge les derniers développements en matière de fonctionnalité de réplication introduits à partir de PostgreSQL 9.3, tels que la réplication en cascade, le changement de chronologie et les sauvegardes de base via le protocole de réplication.

Basculement Drupal à l'aide de ClusterControl

ClusterControl prend en charge le basculement automatique pour PostgreSQL. Si vous avez un incident, votre esclave peut être promu au statut de maître automatiquement. Avec ClusterControl, vous pouvez également déployer une base de données PostgreSQL autonome, répliquée ou en cluster. Vous pouvez également facilement ajouter ou supprimer un nœud en une seule action.

Autres solutions de basculement PostgreSQL Drupal

Il existe certainement des solutions de basculement automatique que j'aurais pu manquer sur ce blog. Si c'est le cas, veuillez ajouter vos commentaires ci-dessous afin que nous puissions connaître vos réflexions et vos expériences concernant votre implémentation et votre configuration pour le basculement, en particulier pour les sites Web ou les applications Drupal.

Solutions supplémentaires pour le basculement Drupal

Bien que les outils que j'ai mentionnés plus tôt gèrent définitivement la solution à vos problèmes de basculement, l'ajout d'outils qui rendent le basculement assez facile, plus sûr et a une isolation totale entre votre couche de base de données peut être satisfaisant.

Basculement Drupal à l'aide de ProxySQL

Avec ProxySQL, vous pouvez simplement faire pointer vos sites Web ou applications Drupal vers l'hôte du serveur ProxySQL et il désignera quel nœud recevra les écritures et quels nœuds recevront les lectures. La magie se produit de manière transparente au sein de la couche TCP et aucune modification n'est nécessaire pour la configuration de votre application/site Web. En plus de cela, ProxySQL agit également comme équilibreur de charge pour vos demandes d'écriture et de lecture pour le trafic de votre base de données. Ceci n'est applicable que si vous utilisez des variantes de base de données MySQL.

Basculement Drupal à l'aide de HAProxy avec Keepalived

L'utilisation de HAProxy et Keepalived ajoute plus de haute disponibilité et de redondance au sein de votre base de données Drupal. Si vous souhaitez basculer, cela peut être fait sans que votre application ne sache ce qui se passe dans votre couche de base de données. Pointez simplement votre application vers l'IP vrrp que vous avez configurée dans votre Keepalived et tout sera géré avec une isolation totale de votre application. Le basculement automatique sera géré de manière transparente et sans le savoir par votre application, de sorte qu'aucune modification ne doit se produire une fois, par exemple, un sinistre s'est produit et une récupération ou un basculement a été appliqué. L'avantage de cette configuration est qu'elle s'applique aux bases de données MySQL et PostgreSQL. Je vous suggère de consulter notre blog PostgreSQL Load Balancing Using HAProxy &Keepalived pour en savoir plus sur la façon de procéder.

Toutes les options ci-dessus sont prises en charge par ClusterControl. Vous pouvez déployer ou importer la base de données, puis déployer ProxySQL, MaxScale ou HAProxy &Keepalived. Tout sera géré, surveillé et configuré automatiquement sans aucune autre configuration nécessaire de votre part. Tout se passe en arrière-plan et crée automatiquement un prêt pour la production.

Conclusion

Avoir un site Web ou une application Drupal toujours actif, surtout si vous attendez une grande quantité de trafic, peut être compliqué à créer. Cependant, si vous disposez des bons outils, de la bonne configuration et de la bonne pile technologique, il est possible d'obtenir une haute disponibilité et une redondance.

Et si ce n'est pas le cas ? Eh bien, ClusterControl le configurera et le maintiendra pour vous. Alternativement, vous pouvez créer une configuration en utilisant les technologies mentionnées dans ce blog, dont la plupart sont des outils gratuits open source qui répondraient à vos besoins.