recherche
Maisonbase de donnéesRedisUne brève analyse du principe de la réplication maître-esclave du cluster dans Redis

Cet article vous donnera une compréhension approfondie du principe de réplication maître-esclave du cluster Redis. J'espère qu'il vous sera utile !

Une brève analyse du principe de la réplication maître-esclave du cluster dans Redis

1. Réfléchissez d'abord à une question : pourquoi Redis a-t-il besoin d'une solution distribuée alors que ses performances sont si élevées ?

1. Obtenez des performances plus élevées : pour les applications à haute concurrence, les performances d'une seule machine seront affectées et davantage de serveurs Redis sont nécessaires pour partager la pression et réaliser l'équilibrage de charge

2. éviter les temps d'arrêt/pannes matérielles

3. Atteindre l'évolutivité : la mémoire et le matériel d'une seule machine sont limités, et une expansion horizontale peut être réalisée

Un stockage redondant ou fragmenté peut atteindre les fonctionnalités ci-dessus.

2. Configuration de réplication-réplication maître-esclave

Comme Kafka, Mysql et Rocketmq, redis prend en charge le déploiement de cluster. Les nœuds du cluster sont divisés en maître et esclave. esclave (la dernière est appelée réplique).slave synchronisera les dernières données du maître via le mécanisme de réplication. Redis fournit une commande très pratique pour activer la réplication maître-esclave. [Recommandations associées : Tutoriel vidéo Redis]

Comment configurer et activer la réplication maître-esclave ?

Prenons l'exemple de la création d'un pseudo cluster localement. Le port 6379 est le nœud esclave et le port 6378 est le nœud maître.

1. Configurez la réplique du masterip masterport dans redis.conf du nœud esclave, il se connectera automatiquement au nœud maître et commencera à synchroniser les données

Une brève analyse du principe de la réplication maître-esclave du cluster dans Redis

Si un nouveau nœud maître est remplacé, cette configuration sera réécrite.

2. Ou spécifiez

./redis-server --replicaof masterip masterport
lors du démarrage du programme redis-server. 3. Ou connectez-vous au client et exécutez la commande suivante

slaveof masterip masterport

Notez que cette méthode est modifiée pendant le fonctionnement et peut réaliser un basculement

Remarque : A. nœud esclave Il peut également être le nœud maître d'autres nœuds pour former une relation de réplication en cascade. Mais d'autres nœuds synchronisent également les données du nœud maître de niveau supérieur.

Après avoir configuré le cluster, vérifiez l'état du cluster via la réplication des informations

Une brève analyse du principe de la réplication maître-esclave du cluster dans Redis

Utilisez la commande role pour afficher les informations sur le rôle du nœud dans le cluster

Une brève analyse du principe de la réplication maître-esclave du cluster dans Redis

Notez que le nœud esclave est en lecture seule . Une erreur sera signalée lors de l'écriture de la commande.

Une brève analyse du principe de la réplication maître-esclave du cluster dans Redis

Comment l'esclave quitte-t-il le cluster ? Vous pouvez exécuter la commande suivante :

slaveof no one

3. Processus de réplication maître-esclave

1. Tout d'abord, la réplique-réplique rejoint le cluster

Une brève analyse du principe de la réplication maître-esclave du cluster dans Redis.

2. Établissez avec la connexion principale, vérifiez régulièrement via la minuterie s'il faut synchroniser les données du nœud maître

Une brève analyse du principe de la réplication maître-esclave du cluster dans Redis

Description du code source :

