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.
3. Erstellungsprozess
2. Sentinel-Konfigurationsdatei
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 50002, 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 50003、 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 50003, docker-compose.yml
version: '2' 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.conf4. 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
Sentinel Normale Verbindung
Der Masterknoten wechselt von 16379 auf 16381Das 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!