Maison > développement back-end > tutoriel php > Opérations associées aux paramètres de synchronisation maître-esclave Redis et de séparation lecture-écriture

Opérations associées aux paramètres de synchronisation maître-esclave Redis et de séparation lecture-écriture

jacklove
Libérer: 2023-04-01 12:08:02
original
2067 Les gens l'ont consulté

Cet article présente l'utilisation de la fonction de synchronisation maître-esclave de Redis (maître, esclave) pour permettre au programme de séparer la lecture et l'écriture, d'éviter les goulots d'étranglement d'E/S et d'améliorer l'efficacité de la lecture et de l'écriture des données.

Redis prend en charge un serveur maître pour synchroniser plusieurs serveurs esclaves, et la synchronisation utilise le mécanisme de publication/abonnement.
Un maître peut également être superposé pour plusieurs esclaves. Les esclaves peuvent être synchronisés sous chaque esclave et étendus dans une structure arborescente.

Paramètres de synchronisation maître-esclave Redis

Le port par défaut de Redis est 6379 Afin de ne pas affecter le Redis d'origine, nous utilisons le nouveau port

<.>

master Configurer redis_master.conf

port 6300requirepass 123456masterauth 123456daemonize yes
Copier après la connexion


slave1 Configurer redis_slave1.conf Définir comme master's slave

port 6301slaveof 127.0.0.1 6300requirepass 123456masterauth 123456daemonize yes
Copier après la connexion


slave2 Configurez redis_slave2.conf et réglez-le sur master's slave

port 6302slaveof 127.0.0.1 6300requirepass 123456masterauth 123456daemonize yes
Copier après la connexion

daemonize signifie Démarrer en arrière-plan.
requirepass est le mot de passe d'authentification de l'hôte.
masterauth Vérifiez le mot de passe de l'esclave pour accéder à l'hôte, qui doit être cohérent avec le requirepass de l'hôte. Étant donné que la commutation maître-esclave doit être démontrée plus tard, les mots de passe de vérification des trois ensembles de conf sont cohérents.

Test de synchronisation maître-esclave Redis

Démarrez maître, esclave1, esclave2 dans l'ordre

redis-server redis_master.conf
redis-server redis_slave1.conf
redis-server redis_slave2.conf
Copier après la connexion
Après l'exécution, vérifiez si le démarrage est réussi

ps aux|grep redis
root  1858  Ss  3:55  0:00.01 redis-server *:6302 root  1849  Ss  3:54  0:00.01 redis-server *:6301 root  1842  Ss  3:54  0:00.02 redis-server *:6300
Copier après la connexion
Entrez

master, définissez la valeur de la clé abc sur 123

redis-cli -p 6300127.0.0.1:6300> auth 123456OK127.0.0.1:6300> set abc 123OK127.0.0.1:6300> get abc"123"
Copier après la connexion
Entrez respectivement slave1 et slave2 pour vérifier si les données sont synchronisées


slave1 :

redis-cli -p 6301
127.0.0.1:6301> auth 123456OK127.0.0.1:6301> get abc"123"
127.0.0.1:6301>
Copier après la connexion

slave2 :

redis-cli -p 6302
127.0.0.1:6302> auth 123456OK127.0.0.1:6302> get abc"123"
127.0.0.1:6302>
Copier après la connexion
Entrez

masterModifiez la valeur de la clé abc à 456

127.0.0.1:6300> set abc 456OK127.0.0.1:6300> get abc"456"
Copier après la connexion
Vérifiez si slave1 et slave2 sont synchronisés


slave1:

127.0.0.1:6301> get abc"456"
Copier après la connexion

slave2:

127.0.0.1:6302> get abc"456"
Copier après la connexion
Redis master- commutation d'esclave

pendant le fonctionnement, s'il y a un problème avec le maître, nous pouvons configurer une autre machine esclave pour qu'elle soit automatiquement utilisée comme maître. La fonction

sentinel de Redis est principalement utilisée ici pour implémenter la commutation maître-esclave.

sentinel1.conf

port 26301sentinel monitor master 127.0.0.1 6300 2sentinel auth-pass master 123456logfile "/tmp/sentinel.log"daemonize yes
Copier après la connexion

sentinel2.conf

port 26302sentinel monitor master 127.0.0.1 6300 2sentinel auth-pass master 123456logfile "/tmp/sentinel.log"daemonize yes
Copier après la connexion

sentinel moniteur maître 127.0. 0,1 6300 2 Le 2 dans 2 indique que plus de 2 services sentinelles détectent une défaillance du maître avant d'effectuer la commutation maître-esclave.

Démarrez deux processus sentinelles

