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.
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
slave1 Configurer redis_slave1.conf Définir comme master's slave
port 6301slaveof 127.0.0.1 6300requirepass 123456masterauth 123456daemonize yes
slave2 Configurez redis_slave2.conf et réglez-le sur master's slave
port 6302slaveof 127.0.0.1 6300requirepass 123456masterauth 123456daemonize yes
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.
redis-server redis_master.conf redis-server redis_slave1.conf redis-server redis_slave2.conf
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
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"
slave1 :
redis-cli -p 6301 127.0.0.1:6301> auth 123456OK127.0.0.1:6301> get abc"123" 127.0.0.1:6301>
slave2 :
redis-cli -p 6302 127.0.0.1:6302> auth 123456OK127.0.0.1:6302> get abc"123" 127.0.0.1:6302>
masterModifiez la valeur de la clé abc à 456
127.0.0.1:6300> set abc 456OK127.0.0.1:6300> get abc"456"
slave1:
127.0.0.1:6301> get abc"456"
slave2:
127.0.0.1:6302> get abc"456"
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
sentinel2.conf
port 26302sentinel monitor master 127.0.0.1 6300 2sentinel auth-pass master 123456logfile "/tmp/sentinel.log"daemonize yes
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]
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
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
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't write against a read only slave.
slave2 Mettre à jour la clé abc à 888
127.0.0.1:6302> set abc 888OK127.0.0.1:6302> get abc"888"
Maître d'origine, l'esclave1 vérifie s'il est synchronisé
Maître d'origine
127.0.0.1:6300> get abc"888"
slave1
127.0.0.1:6301> get abc"888"
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 :
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!