//每1s执行这个方法
void replicationCron(void) {
    ...
    //检查是否需要连接到master 如果是REPL_STATE_CONNECT状态,必须连接到master
    //#define REPL_STATE_CONNECT 1  Must connect to master 
    if (server.repl_state == REPL_STATE_CONNECT) {
        serverLog(LL_NOTICE,"Connecting to MASTER %s:%d",
            server.masterhost, server.masterport);
        //和master创建连接    
        if (connectWithMaster() == C_OK) {
            serverLog(LL_NOTICE,"MASTER <-> REPLICA sync started");
        }
    }
    
    //发送ping命令给slave 
    if ((replication_cron_loops % server.repl_ping_slave_period) == 0 &&
        listLength(server.slaves))
    {
        /* Note that we don&#39;t send the PING if the clients are paused during
         * a Redis Cluster manual failover: the PING we send will otherwise
         * alter the replication offsets of master and slave, and will no longer
         * match the one stored into &#39;mf_master_offset&#39; state. */
        int manual_failover_in_progress =
            server.cluster_enabled &&
            server.cluster->mf_end &&
            clientsArePaused();

        if (!manual_failover_in_progress) {
            ping_argv[0] = createStringObject("PING",4);
            replicationFeedSlaves(server.slaves, server.slaveseldb,
                ping_argv, 1);
            decrRefCount(ping_argv[0]);
        }
    }
    
    //发送换行符到所有slave,告诉slave等待接收rdb文件
    listRewind(server.slaves,&li);
    while((ln = listNext(&li))) {
        client *slave = ln->value;

        int is_presync =
            (slave->replstate == SLAVE_STATE_WAIT_BGSAVE_START ||
            (slave->replstate == SLAVE_STATE_WAIT_BGSAVE_END &&
             server.rdb_child_type != RDB_CHILD_TYPE_SOCKET));

        if (is_presync) {
            if (write(slave->fd, "\n", 1) == -1) {
                /* Don&#39;t worry about socket errors, it&#39;s just a ping. */
            }
        }
    }
    ...
}

3.

Lorsque l'esclave est connecté Après être arrivé au maître, utilisez la commande psync (anciennement la commande sync, qui ne permet pas la resynchronisation partielle, utilisez donc maintenant PSYNC à la place) pour initialiser la réplication et envoyer l'identifiant de réplication du nœud maître et le décalage maximum traité au maître.

Une brève analyse du principe de la réplication maître-esclave du cluster dans RedisLe nœud maître a les deux attributs suivants, un identifiant de réplication (instance de marque), un offset (marque écrite dans le flux du nœud esclave)

Replication ID, offset

S'il n'y a pas suffisamment de travail en retard dans le tampon du nœud maître, ou si la réplique référencée est un enregistrement historique (ID de réplication) qui n'est plus connu, une resynchronisation complète aura lieu

Description du code source :

    //没有在rdb进程,没有aof重写进程
    if (server.rdb_child_pid == -1 && server.aof_child_pid == -1) {
        time_t idle, max_idle = 0;
        int slaves_waiting = 0;
        int mincapa = -1;
        listNode *ln;
        listIter li;

        listRewind(server.slaves,&li);
        while((ln = listNext(&li))) {
            client *slave = ln->value;
            //判断slave是否是等待bgsave状态
            if (slave->replstate == SLAVE_STATE_WAIT_BGSAVE_START) {
            //多久没有发送心跳或查询数据了 空闲时间间隔
                idle = server.unixtime - slave->lastinteraction;
                if (idle > max_idle) max_idle = idle;
                slaves_waiting++;
                mincapa = (mincapa == -1) ? slave->slave_capa :
                                            (mincapa & slave->slave_capa);
            }
        }

        if (slaves_waiting &&
            (!server.repl_diskless_sync ||
             max_idle > server.repl_diskless_sync_delay))
        {
            /* Start the BGSAVE. The called function may start a
             * BGSAVE with socket target or disk target depending on the
             * configuration and slaves capabilities. */
             //bgsave rdb生成
            startBgsaveForReplication(mincapa);
        }
    }

Pendant le processus de réplication, le processus de transition de l'état esclave.

4. Lors de l'étape de propagation des commandes, une fois la synchronisation complète effectuée, le maître et l'esclave propageront les commandes pour assurer la cohérence des données.

Une brève analyse du principe de la réplication maître-esclave du cluster dans Redis

4. Comprendre l'ID de réplication

Chaque fois qu'une instance est redémarrée à partir de zéro en tant qu'instance principale, ou qu'une réplique est promue en instance principale, un nouvel ID de réplication sera généré pour cette instance. Si deux réplicas ont le même ID de réplication, ils peuvent avoir les mêmes données à des moments différents. Pour un historique donné (ID de réplication) contenant le dernier ensemble de données, le décalage est compris comme une heure logique. Il doit être jugé par les deux données de l'ID de réplication et du décalage. Utilisé pour déterminer où le nœud esclave a synchronisé les données.

