Home >Database >Redis >How to build a redis-sentinel cluster based on docker

How to build a redis-sentinel cluster based on docker

WBOY
WBOYforward
2023-06-02 10:19:05910browse

1. Overview

redis cluster can achieve high availability and sharding among a group of redis nodes. There will be 1 master and multiple slave nodes in the cluster. When the master node fails, a slave node should be elected as the new master. However, redis itself (including many of its clients) does not have the ability to implement automatic fault discovery and perform active-standby switching, and requires an external monitoring solution to achieve automatic fault recovery.

redis sentinel is the officially recommended high availability solution. It is a monitoring and management tool for redis clusters, which can provide node monitoring, notification, automatic failure recovery and client configuration discovery services.

2. Problems encountered

1. Docker host network

When docker uses the host network, for windows and mac It didn't work (no solution was found), so I finally gave up on windows and used centos to deploy the cluster.

2. Sentinel connection problem without using the host network

When connecting to the sentinel cluster without using the host network, you can specify the master node port, so the connection can be normal. , but when the master node fails, the IP obtained by sentinel from the master node is the virtual IP in the container, causing the cluster to be unable to connect normally.

How to build a redis-sentinel cluster based on docker

3. Building process

1. Directory structure

How to build a redis-sentinel cluster based on docker

How to build a redis-sentinel cluster based on docker

2, sentinel configuration file

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. Use centos to deploy the cluster to test the effect

1. Test to connect to the cluster through sentinel1

How to build a redis-sentinel cluster based on docker

2. Test the data synchronization of the master node and child nodes

How to build a redis-sentinel cluster based on docker

How to build a redis-sentinel cluster based on docker

3. Close the master to view the master-standby switch

How to build a redis-sentinel cluster based on docker

sentinel normal connection

How to build a redis-sentinel cluster based on docker

The master node switched from 16379 to 16381

How to build a redis-sentinel cluster based on docker

The above is the detailed content of How to build a redis-sentinel cluster based on docker. For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:yisu.com. If there is any infringement, please contact admin@php.cn delete