Redis dispose de trois méthodes de clustering : la réplication maître-esclave, le mode sentinelle et le cluster Cluster.
Lorsqu'un nouveau serveur esclave est établi, le serveur esclave enverra une commande SYNC au serveur maître Après avoir reçu la commande SYNC, le serveur maître exécutera une commande BGSAVE. Pendant l'exécution, toutes les commandes seront écrites dans le tampon. Lorsque la commande BGSAVE est exécutée, le fichier RDB généré sera envoyé au serveur esclave pour charger les données dans la mémoire. Le serveur maître mettra en mémoire tampon les données au format du protocole de commande Redis. Les commandes de zone sont envoyées au serveur esclave. Après cela, chaque fois que le service maître exécute une commande, elle sera synchronisée avec le serveur esclave. Même si plusieurs serveurs esclaves envoient des commandes SYNC au serveur maître, le serveur maître n'exécutera qu'une seule commande BGSAVE pour traiter la prochaine demande de synchronisation. Un serveur maître peut avoir plusieurs serveurs esclaves, et les serveurs esclaves peuvent également avoir des serveurs esclaves, formant une structure de type graphique. La fonction de réplication ne bloque pas le serveur maître. Même s'il y a une ou plusieurs demandes de synchronisation, le serveur maître peut toujours. traiter les demandes de commandes.
Lorsque le mode de réplication maître-esclave est configuré, la fonction de persistance du serveur maître doit être activée. Si la fonction de persistance du serveur maître est désactivée, une fois le serveur maître redémarré, tous les esclaves. les données du serveur seront perdues, même s'il est configuré. En mode Sentinel, si le serveur principal démarre automatiquement le processus rapidement, de sorte qu'un nouveau serveur principal n'a pas été élu en mode Sentinel, le démarrage du service principal entraînera également une perte de données sur le sous-serveur.
Pour configurer un mode de réplication maître-esclave, utilisez simplement la commande Slaveof, ajoutez-la au fichier de configuration conf ou exécutez la commande dans redis.
SLAVEOF host port
Le système Sentinel de Redis est utilisé pour gérer plusieurs Redis. Il effectue principalement les trois choses suivantes :
Surveillance : Sentinel vérifiera en permanence l'état de fonctionnement des serveurs maître et esclave.
Rappel : lorsqu'un serveur Redis tombe en panne, des notifications peuvent être envoyées via l'API ou d'autres applications
Migration automatique des pannes : lorsqu'un serveur maître ne peut pas fonctionner normalement, Sentinel effectuera une migration automatique des pannes et élira le serveur esclave du serveur maître défaillant . Avec un nouveau serveur maître, les serveurs esclaves restants se connecteront automatiquement et répliqueront les données du nouveau serveur élu.
Le système Sentinel de Redis est un système distribué, et un ou plusieurs Sentinels peuvent être configurés dans le système.
Utilisez redis-sentinel pour démarrer
redis-sentinel sentinel.confy
Vous pouvez également utiliser redis-server pour démarrer
redis-server sentinel.conf --sentinelyy
Les deux méthodes ci-dessus peuvent démarrer sentinel. Vous devez spécifier un fichier de configuration pour démarrer sentinel, sinon il ne le fera pas. start :
Un fichier sentinel.conf nécessite au moins une configuration :
sentinel monitor mymaster 127.0.0.1 6379 2
Surveille un hôte avec un alias appelé mymaster, l'adresse est 127.0.0.1 et le port est 6379. Pour juger ce maître Le serveur comme invalide nécessite le consentement d'au moins 2 sentinelles.
Peu importe le nombre de sentinelles configurées pour déterminer la panne d'un serveur principal, plusieurs Sentinelles dans le système doivent être prises en charge pour effectuer la migration des pannes. Lorsque seules quelques sentinelles fonctionnent normalement, la migration des pannes ne peut pas être effectuée.
Lorsqu'une Sentinelle découvre que le serveur principal est hors ligne, cela est appelé hors ligne subjective. Uniquement lorsque plusieurs Sentinelles découvrent que le serveur principal est hors ligne et communiquent entre elles via des commandes pour déterminer que le serveur principal est hors ligne. appelé subjectif hors ligne. Ce n'est que lorsque le serveur maître est objectivement hors ligne que le leader Sentinel sera élu. Après l'élection, un nouveau serveur maître sera voté pour élire un serveur esclave à mettre à niveau vers le serveur maître. Et envoyez la commande Slaveof no one au serveur esclave sélectionné pour en faire le serveur maître Grâce à la fonction de publication et d'abonnement, la nouvelle configuration est diffusée aux autres Sentinels pour les mises à jour, et la commande Slaveof est envoyée au serveur maître hors ligne pour la laisser. it Réplique le nouveau serveur maître. Lorsque tous les serveurs esclaves ont commencé à répliquer le nouveau serveur maître, le leader Sentinel met fin à cette migration de panne.
Lorsqu'une instance Redis est reconfigurée, qu'elle soit définie comme serveur maître, serveur esclave ou serveur esclave d'un autre serveur maître, Sentinel enverra une commande
CONFIG REWRITE
à l'instance reconfigurée pour garantir que ces configurations seront conservées sur le disque dur.
之前的主从复制,哨兵模式都难以再现扩容,而Redis cluster集群实现了对Redis的水平扩容,即启动N个Redis节点,每个节点又可以有自己的从服务器,将数据均匀分布的存储在这N个结点上,每个节点存储数据的1/N。Redis cluster集群就是一个可以在多个Redis节点之间进行数据共享的设施;Redis cluster集群采用的是无中心化配置,即节点A无法处理,会将请求转发只节点B进行处理。
Redis集群中的键空间被分割为16384个槽位。Redis采用CRC16算法对16384个槽位进行分配,每个主节点负责其中一部分。为了保证高可用,cluster模式也引入了主从复制模式,一个主节点对应一个或多个从节点,当主节点发生宕机时,可进行故障转移,将子节点升级为主节点。
Redis 集群由多个运行在集群模式(cluster mode)下的 Redis 实例组成, 实例的集群模式需要通过配置来开启,以下是一个包含了最少选项的集群配置文件示例:
port 7000 cluster-enabled yes cluster-config-file nodes.conf cluster-node-timeout 5000 appendonly yes
cluster-enabled:打开集群模式
cluster-config-file:节点配置文件名,无须人为修改, 它由 Redis 集群在启动时创建, 并在有需要时自动进行更新
cluster-node-timeout:节点失联时间,当超过此毫秒,集群将自动切换主从节点。
要让集群正常运作至少需要三个主节点,而每个主节点都应该正确配置一个或者多个从节点。
使用redis-cli --cluster create命令将节点合并成一个集群
redis-cli --cluster create --cluster-replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005
--cluster-replicas 1 这个指的是从机的数量,表示我们希望为集群中的每个主节点创建一个从节点。
进入集群模式只需要使用redis-cli -c命令
redis-cli -c -p 7000
无中心话节点,所以进入任意一个端口号的主节点即可。
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!