5. Questions courantes sur la réplication maître-esclave

1. Que se passera-t-il si l'esclave lui-même possède des données ?

slave supprime d'abord ses propres données, puis les charge avec un fichier rdb.

2. Pendant le processus de génération des fichiers RDB, comment gérer les commandes écrites par le client ?

Enregistrez dans le cache mémoire et envoyez-le à l'esclave après l'envoi du rdb.

3. Comment la réplication Redis gère-t-elle l'expiration des clés ?

1. La copie n'expirera pas la clé, mais attendra que l'hôte expire la clé. Lorsque le maître expire une clé (ou l'expulse en raison de LRU), il synthétise une commande DEL qui est transmise à toutes les répliques.

2. Cependant, en raison de l'expiration du pilote hôte, il arrive parfois que la réplique ait encore des clés de mémoire logiquement expirées car le serveur maître ne peut pas fournir la commande DEL à temps. Pour résoudre ce problème, la réplique utilise son horloge logique pour signaler qu'une clé n'existe pas et n'est utilisée que pour les opérations de lecture qui ne violent pas la cohérence de l'ensemble de données (car de nouvelles commandes du maître arriveront)

3 . Exécuter dans le script Lua Pendant cette période, l'expiration de la clé ne sera pas effectuée. Lorsqu'un script Lua est exécuté, le temps est conceptuellement figé dans le nœud maître, de sorte qu'une clé donnée existera ou non pendant toute la durée d'exécution du script. Cela empêche la clé d'expirer au milieu d'un script et d'exiger que la clé envoie le même script au réplica d'une manière qui garantit le même effet dans l'ensemble de données.

Une fois qu'une réplique est promue au rang principal, elle commencera à expirer les clés de manière indépendante et ne nécessite aucune aide de la part de l'ancien réplica principal.

6. Résumé de la réplication maître-esclave

1. Le problème de la sauvegarde des données est résolu, mais le fichier RDB est volumineux, les fichiers volumineux sont transférés et le temps de récupération est également long

2. anormal, la réplique doit être élue manuellement comme maître

3 Dans le cas de 1 maître et de plusieurs esclaves, il y a toujours un problème unique

4 Redis version 2.8.18 et ultérieure prend en charge la réplication sans disque, avec des versions supérieures. performance.

7. Instructions de réplication

1. La réplication asynchrone est utilisée par défaut et le nombre de commandes synchronisées est confirmé par l'asynchronisme

2. Un maître peut avoir plusieurs copies

3. copie, à partir de redis4 À partir de .0, les répliques recevront exactement le même flux de réplication du nœud maître

4 La réplication peut être utilisée à la fois pour l'évolutivité et pour plusieurs répliques de requêtes en lecture seule

Pour plus de connaissances liées à la programmation, veuillez. visite : Introduction à la programmation ! !

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!

Déclaration
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer
Opérations côté serveur de Redis: ce qu'il offreOpérations côté serveur de Redis: ce qu'il offreApr 29, 2025 am 12:21 AM

Redis'sserver-Sideoperations Offerfonctions andTriggersForexEcutingComplexOperAnTheServer.1) Fonctionnels AllowCustomOperationsInlua, Javascrip

Redis: base de données ou serveur? Démystifier le rôleRedis: base de données ou serveur? Démystifier le rôleApr 28, 2025 am 12:06 AM

Redisisisbothadatabaseandaserver.1) asadatabase, itusin-memorystorageforfastAccess, idéalforreal-timeApplications etcaching.2) Asaserver, itsupportpub / subreshingandluascriptingforreal-timecommunication andserver-siteroperations.

Redis: les avantages d'une approche nosqlRedis: les avantages d'une approche nosqlApr 27, 2025 am 12:09 AM

Redis est une base de données NoSQL qui offre des performances et une flexibilité élevées. 1) Stockez les données via des paires de valeurs clés, adaptées au traitement des données à grande échelle et à une concurrence élevée. 2) Le stockage de la mémoire et les modèles à thread unique garantissent une lecture et une rédaction et une atomicité rapides. 3) Utilisez des mécanismes RDB et AOF pour persister les données, en soutenant la haute disponibilité et l'échelle.