redis-server sentinel1.conf --sentinel
redis-server sentinel2.conf --sentinel
ps aux|grep redis
root  2643  Ss  4:28 0:00.02 redis-server *:26302 [sentinel]  
root  2636  Ss  4:28 0:00.02 redis-server *:26301 [sentinel]
Copier après la connexion

Vous pouvez voir dans le journal Redis que le démarrage est réussi et commencer la surveillance

Running mode=sentinel, port=26301.
Sentinel ID is 3a23343948cd7f26662ccba1d01b92955311ef52
+monitor master master 127.0.0.1 6300 quorum 2+slave slave 127.0.0.1:6301 127.0.0.1 6301 @ master 127.0.0.1 6300+slave slave 127.0.0.1:6302 127.0.0.1 6302 @ master 127.0.0.1 6300Running mode=sentinel, port=26302.
Sentinel ID is ce0ee2af6b454205a3e475763945f505a10a7d6a
+monitor master master 127.0.0.1 6300 quorum 2+slave slave 127.0.0.1:6301 127.0.0.1 6301 @ master 127.0.0.1 6300+slave slave 127.0.0.1:6302 127.0.0.1 6302 @ master 127.0.0.1 6300+sentinel sentinel 3a23343948cd7f26662ccba1d01b92955311ef52 127.0.0.1 26301 @ master 127.0.0.1 6300+sentinel sentinel ce0ee2af6b454205a3e475763945f505a10a7d6a 127.0.0.1 26302 @ master 127.0.0.1 6300
Copier après la connexion

Terminez le maître, après avoir testé le processus de commutation maître-esclave

kill master, sentinel détermine que le maître n'est pas valide et exécute le processus de commutation maître-esclave.

Le journal est le suivant :

+failover-state-reconf-slaves master master 127.0.0.1 6300+slave-reconf-sent slave 127.0.0.1:6301 127.0.0.1 6301 @ master 127.0.0.1 6300+config-update-from sentinel 3a23343948cd7f26662ccba1d01b92955311ef52 127.0.0.1 26301 +switch-master master 127.0.0.1 6300 127.0.0.1 6302+slave slave 127.0.0.1:6301 127.0.0.1 6301 @ master 127.0.0.1 6302+slave slave 127.0.0.1:6300 127.0.0.1 6300 @ master 127.0.0.1 6302-odown master master 127.0.0.1 6300+slave-reconf-inprog slave 127.0.0.1:6301 127.0.0.1 6301 @ master 127.0.0.1 6300+slave-reconf-done slave 127.0.0.1:6301 127.0.0.1 6301 @ master 127.0.0.1 6300+failover-end master master 127.0.0.1 6300+switch-master master 127.0.0.1 6300 127.0.0.1 6302+convert-to-slave slave 127.0.0.1:6300 127.0.0.1 6300 @ master 127.0.0.1 6302
Copier après la connexion

Comme le montre le journal, le commutateur maître-esclave a effectué les opérations suivantes :

1. Remplacez slave2 par le nouveau maître , et l'esclave de 127.0.0.1 6300 dans redis_slave2.conf est automatiquement supprimé.

2. Mettez automatiquement à jour slaveof 127.0.0.1 6300 dans redis_slave1.conf vers slaveof 127.0.0.1 6302 et utilisez slave2 comme nouveau maître.

3.Une fois le maître d'origine redémarré, il sera utilisé comme esclave et l'esclave de 127.0.0.1 6302 sera automatiquement ajouté à redis_master.conf.


Effectuer un test de synchronisation maître-esclave après avoir redémarré le maître d'origine

Maître d'origineMettre à jour la clé abc à 888, car elle est maintenant un esclave. La mise à jour a donc échoué.

127.0.0.1:6300> set abc 888(error) READONLY You can&#39;t write against a read only slave.
Copier après la connexion

slave2 Mettre à jour la clé abc à 888

127.0.0.1:6302> set abc 888OK127.0.0.1:6302> get abc"888"
Copier après la connexion

Maître d'origine, l'esclave1 vérifie s'il est synchronisé

Maître d'origine

127.0.0.1:6300> get abc"888"
Copier après la connexion

slave1

127.0.0.1:6301> get abc"888"
Copier après la connexion

Après inspection, après le changement maître-esclave, slave2 sert de nouveau maître et les autres serveurs servent d'esclaves et peut être utilisé normalement.

Cet article explique les opérations pertinentes de la synchronisation maître-esclave Redis et les paramètres de séparation lecture-écriture Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois.

Recommandations associées :

Présentation de la méthode de reconstruction de la partition de table par MySQL et de conservation des données

Contenu pertinent sur PHP générant une classe RequestID unique

php json_encode ne prend pas en charge la solution pour objecter les attributs privés

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal