Maison >base de données >Redis >Exemple d'analyse de la haute disponibilité en mode sentinelle Redis

Exemple d'analyse de la haute disponibilité en mode sentinelle Redis

WBOY
WBOYavant
2023-06-02 22:38:04914parcourir

    1. Préface

    La haute disponibilité de Redis a deux modes : le Mode Sentinelle et le Mode Cluster. Cet article construit un hôte basé sur le. Mode Sentinelle Deux sentinelles sur troisService haute disponibilité Redis. 哨兵模式集群模式,本文基于哨兵模式搭建一主两从三哨兵Redis高可用服务。

    1、目标与收获

    一主两从三哨兵

    1. Objectifs et gains
    • Un maître, deux esclaves et trois sentinelles Le service Redis peut essentiellement répondre aux exigences de haute disponibilité des projets de petite et moyenne taille. cas. Grâce à cet article, les objectifs suivants seront atteints :

    • Planification et construction du service en mode Sentinelle

    • Le service en mode Sentinelle est plus fiable que le service en version autonome, adapté à la séparation en lecture et en écriture, le montant Les données ne sont pas volumineuses et nécessitent une scène de fiabilité et de stabilité.

    • Intégration client et séparation de la lecture et de l'écriture

    Connectez-vous au mode sentinelle via le framework Spring pour effectuer des opérations courantes dans l'environnement de production.

    2. Planification portuaire

    Exemple danalyse de la haute disponibilité en mode sentinelle RedisLa planification portuaire est la première étape pour compléter cette solution.

    2. Simulation sur une seule machine

    La simulation sur une seule machine consiste à simuler des opérations sur une machine physique ou virtuelle pour restaurer autant que possible le processus intermédiaire de la solution d'origine. Elle est généralement utilisée dans l'apprentissage ou. stade de développement.

    Afin de simplifier l'opération, le service Redis établit les conventions suivantes : les données ne sont pas conservées sur le disque ; les instances de service s'exécutent en tant que processus de premier plan ; les fichiers de configuration des nœuds utilisent le fichier de configuration par défaut comme modèle ; il n'y a pas de vérification de mot de passe.
    (1) Planification du service

    1. Instance Redis Le service sait clairement quel nœud est le nœud maître lorsqu'il est démarré pour la première fois Lorsque le service fonctionne pendant une longue période et qu'un commutateur maître-esclave se produit. , il ne peut pas être affiché pour savoir de quel nœud il s'agit. Le nœud est le nœud maître et doit être interrogé indirectement via la ligne de commande. NodeHostPortRoleConfiguration supplémentairenode01127.0.0.16380Service en tant que maître lors du premier démarrage node02127.0 .0.16381A servi d'esclave au premier démarragereplicaof 127.0.0.1 6380node03127.0.0.16382A servi d'esclave au démarrage la première foisréplique de 127.0.0.1 6380

    La configuration supplémentaire fait référence à la nouvelle configuration dans le fichier de configuration du nœud lorsque l'instance de service Redis est démarrée pour la première fois.

    2. Service SentinelIl n'y a pas de distinction maître-esclave entre les nœuds du service Sentinel et tous les nœuds sont sur un pied d'égalité. Lorsqu'une exception se produit dans le service principal, le service sentinelle déclenchera la stratégie de vote et sélectionnera les candidats parmi les nœuds esclaves de l'instance Redis en tant que nouveau service principal. NodeHôtePortConfiguration supplémentairenode01127.0.0.126380moniteur sentinelle mymaster 127. 0.0.1 6380 2noeud02127.0. 0.126381moniteur sentinelle mymaster 127.0.0.1 6380 2

    (2) Configuration du service

    1. Le fichier de configuration initial du nœud de l'instance Redis

    utilise le fichier de configuration par défaut comme modèle.

    Après que node01 et node02 ont initialisé le fichier de configuration, la relation maître-esclave entre les nœuds est affichée et la configuration suivante est ajoutée :

    replicaof 127.0.0.1 6380
    2 Service Sentinel

    Le fichier de configuration initial du nœud utilise le fichier de configuration par défaut comme fichier de configuration. modèle.

    Après avoir initialisé les fichiers de configuration de node01, node02 et node03, ajoutez la configuration suivante :

    sentinel monitor mymaster 127.0.0.1 6381 2

    (3) Gestion des services

    Lors des tests ou de l'apprentissage, il est recommandé d'utiliser le service de gestion des processus de premier plan pour faciliter la simulation de points uniques d'échec, l'affichage des journaux et l'observation de la commutation maître-esclave.

    Il est recommandé d'utiliser le service de gestion du superviseur dans des conditions de production, qui est non seulement facile à gérer mais peut également redémarrer automatiquement le service après une interruption anormale. Trois machines physiques sont utilisées dans des scénarios de haute disponibilité.

    1. Instance Redis
    /usr/local/redis/bin/redis-server /usr/local/redis/conf/ms/redis80.conf --port 6380 --save '' --daemonize no 
    /usr/local/redis/bin/redis-server /usr/local/redis/conf/ms/redis81.conf --port 6381 --save '' --daemonize no
    /usr/local/redis/bin/redis-server /usr/local/redis/conf/ms/redis82.conf --port 6382 --save '' --daemonize no
    2. Service Sentinel
    /usr/local/redis/bin/redis-sentinel /usr/local/redis/conf/ms/sentinel280.conf --port 26380 --daemonize no
    /usr/local/redis/bin/redis-sentinel /usr/local/redis/conf/ms/sentinel281.conf --port 26381 --daemonize no
    /usr/local/redis/bin/redis-sentinel /usr/local/redis/conf/ms/sentinel282.conf --port 26382 --daemonize no

    3. Intégration client

    L'intégration basée sur SpringBoot est divisée en deux étapes : l'une consiste à terminer l'intégration de base ; avec la production De nouvelles fonctionnalités doivent être ajoutées.

    (1) Intégration de base

    Le contenu de l'intégration de base est d'utiliser un client Java pour se connecter au service Redis en mode Sentinel à haute disponibilité afin de répondre aux exigences de fonctionnement normal des services de défaillance à nœud unique.

    1. Fichier de configuration global

    Les informations de configuration ajoutées au fichier de configuration globale sont : le paramètre master est le nom du service sentinelle, voici la valeur par défaut des nodes ; > Le paramètre est la liste des services sentinelles (et non la liste des services de l'instance Redis) ; le paramètre database est la base de données. master参数为哨兵服务名,此处为默认值;nodes参数为哨兵服务列表(不是Redis实例服务列表);database参数为数据库。

    spring:
      redis:
        database: 0
        sentinel:
          nodes: 192.168.181.171:26380,192.168.181.171:26381,192.168.181.171:26382
          master: mymaster
    2、集成配置

    集成进SpringBoot体系,最核心的是创建LettuceConnectionFactory

    @Configuration
    public class RedisSentinelConfig {
        @Autowired
        private RedisProperties redisProperties;
        
        @Bean
        public RedisConnectionFactory lettuceConnectionFactory() {
            RedisProperties.Sentinel sentinel = redisProperties.getSentinel();
            HashSet<String> nodes = new HashSet<>(sentinel.getNodes());
            String master = sentinel.getMaster();
            RedisSentinelConfiguration config = new RedisSentinelConfiguration(master, nodes);
            config.setDatabase(redisProperties.getDatabase());
            return new LettuceConnectionFactory(config);
        }
    }

    2. La configuration intégrée

    est intégrée au système SpringBoot. Le cœur est de créer une fabrique de connexions LettuceConnectionFactory, elle peut être héritée en douceur dans d'autres frameworks sous Spring. système.

    @Bean
    public LettuceClientConfigurationBuilderCustomizer lettuceClientCustomizer() {
        // 配置读写分离
        return builder -> builder.readFrom(ReadFrom.REPLICA);
    }

    (2) Séparation en lecture et en écriture

    L'intégration de base ne réalise que le processus de service Redis à haute disponibilité. Dans l'environnement de production, d'autres configurations doivent encore être ajoutées : modifier le numéro de série de la base de données de connexion personnalisée ; configuration du pool de connexions ; séparation en lecture et en écriture. 🎜🎜Dans le principe de haute disponibilité, la fonctionnalité de séparation de la lecture et de l'écriture est dérivée. La bibliothèque principale termine la demande d'écriture ; la bibliothèque esclave termine la demande de lecture (la bibliothèque esclave n'autorise pas l'écriture). 🎜rrreee

    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