Redis: Comprendre son architecture et son objectifRedis: Comprendre son architecture et son objectifApr 26, 2025 am 12:11 AM

Redis est un système de stockage de structure de données de mémoire, principalement utilisé comme base de données, cache et courtier de messages. Ses caractéristiques principales incluent un modèle unique, un multiplexage d'E / S, un mécanisme de persistance, des fonctions de réplication et de clustering. Redis est couramment utilisé dans les applications pratiques pour la mise en cache, le stockage de session et les files d'attente de messages. Il peut améliorer considérablement ses performances en sélectionnant la bonne structure de données, en utilisant des pipelines et des transactions, et en surveillant et en réglage.

Redis vs Bases de données SQL: différences clésRedis vs Bases de données SQL: différences clésApr 25, 2025 am 12:02 AM

La principale différence entre les bases de données Redis et SQL est que Redis est une base de données en mémoire, adaptée aux exigences de performance et de flexibilité élevées; La base de données SQL est une base de données relationnelle, adaptée aux requêtes complexes et aux exigences de cohérence des données. Plus précisément, 1) Redis fournit des services d'accès aux données et de mise en cache à haut débit, prend en charge plusieurs types de données, adaptés à la mise en cache et au traitement des données en temps réel; 2) La base de données SQL gère les données via une structure de table, prend en charge les requêtes complexes et le traitement des transactions et convient à des scénarios tels que le commerce électronique et les systèmes financiers qui nécessitent la cohérence des données.

Redis: comment il agit comme un magasin de données et un serviceRedis: comment il agit comme un magasin de données et un serviceApr 24, 2025 am 12:08 AM

Redéactsasbothadatastoreandaservice.1) asadatastore, itusin-memorystorage forfastoperations, soutenant Variedatastructures LikeKey-Valuepairs et.

Redis vs d'autres bases de données: une analyse comparativeRedis vs d'autres bases de données: une analyse comparativeApr 23, 2025 am 12:16 AM

Par rapport aux autres bases de données, Redis présente les avantages uniques suivants: 1) une vitesse extrêmement rapide et les opérations de lecture et d'écriture sont généralement au niveau de la microseconde; 2) prend en charge de riches structures et opérations de données; 3) Scénarios d'utilisation flexibles tels que les caches, les compteurs et publier des abonnements. Lors du choix de Redis ou d'autres bases de données, cela dépend des besoins et des scénarios spécifiques. Redis fonctionne bien dans les applications hautes performances et à faible latence.

Rôle de Redis: Explorer les capacités de stockage et de gestion des donnéesRôle de Redis: Explorer les capacités de stockage et de gestion des donnéesApr 22, 2025 am 12:10 AM

Redis joue un rôle clé dans le stockage et la gestion des données, et est devenu le cœur des applications modernes à travers ses multiples structures de données et mécanismes de persistance. 1) Redis prend en charge les structures de données telles que les chaînes, les listes, les collections, les collections ordonnées et les tables de hachage, et convient au cache et à la logique métier complexe. 2) Grâce à deux méthodes de persistance, RDB et AOF, Redis assure un stockage fiable et une récupération rapide des données.

See all articles

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

SublimeText3 Linux nouvelle version

SublimeText3 Linux nouvelle version

Dernière version de SublimeText3 Linux

Listes Sec

Listes Sec

SecLists est le compagnon ultime du testeur de sécurité. Il s'agit d'une collection de différents types de listes fréquemment utilisées lors des évaluations de sécurité, le tout en un seul endroit. SecLists contribue à rendre les tests de sécurité plus efficaces et productifs en fournissant facilement toutes les listes dont un testeur de sécurité pourrait avoir besoin. Les types de listes incluent les noms d'utilisateur, les mots de passe, les URL, les charges utiles floues, les modèles de données sensibles, les shells Web, etc. Le testeur peut simplement extraire ce référentiel sur une nouvelle machine de test et il aura accès à tous les types de listes dont il a besoin.

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

VSCode Windows 64 bits Télécharger

VSCode Windows 64 bits Télécharger

Un éditeur IDE gratuit et puissant lancé par Microsoft

PhpStorm version Mac

PhpStorm version Mac

Le dernier (2018.2.1) outil de développement intégré PHP professionnel