Heim >Datenbank >Redis >So erstellen Sie einen Redis-Sentinel-Cluster basierend auf Docker

So erstellen Sie einen Redis-Sentinel-Cluster basierend auf Docker

WBOY
WBOYnach vorne
2023-06-02 10:19:05910Durchsuche

1. Übersicht

Redis-Cluster können eine hohe Verfügbarkeit und Sharding zwischen einer Gruppe von Redis-Knoten erreichen. Im Cluster gibt es 1 Master- und mehrere Slave-Knoten. Wenn der Master-Knoten ausfällt, sollte ein Slave-Knoten zum neuen Master gewählt werden. Redis selbst (einschließlich vieler seiner Clients) ist jedoch nicht in der Lage, eine automatische Fehlererkennung zu implementieren und eine Aktiv-Standby-Umschaltung durchzuführen, und erfordert eine externe Überwachungslösung, um eine automatische Fehlerbehebung zu erreichen.

redis Sentinel ist die offiziell empfohlene Hochverfügbarkeitslösung. Es handelt sich um ein Überwachungs- und Verwaltungstool für Redis-Cluster, das Knotenüberwachung, Benachrichtigung, automatische Fehlerwiederherstellung und Client-Konfigurationserkennungsdienste bereitstellen kann.

2. Es sind Probleme aufgetreten

1. Docker-Hostnetzwerk

Wenn Docker das Hostnetzwerk verwendet, funktioniert es nicht für Windows und Mac (keine Lösung gefunden) und hat schließlich Windows aufgegeben und Centos verwendet Stellen Sie den Cluster bereit.

2. Sentinel-Verbindungsproblem ohne Verwendung des Host-Netzwerks

Beim Herstellen einer Verbindung zum Sentinel-Cluster ohne Verwendung des Host-Netzwerks können Sie den Master-Knoten-Port angeben, sodass die Verbindung normal sein kann , Sentinel erhält es vom Masterknoten. Die erhaltene IP ist die virtuelle IP im Container, was dazu führt, dass der Cluster keine normale Verbindung herstellen kann.

So erstellen Sie einen Redis-Sentinel-Cluster basierend auf Docker

3. Erstellungsprozess

So erstellen Sie einen Redis-Sentinel-Cluster basierend auf Docker

2. Sentinel-Konfigurationsdatei So erstellen Sie einen Redis-Sentinel-Cluster basierend auf Docker

1, sentinel1.conf

#端口号
port 26379
dir /tmp
# mymaster:自定义集群名,2:投票数量必须2个sentinel才能判断主节点是否失败
sentinel monitor mymaster <ip> <port> 2
# 指的是超过5000秒,且没有回复,则判定主节点不可达
sentinel down-after-milliseconds mymaster 5000
# 表示在故障转移的时候最多有numslaves在同步更新新的master
sentinel parallel-syncs mymaster 1
# 故障转移超时时间
sentinel failover-timeout mymaster 5000

2, sentinel2.conf

#端口号
port 26380
dir /tmp
# mymaster:自定义集群名,2:投票数量必须2个sentinel才能判断主节点是否失败
sentinel monitor mymaster <ip> <port> 2
# 指的是超过5000秒,且没有回复,则判定主节点不可达
sentinel down-after-milliseconds mymaster 5000
# 表示在故障转移的时候最多有numslaves在同步更新新的master
sentinel parallel-syncs mymaster 1
# 故障转移超时时间
sentinel failover-timeout mymaster 5000

3、 sentinel3.conf

#端口号
port 26381
dir /tmp
# mymaster:自定义集群名,2:投票数量必须2个sentinel才能判断主节点是否失败
sentinel monitor mymaster <ip> <port> 2
# 指的是超过5000秒,且没有回复,则判定主节点不可达
sentinel down-after-milliseconds mymaster 5000
# 表示在故障转移的时候最多有numslaves在同步更新新的master
sentinel parallel-syncs mymaster 1
# 故障转移超时时间
sentinel failover-timeout mymaster 5000

3, docker-compose.yml

version: &#39;2&#39;
services:
 master:
 image: redis:4.0
 restart: always
 container_name: redis-master
 #使用主机网络
 network_mode: "host"
 command: redis-server --port 16379 
 
 slave1:
 image: redis:4.0
 restart: always
 container_name: redis-slave-1
 network_mode: "host"
 # 指定端口并指定master ip 端口
 command: redis-server --port 16380 --slaveof <master ip> 16379
 
 slave2:
 image: redis:4.0
 restart: always
 container_name: redis-slave-2
 network_mode: "host" 
 command: redis-server --port 16381 --slaveof <master ip> 16379
 
 sentinel1:
 image: redis:4.0
 restart: always
 container_name: redis-sentinel-1
 network_mode: "host"
 # 指定sentinel文件位置
 command: redis-sentinel /usr/local/etc/redis/sentinel.conf
 # 使用数据卷映射文件到指定sentinel位置
 volumes:
  - ./sentinel/sentinel1.conf:/usr/local/etc/redis/sentinel.conf
 
 sentinel2:
 image: redis:4.0
 restart: always
 container_name: redis-sentinel-2
 network_mode: "host" 
 command: redis-sentinel /usr/local/etc/redis/sentinel.conf
 volumes:
  - ./sentinel/sentinel2.conf:/usr/local/etc/redis/sentinel.conf
 
 sentinel3:
 image: redis:4.0
 restart: always
 container_name: redis-sentinel-3
 network_mode: "host" 
 command: redis-sentinel /usr/local/etc/redis/sentinel.conf
 volumes:
  - ./sentinel/sentinel3.conf:/usr/local/etc/redis/sentinel.conf

4. Verwenden Sie Centos, um den Cluster bereitzustellen und den Effekt zu testen. Testen Sie die Clusterverbindung über sentinel1. Testen Sie die Datensynchronisierung des Masterknotens und der untergeordneten Knoten


3. Schließen Sie den Master, um die aktive und Standby-Umschaltung anzuzeigen So erstellen Sie einen Redis-Sentinel-Cluster basierend auf Docker

Sentinel Normale Verbindung So erstellen Sie einen Redis-Sentinel-Cluster basierend auf Docker

So erstellen Sie einen Redis-Sentinel-Cluster basierend auf Docker

Der Masterknoten wechselt von 16379 auf 16381

So erstellen Sie einen Redis-Sentinel-Cluster basierend auf Docker

Das obige ist der detaillierte Inhalt vonSo erstellen Sie einen Redis-Sentinel-Cluster basierend auf Docker. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen