Redis Scaling and Failover pour DirectumRX Services

Redis est un système de gestion de base de données de la classe NoSQL (SGBD non relationnels) placé entièrement en RAM. Pour accéder aux données, le modèle «clé» - «valeur» est utilisé. Un tel SGBD est souvent utilisé pour stocker des caches dans des services évolutifs, pour stocker des images et de petites données.

Redis DBMS est largement utilisé en raison de:

  • haute vitesse, car toutes les données sont stockées dans la RAM;
  • multiplateforme;
  • distribution sous licence BSD (s'applique aux logiciels open source).

L'étendue de la distribution et de l'applicabilité de Redis peut être estimée par l'énorme quantité de documentation avec toutes sortes de cas sur le site officiel du projet .

Si vous utilisez la mise à l'échelle horizontale des services DirectumRX, vous devez utiliser l'installation à tolérance de pannes Redis pour fonctionner correctement avec le service de stockage DirectumRX et le service d'accès Web DirectumRX.

image

Redis stockera les données opérationnelles, les caches et autres informations nécessaires au fonctionnement des services en mode évolutif afin que le processus d'interaction de l'utilisateur avec le système ne dépende pas de l'installation avec laquelle il travaille actuellement.

Redis ne stockera pas de données sensibles et ne sera pas soumis à une charge importante. Mais en cas de panne de Redis, les utilisateurs rencontreront de nombreuses erreurs lors du basculement entre les installations.

Sur le site officiel de Redis, il existe 2 façons d'assurer la mise à l'échelle horizontale et la tolérance aux pannes:

  1. Utilisation de Redis Sentiel .
  2. Utilisation de Redis Cluster .

Pensez à personnaliser ces options.

Configurer Redis Sentiel


L'option utilisant le Redis Sentiel (Redis Tracking Node) a été implémentée dans Redis 2.4 et consiste à utiliser le service supplémentaire Redis Sentiel pour surveiller la disponibilité de l'assistant. Il effectue également la configuration des nœuds de réplique en cas de panne de l'assistant. Détermine lequel des nœuds SLAVE deviendra MASTER et effectuera la reconfiguration en déplacement.

Met en œuvre le schéma classique:

image

Il peut y avoir de nombreux nœuds SLAVE (jusqu'à 1000 selon le site officiel), pour un travail productif, il est recommandé d'utiliser au moins deux nœuds SLAVE.

En règle générale, le schéma est configuré de telle manière que le service Redis Sentiel est configuré sur les nœuds MASTER et SLAVE, et si le nœud MASTER échoue, les nœuds de surveillance restants décident d'introduire un nouveau MASTER.

La version actuelle de Redis est disponible en téléchargement sur le site officiel du développeur du produit . Cependant, le site de distribution n'est disponible que pour Linux. À un moment donné, le projet Microsoft de portage de Redis vers Windows était en cours de développement, mais à l'heure actuelle, le projet a arrêté le développement sur la version 3.2.100, donc dans cet article, nous considérerons l'option de déploiement la plus pertinente - sous Linux.

Comme nœuds de test, nous utiliserons deux hôtes virtuels redis1 et redis2 avec la distribution Linux installée de Debian 10.

Tout d'abord, mettez à jour les listes de packages à partir du référentiel par défaut et installez Redis:

apt-get update && apt-get upgrade apt install redis-server 

Vérifiez la version:

 root@redis1:/home/user# redis-server -v Redis server v=5.0.3 sha=00000000:0 malloc=jemalloc-5.1.0 bits=64 build=afa0decbb6de285f 

Laissez redis1 agir en tant que nœud MASTER et redis2 agir en tant que nœud SLAVE.

Pour ce faire, nous écrivons dans les fichiers de configuration Redis les paramètres nécessaires qui vous permettront de créer une réplique (pas encore tolérante aux pannes).

Pour redis1 dans le fichier de configuration /etc/redis/redis.conf, spécifiez:

 # ,   MASTER     . requirepass TestPass 

Pour redis2 dans le fichier de configuration /etc/redis/redis.conf, spécifiez:

 #   MASTER  . slaveof redis1 6379 #      . masterauth TestPass #   ,         . requirepass TestPass 

Redémarrez les services redis-server sur les deux nœuds:

 root@redis1:/etc/redis# /etc/init.d/redis-server stop [ ok ] Stopping redis-server (via systemctl): redis-server.service. root@redis1:/etc/redis# /etc/init.d/redis-server start [ ok ] Starting redis-server (via systemctl): redis-server.service. root@redis2:/etc/redis# /etc/init.d/redis-server stop [ ok ] Stopping redis-server (via systemctl): redis-server.service. root@redis2:/etc/redis# /etc/init.d/redis-server start [ ok ] Starting redis-server (via systemctl): redis-server.service. 

Nous vérifions côté MASTER que les nœuds sont devenus des répliques et ont reçu les rôles nécessaires:

 root@redis1:/etc/redis# redis-cli -a TestPass info replication Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. # Replication role:master connected_slaves:1 slave0:ip=192.168.9.96,port=6379,state=online,offset=28,lag=0 master_replid:56b0a702d5823d107b0ca1ca2c80f8ef650a4b28 master_replid2:0000000000000000000000000000000000000000 master_repl_offset:28 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:28 

Côté ESCLAVE, on voit la même situation:
 root@redis2:/etc/redis# redis-cli -a TestPass info replication Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. # Replication role:slave master_host:redis1 master_port:6379 master_link_status:up master_last_io_seconds_ago:4 master_sync_in_progress:0 slave_repl_offset:14 slave_priority:100 slave_read_only:1 connected_slaves:0 master_replid:56b0a702d5823d107b0ca1ca2c80f8ef650a4b28 master_replid2:0000000000000000000000000000000000000000 master_repl_offset:14 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:14 

Vous devez maintenant configurer la réplique pour qu'elle soit automatiquement restaurée en cas de défaillance de l'un des nœuds. Pour ce faire, nous avons besoin du service de suivi Redis Sentinel.

Sur la base de la documentation , le service de surveillance Redis Sentinel peut effectuer les opérations suivantes:

  1. Vérifie la disponibilité des nœuds MASTER et SLAVE et est capable d'envoyer des alertes sur l'inaccessibilité des nœuds.
  2. Si le nœud MASTER échoue, le nœud témoin peut mettre le nœud SLAVE en mode MASTER, ainsi que reconfigurer les nœuds SLAVE restants, et ils commencent à fonctionner avec le nouveau MASTER.
  3. Apporte des modifications aux fichiers de configuration des nœuds MASTER et SLAVE.

Pour la pureté de l'expérience, nous placerons un service témoin sur une machine virtuelle redis3 distincte.

Nous connectons le référentiel Redis de la même manière et installons le package redis-sentinel:

 apt install redis-sentinel 

Après l'installation, vous devez effectuer les réglages dans le fichier de configuration du nœud de surveillance /etc/redis/sentinel.conf:

 #    redis1   6379. #   1 -      , #        MASTER-. #       , #     MASTER-. sentinel monitor master01 redis1 6379 1 #  3 ,       . sentinel down-after-milliseconds master01 3000 #    MASTER- sentinel failover-timeout master01 6000 # ,  SLAVE-   . #    ,    , #      . sentinel parallel-syncs master01 1 #    . bind 192.168.9.97 127.0.0.1 ::1 #    MASTER-. sentinel auth-pass master01 TestPass 

Redémarrez le service après avoir effectué les réglages:

 root@redis3:/etc/redis# /etc/init.d/redis-sentinel restart [ ok ] Restarting redis-sentinel (via systemctl): redis-sentinel.service. 

Vérifiez que le service de suivi a vu MASTER et SLAVE:

 root@redis3:/etc/redis# redis-cli -p 26379 info sentinel # Sentinel sentinel_masters:1 sentinel_tilt:0 sentinel_running_scripts:0 sentinel_scripts_queue_length:0 sentinel_simulate_failure_flags:0 master0:name=master01,status=ok,address=192.168.9.95:6379,slaves=1,sentinels=1 

Nous commençons les expériences.

Nous simulons un échec, arrêtons le service redis-server sur le nœud redis1 et obtenons les informations actuelles du nœud témoin:

 root@redis3:/etc/redis# redis-cli -p 26379 info sentinel # Sentinel sentinel_masters:1 sentinel_tilt:0 sentinel_running_scripts:0 sentinel_scripts_queue_length:0 sentinel_simulate_failure_flags:0 master0:name=master01,status=ok,address=192.168.9.96:6379,slaves=1,sentinels=1 

Nous voyons que MASTER a changé.

Nous allons restaurer le fonctionnement du nœud redis1 et vérifier son état:

 root@redis3:/var/log/redis# redis-cli -h redis1 -p 6379 -a TestPass info replication Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. # Replication role:slave master_host:192.168.9.96 master_port:6379 master_link_status:up master_last_io_seconds_ago:1 master_sync_in_progress:0 slave_repl_offset:15977 slave_priority:100 slave_read_only:1 connected_slaves:0 master_replid:6c0c7d0eedccede56f211f2db74a98c4d0ff6d56 master_replid2:0000000000000000000000000000000000000000 master_repl_offset:15977 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:15977 

Nous voyons que le nœud a reçu le rôle SLAVE, et le nœud redis2 est un nœud MASTER.

Simulez la défaillance du nœud redis2 et vérifiez l'état du nœud témoin:

 root@redis3:/var/log/redis# redis-cli -p 26379 info sentinel # Sentinel sentinel_masters:1 sentinel_tilt:0 sentinel_running_scripts:0 sentinel_scripts_queue_length:0 sentinel_simulate_failure_flags:0 master0:name=master01,status=ok,address=192.168.9.95:6379,slaves=1,sentinels=1 

Et l'état du nœud redis1:

 root@redis3:/var/log/redis# redis-cli -h redis1 -p 6379 -a TestPass info replication Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. # Replication role:master connected_slaves:0 master_replid:6e9d67d6460815b925319c2bafb58bf2c435cffb master_replid2:6c0c7d0eedccede56f211f2db74a98c4d0ff6d56 master_repl_offset:33610 second_repl_offset:26483 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:33610 

Génial, le mécanisme fonctionne. Mais maintenant, la question s'est posée de savoir comment nous connecterons nos services DirectumRX, car ils ont besoin d'une adresse de nœud unique. Nous allons résoudre la situation en utilisant le service HAProxy.

Redis Node Proxying


Tout service TCP proxy peut agir comme un proxy inverse pour les nœuds Redis. Dans cet article, nous considérerons l'utilisation de HAProxy, car il s'agit d'un outil spécialisé conçu pour fournir une haute disponibilité et un équilibrage de charge, et qui est utilisé par des services en ligne universellement connus. En savoir plus sur HAProxy sur la page développeur .

Installez HAProxy sur le nœud redis3:

 root@redis3:/var/log/redis# apt install haproxy 

Dans le fichier de configuration HAProxy /etc/haproxy/haproxy.cfg, ajoutez les paramètres des requêtes de proxy aux nœuds Redis:

 … frontend ft_redis bind *:6379 name redis mode tcp default_backend bk_redis backend bk_redis mode tcp option tcp-check tcp-check connect #  ,         . tcp-check send AUTH\ TestPass\r\n tcp-check expect string +OK tcp-check send PING\r\n tcp-check expect string +PONG tcp-check send info\ replication\r\n #    MASTER, .. SLAVE      . tcp-check expect string role:master tcp-check send QUIT\r\n tcp-check expect string +OK server Redis1 redis1:6379 check inter 3s server Redis2 redis2:6379 check inter 3s 

Dans cette configuration, il est indiqué que nous allons proxy toutes les requêtes qui arrivent à toutes les interfaces de la machine virtuelle actuelle à l'adresse sur le port 6379. Nous transmettrons les requêtes au nœud qui répondra qu'il a le rôle MASTER.

Redémarrez le service haproxy:

 root@redis3:/etc/haproxy# /etc/init.d/haproxy restart 

Essayons de nous connecter en utilisant le client redis-cli et créons une clé de test:

 root@redis3:/etc/haproxy# redis-cli -p 6379 -a TestPass Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. 127.0.0.1:6379> SET TestKey "Some test string" OK 127.0.0.1:6379> GET TestKey "Some test string" 127.0.0.1:6379> info keyspace # Keyspace db0:keys=1,expires=0,avg_ttl=0 

Arrêtez le nœud redis1 et interrogez à nouveau la liste des clés:

 127.0.0.1:6379> info keyspace Error: Server closed the connection (3.01s) 127.0.0.1:6379> info keyspace # Keyspace db0:keys=1,expires=0,avg_ttl=0 (2.01s) 127.0.0.1:6379> GET TestKey "Some test string" 

Nous voyons que pendant un certain temps la connexion a été déconnectée, mais ensuite la connexion a été rétablie et toutes les données sont restées en place.

Il suffit maintenant d'enregistrer l'adresse proxy inverse dans les fichiers de configuration des services DirectumRX pour se connecter à Redis.

Configurer le cluster Redis


L'option de clustering Redis Cluster, implémentée pour la version redis 3.0 et supérieure, est une solution pour créer et gérer un cluster avec segmentation et réplication de données. Effectue des tâches de gestion des nœuds, de réplication, de synchronisation des données sur les nœuds et assure l'accès de l'application cliente au nœud MASTER en cas de défaillance de l'un des nœuds MASTER.

image

Redis Cluster fonctionne en mode multimaître, chaque nœud MASTER peut avoir un ou plusieurs nœuds SLAVE (jusqu'à 1000).

La mise à l'échelle est la fonction principale du cluster. De plus, le cluster peut garantir la tolérance aux pannes du service Redis:

  • si certains nœuds ne fonctionnent pas, le cluster redistribue la charge d'eux vers d'autres nœuds;
  • si les nœuds clés ne fonctionnent pas, l'ensemble du cluster se termine.

Une situation peut se produire lorsque le client 2 écrit sur le nœud M2. M2 répond «OK» et essaie d'écrire à S2. Dans le même temps, M2 n'attend pas la fin correcte de l'échange de données avec S2, mais répond immédiatement au client. Dans ce cas, la réplique S2 peut ne pas avoir toutes les données. Par conséquent, il est recommandé d'utiliser plusieurs répliques SLAVE.

Une situation peut également survenir lorsque M1, M3 cessent de «voir» M2 et que le client continue d'écrire des données dans M2. Si l'indisponibilité continue pendant un certain temps (le paramètre cluster-node-timeout), alors dans ce cas, S2 sera mis en mode MASTER et M2 cessera de fonctionner de lui-même.

La documentation officielle recommande d'utiliser 6 nœuds - une instance Redis par nœud, ce qui permet une plus grande fiabilité, mais personne n'interdit d'utiliser trois nœuds avec la topologie de connexion suivante:

image

Si l'un des nœuds physiques tombe en panne, les répliques SLAVE correspondantes passeront en mode MASTER et le fonctionnement ne sera pas interrompu.

Nous implémentons 3 machines virtuelles (redis1, redis2 et redis3) sur le banc de test, chacune exécutant 2 instances Redis.

L'application cliente se connectera à un port spécifique spécifié dans le fichier de configuration client, par conséquent, les paires MASTER - SLAVE devraient fonctionner sur les mêmes ports.

Pour la paire M1 - S1, nous utiliserons le port 6381
Pour la paire M2 - S2, nous utiliserons le port 6382
Pour la paire M3 - S3, nous utiliserons le port 6383

Préparez les fichiers de configuration

Sur redis1:

 cp /etc/redis/redis.conf /etc/redis/m1_redis.conf cp /etc/redis/redis.conf /etc/redis/s2_redis.conf mv /etc/redis/redis.conf /etc/redis/redis.bak 

Sur redis2:

 cp /etc/redis/redis.conf /etc/redis/m2_redis.conf cp /etc/redis/redis.conf /etc/redis/s3_redis.conf mv /etc/redis/redis.conf /etc/redis/redis.bak 

Sur redis3:

 cp /etc/redis/redis.conf /etc/redis/m3_redis.conf cp /etc/redis/redis.conf /etc/redis/s1_redis.conf mv /etc/redis/redis.conf /etc/redis/redis.bak 

Remplissez les fichiers de configuration selon le modèle:

 bind <IP- > protected-mode no #      ,    . port <> pidfile /var/run/redis_<>.pid # <yes/no> -   Redis Cluster cluster-enabled yes # ,      : #  ,  ,    . #         . cluster-config-file nodes-<>.conf #  ,  master-   , #          slaves #    . cluster-node-timeout 15000 

Lançons les nœuds Redis:

Noeud redis1:

 root@redis1:/etc/redis# redis-server /etc/redis/m1_redis.conf root@redis1:/etc/redis# redis-server /etc/redis/s2_redis.conf 

Noeud Redis2:

 root@redis2:/etc/redis# redis-server /etc/redis/m2_redis.conf root@redis2:/etc/redis# redis-server /etc/redis/s3_redis.conf 

Noeud Redis3:

 root@redis3:/etc/redis# redis-server /etc/redis/m3_redis.conf root@redis3:/etc/redis# redis-server /etc/redis/s1_redis.conf 

Pour configurer le cluster, vous devez utiliser l'utilitaire client redis-cli, en lui passant une liste de paires de serveurs ip: port qui joueront les rôles de MASTER et SLAVE:

 redis-cli --cluster create redis1-ip:6381 redis2-ip:6382 redis3-ip:6383 redis1-ip:6382 redis2-ip:6383 redis3-ip:6381 --cluster-replicas 1 

, où l'option --cluster-replicas 1 vous indique le nombre d'esclaves que chaque maître aura et ils sont automatiquement sélectionnés dans la liste des réplicas transférés.

 root@redis1:~/redis/src# redis-cli --cluster create 192.168.9.51:6381 192.168.9.52:6382 192.168.9.53:6383 192.168.9.51:6382 192.168.9.52:6383 192.168.9.53:6381 --cluster-replicas 1 >>> Performing hash slots allocation on 6 nodes... Master[0] -> Slots 0 - 5460 Master[1] -> Slots 5461 - 10922 Master[2] -> Slots 10923 - 16383 Adding replica 192.168.9.52:6383 to 192.168.9.51:6381 Adding replica 192.168.9.51:6382 to 192.168.9.52:6382 Adding replica 192.168.9.53:6381 to 192.168.9.53:6383 >>> Trying to optimize slaves allocation for anti-affinity [OK] Perfect anti-affinity obtained! M: e92cb96fd6c20db7509662a248902e3751ebe95f 192.168.9.51:6381 slots:[0-5460] (5461 slots) master M: d499af3672b3063c7239572ec311ad3160f280ae 192.168.9.52:6382 slots:[5461-10922] (5462 slots) master M: 3a41475e1613519c3ecdec695736a898262a24a5 192.168.9.53:6383 slots:[10923-16383] (5461 slots) master S: 182e5cffc9c31c231de69ddbaf507ec1fe17bb09 192.168.9.51:6382 replicates d499af3672b3063c7239572ec311ad3160f280ae S: 44f656062259005adea58bc5ad024071a050e192 192.168.9.52:6383 replicates 3a41475e1613519c3ecdec695736a898262a24a5 S: 485ffb786e9763955e6f10ffc59247690ad9bc11 192.168.9.53:6381 replicates e92cb96fd6c20db7509662a248902e3751ebe95f Can I set the above configuration? (type 'yes' to accept): yes >>> Nodes configuration updated >>> Assign a different config epoch to each node >>> Sending CLUSTER MEET messages to join the cluster Waiting for the cluster to join ..... >>> Performing Cluster Check (using node 192.168.9.51:6381) M: e92cb96fd6c20db7509662a248902e3751ebe95f 192.168.9.51:6381 slots:[0-5460] (5461 slots) master 1 additional replica(s) M: d499af3672b3063c7239572ec311ad3160f280ae 192.168.9.52:6382 slots:[5461-10922] (5462 slots) master 1 additional replica(s) S: 485ffb786e9763955e6f10ffc59247690ad9bc11 192.168.9.53:6381 slots: (0 slots) slave replicates e92cb96fd6c20db7509662a248902e3751ebe95f S: 182e5cffc9c31c231de69ddbaf507ec1fe17bb09 192.168.9.51:6382 slots: (0 slots) slave replicates d499af3672b3063c7239572ec311ad3160f280ae S: 44f656062259005adea58bc5ad024071a050e192 192.168.9.52:6383 slots: (0 slots) slave replicates 3a41475e1613519c3ecdec695736a898262a24a5 M: 3a41475e1613519c3ecdec695736a898262a24a5 192.168.9.53:6383 slots:[10923-16383] (5461 slots) master 1 additional replica(s) [OK] All nodes agree about slots configuration. >>> Check for open slots... >>> Check slots coverage... [OK] All 16384 slots covered. 

Le cluster est correctement construit. Nous afficherons des informations sur le cluster:

 root@redis1:~/redis/src# redis-cli -c -h 192.168.9.51 -p 6381 192.168.9.51:6381> CLUSTER INFO cluster_state:ok cluster_slots_assigned:16384 cluster_slots_ok:16384 cluster_slots_pfail:0 cluster_slots_fail:0 cluster_known_nodes:6 cluster_size:3 cluster_current_epoch:6 cluster_my_epoch:1 cluster_stats_messages_ping_sent:1254 cluster_stats_messages_pong_sent:1243 cluster_stats_messages_sent:2497 cluster_stats_messages_ping_received:1238 cluster_stats_messages_pong_received:1254 cluster_stats_messages_meet_received:5 cluster_stats_messages_received:2497 192.168.9.51:6381> 

Pour tester une réplique spécifique, comme avec Redis Sentiel, vous pouvez utiliser la commande de réplication INFO:

 root@redis1:~/redis/src# redis-cli -c -h 192.168.9.51 -p 6381 192.168.9.51:6381> INFO replication # Replication role:master connected_slaves:1 slave0:ip=192.168.9.53,port=6381,state=online,offset=1946,lag=0 master_replid:59cd95d394dad9d0e49042637fdfd5290db4abfe master_replid2:0000000000000000000000000000000000000000 master_repl_offset:1946 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:1946 192.168.9.51:6381> 

Essayons de créer plusieurs clés et vérifions que ces clés sont apparues sur les répliques:

 192.168.9.51:6381> SET key1 test1 -> Redirected to slot [9189] located at 192.168.9.52:6382 OK 192.168.9.52:6382> SET key2 test2 -> Redirected to slot [4998] located at 192.168.9.51:6381 OK 192.168.9.51:6381> SET key3 test3 OK 192.168.9.51:6381> 

Vérifiez sur M2:

 root@redis2:/home/user# redis-cli -c -h 192.168.9.52 -p 6382 192.168.9.52:6382> GET key1 "test1" 192.168.9.52:6382> GET key2 -> Redirected to slot [4998] located at 192.168.9.51:6381 "test2" 192.168.9.51:6381> GET key3 "test3" 192.168.9.51:6381> 

Et sur le M3:

 root@redis3:/home/user# redis-cli -c -h 192.168.9.53 -p 6383 192.168.9.53:6383> GET key1 -> Redirected to slot [9189] located at 192.168.9.52:6382 "test1" 192.168.9.52:6382> GET key2 -> Redirected to slot [4998] located at 192.168.9.51:6381 "test2" 192.168.9.51:6381> GET key3 "test3" 192.168.9.51:6381> 

Nous désactiverons le nœud redis1 et vérifierons le fonctionnement de S1:

 192.168.9.52:6382> CLUSTER NODES <b>182e5cffc9c31c231de69ddbaf507ec1fe17bb09 192.168.9.51:6382@16382 slave,fail d499af3672b3063c7239572ec311ad3160f280ae 1569509904727 1569509900000 4 connected</b> 485ffb786e9763955e6f10ffc59247690ad9bc11 <i>192.168.9.53:6381@16381 master</i> - 0 1569510017272 7 connected 0-5460 44f656062259005adea58bc5ad024071a050e192 192.168.9.52:6383@16383 slave 3a41475e1613519c3ecdec695736a898262a24a5 0 1569510018274 5 connected <b>e92cb96fd6c20db7509662a248902e3751ebe95f 192.168.9.51:6381@16381 master,fail - 1569509906731 1569509901721 1 connected</b> 3a41475e1613519c3ecdec695736a898262a24a5 192.168.9.53:6383@16383 master - 0 1569510019275 3 connected 10923-16383 d499af3672b3063c7239572ec311ad3160f280ae 192.168.9.52:6382@16382 myself,master - 0 1569510017000 2 connected 5461-10922 

Nous voyons des informations sur l'échec de M1 et S2 et que S3 est passé en mode MASTER.

Vérifiez où les clés sont stockées:

 192.168.9.52:6382> GET key1 "test1" 192.168.9.52:6382> GET key2 -> Redirected to slot [4998] located at 192.168.9.53:6381 "test2" 192.168.9.53:6381> GET key3 "test3" 192.168.9.53:6381> 

Les clés qui étaient précédemment stockées sur redis1 sont désormais disponibles sur redis3.

Restaurez le fonctionnement du nœud redis1 et vérifiez l'état des nœuds M1 et S2:

 192.168.9.53:6381> CLUSTER NODES <i>e92cb96fd6c20db7509662a248902e3751ebe95f 192.168.9.51:6381@16381 slave 485ffb786e9763955e6f10ffc59247690ad9bc11 0 1569511658217 7 connected 182e5cffc9c31c231de69ddbaf507ec1fe17bb09 192.168.9.51:6382@16382 slave d499af3672b3063c7239572ec311ad3160f280ae 0 1569511657000 4 connected</i> d499af3672b3063c7239572ec311ad3160f280ae 192.168.9.52:6382@16382 master - 0 1569511656000 2 connected 5461-10922 3a41475e1613519c3ecdec695736a898262a24a5 192.168.9.53:6383@16383 master - 0 1569511656000 3 connected 10923-16383 485ffb786e9763955e6f10ffc59247690ad9bc11 192.168.9.53:6381@16381 myself,master - 0 1569511656000 7 connected 0-5460 44f656062259005adea58bc5ad024071a050e192 192.168.9.52:6383@16383 slave 3a41475e1613519c3ecdec695736a898262a24a5 0 1569511657216 5 connected 

La santé de M1 et S2 a récupéré, mais maintenant M1 est en mode ESCLAVE.

Et les clés sont également sur le nœud redis3:

 192.168.9.53:6383> GET key1 -> Redirected to slot [9189] located at 192.168.9.52:6382 "test1" 192.168.9.52:6382> GET key2 -> Redirected to slot [4998] located at 192.168.9.53:6381 "test2" 192.168.9.53:6383> GET key3 -> Redirected to slot [935] located at 192.168.9.53:6381 "test3" 

Le cluster est configuré et la récupération Redis est testée.

Pour accéder aux services DirectumRX, vous devrez également configurer des proxys inverses, comme dans le cas de la configuration de Redis Sentiel.

Au lieu d'une conclusion


Cet article n'a pas envisagé une autre façon d'augmenter la tolérance aux pannes de Redis - en utilisant un gestionnaire de ressources de cluster tiers, par exemple, Pacemaker . Dans ce cas, il sera possible de s'en sortir avec deux nœuds, mais il y a une forte probabilité de perte de données en cas d'urgence.

Pour un proxy inverse (dans ce cas, HAProxy), il est également souhaitable de fournir une tolérance aux pannes, mais ce problème dépassait également la portée de cet article. Si vous êtes intéressé par la rubrique, ces options de déploiement peuvent également être examinées dans des articles séparés avec un réglage pas à pas et un test des résultats.

Vous pouvez trouver les liens ci-dessous pour en savoir plus sur le sujet:
Tutoriel de cluster Redis
Documentation de Redis Sentinel
Manuel de configuration HAProxy .

Source: https://habr.com/ru/post/fr469543/


All Articles