1. Vorwort
Redis Hochverfügbarkeit verfügt über zwei Modi: Sentinel-Modus
und Cluster-Modus
. Dieser Artikel erstellt einen -Host basierend auf Sentinel-Modus Zwei von drei Sentinels
Redis-Hochverfügbarkeitsdienst. 哨兵模式
和集群模式
,本文基于哨兵模式搭建一主两从三哨兵
Redis高可用服务。
1、目标与收获
一主两从三哨兵
1. Ziele und Vorteile
-
Ein Master, zwei Slaves und drei Sentinels
Der Redis-Dienst kann grundsätzlich die Hochverfügbarkeitsanforderungen kleiner und mittlerer Projekte erfüllen . Durch diesen Artikel werden die folgenden Ziele erreicht:
Planung und Konstruktion des Sentinel-Modus-Dienstes
- Der Sentinel-Modus-Dienst ist zuverlässiger als der eigenständige Versionsdienst und eignet sich für die Lese- und Schreibtrennung, die Menge Die Datenmenge ist nicht groß und erfordert Zuverlässigkeit und Stabilität der Szene.
Client-Integration und Trennung von Lesen und Schreiben
Stellen Sie über das Spring-Framework eine Verbindung zum Sentry-Modus her, um allgemeine Vorgänge in der Produktionsumgebung abzuschließen.
2. Hafenplanung
Hafenplanung ist der erste Schritt zur Vervollständigung dieser Lösung.
2. Einzelmaschinensimulation
Bei der Einzelmaschinensimulation werden Vorgänge auf einer physischen oder virtuellen Maschine simuliert, um den Zwischenprozess der ursprünglichen Lösung so weit wie möglich wiederherzustellen. Sie wird normalerweise beim Lernen verwendet Entwicklungsstadium.
Um den Vorgang zu vereinfachen, trifft der Redis-Dienst die folgenden Konventionen: Die Daten werden nicht auf der Festplatte gespeichert. Die Konfigurationsdateien des Vordergrundknotens verwenden die Standardkonfigurationsdatei als Vorlage.
(1) Dienstplanung
1. Redis-Instanz
Der Dienst weiß eindeutig, welcher Knoten der Masterknoten ist, wenn er zum ersten Mal ausgeführt wird und ein Master-Slave-Wechsel auftritt Es kann nicht angezeigt werden, um welchen Knoten es sich handelt. Der Knoten ist der Masterknoten und muss indirekt über die Befehlszeile abgefragt werden.
|
| Knoten | Host | Port | Rolle
Extra-Konfiguration |
| node01 | 127.0.0.1 | 6380 | Dienst als beim ersten Start
|
| node02 | 127.0 .0.1 | 6381 | Diente als Sklave, als er zum ersten Mal gestartet wurde.
Nachbildung von 127.0.0.1 6380 Zum ersten Mal gestartet | Replik von 127.0.0.1 6380 |
|
Zusätzliche Konfiguration bezieht sich auf die neue Konfiguration in der Knotenkonfigurationsdatei, wenn die Redis-Dienstinstanz zum ersten Mal gestartet wird. |
2. Sentinel-Dienst |
Es gibt keine Master-Slave-Unterscheidung zwischen Sentinel-Dienstknoten und alle Knoten sind gleichberechtigt. Wenn im Hauptdienst eine Ausnahme auftritt, löst der Sentinel-Dienst die Abstimmungsstrategie aus und wählt Kandidaten aus den Slave-Knoten der Redis-Instanz als neuen Hauptdienst aus.
Node
Host
Port
Zusätzliche Konfiguration |
| node01 | 127.0.0.1 | 26380
Sentinel Monitor Mymaster. 127 .0.0. 1 6380 2 |
| node02 | 127.0. 0.1 | 26381
Sentinel Monitor Mymaster 127.0.0.1 6380 2 |
|
(2) Dienstkonfiguration
1. Die anfängliche Konfigurationsdatei des Redis-Instanzknotens
verwendet die Standardkonfigurationsdatei als Vorlage.
Nachdem Knoten01 und Knoten02 die Konfigurationsdatei initialisiert haben, wird die Master-Slave-Beziehung zwischen den Knoten angezeigt und die folgende Konfiguration hinzugefügt:
replicaof 127.0.0.1 6380
Nach dem Login kopieren
2. Die anfängliche Konfigurationsdatei des Knotens verwendet die Standardkonfigurationsdatei als Vorlage.
Fügen Sie nach der Initialisierung der Konfigurationsdateien von Knoten01, Knoten02 und Knoten03 die folgende Konfiguration hinzu:
sentinel monitor mymaster 127.0.0.1 6381 2
Nach dem Login kopieren
(3) Dienstverwaltung
Beim Testen oder Lernen wird empfohlen, den Vordergrundprozessverwaltungsdienst zu verwenden, um die Simulation einzelner Punkte zu erleichtern von Fehlern, Anzeigen von Protokollen und Beobachten der Master-Slave-Umschaltung.
Es wird empfohlen, den Supervisor-Verwaltungsdienst unter Produktionsbedingungen zu verwenden, der nicht nur einfach zu verwalten ist, sondern den Dienst auch nach einer abnormalen Beendigung automatisch neu starten kann. In Hochverfügbarkeitsszenarien werden drei physische Maschinen verwendet.
1 Redis-Instanz Mit der Produktion müssen neue Funktionen hinzugefügt werden.
(1) Grundlegende Integration
Der Inhalt der Basisintegration besteht darin, mithilfe eines Java-Clients eine Verbindung zum hochverfügbaren Redis-Dienst im Sentinel-Modus herzustellen, um die Anforderungen für den normalen Betrieb von Einzelknoten-Fehlerdiensten zu erfüllen.
1. Globale Konfigurationsdatei
Die der globalen Konfigurationsdatei hinzugefügten Konfigurationsinformationen sind: Der Parameter master
ist der Name des Sentinel-Dienstes, hier ist der Standardwert; > Parameter ist die Sentinel-Service-Liste (nicht Redis-Instanz-Service-Liste); der database
-Parameter ist die Datenbank.
/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
Nach dem Login kopieren
2. Die integrierte Konfiguration ist in das SpringBoot-System integriert. Der Kern besteht darin, eine LettuceConnectionFactory
-Verbindungsfabrik zu erstellen, die problemlos in andere Frameworks unter Spring vererbt werden kann System.
/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
Nach dem Login kopieren
(2) Lese- und Schreibtrennung
Die Basisintegration implementiert nur den Prozess des hochverfügbaren Redis-Dienstes. In der Produktionsumgebung müssen noch andere Konfigurationen hinzugefügt werden: Ändern Sie die Seriennummer der benutzerdefinierten Verbindungsdatenbank Poolkonfiguration; Lese- und Schreibtrennung.
Unter der Voraussetzung einer hohen Verfügbarkeit wird die Funktion der Trennung von Lesen und Schreiben abgeleitet. Die Hauptbibliothek schließt die Leseanforderung ab (die Slave-Bibliothek lässt kein Schreiben zu). 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
Nach dem Login kopieren
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);
}
}
Nach dem Login kopieren
Das obige ist der detaillierte Inhalt vonBeispielanalyse der Hochverfügbarkeit im Redis-Sentry-Modus. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!