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 trois
Service 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
La 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.
|
| Node | Host | Port | Role
Configuration supplémentaire |
| node01 | 127.0.0.1 | 6380 | Service en tant que maître lors du premier démarrage
|
| node02 | 127.0 .0.1 | 6381 | A servi d'esclave au premier démarrage
replicaof 127.0.0.1 6380 |
| node03 | 127.0.0.1 | 6382 | A servi d'esclave au démarrage la première fois
ré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 Sentinel
Il 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.
|
| Node | Hôte | Port
Configuration supplémentaire |
| node01 | 127.0.0.1 | 26380
moniteur sentinelle mymaster 127. 0.0.1 6380 2 |
| noeud02 | 127.0. 0.1 | 26381
moniteur 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
Copier après la connexion
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
Copier après la connexion
(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
Copier après la connexion
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
Copier après la connexion
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</code ; > Le paramètre est la liste des services sentinelles (et non la liste des services de l'instance Redis) ; le paramètre <code>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
Copier après la connexion
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);
}
}
Copier après la connexion
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);
}
Copier après la connexion
(2) Séparation en lecture et en écritureL'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!