Docker环境搭建高可用Redis-Sentinel集群

环境介绍

在单机docker环境下搭建 “3哨兵+1主2从”Redis Sentinel 集群。

准备工作

  • 一台装有docker环境的 Linux/Wins/macOS 设备
  • 了解基础的docker命令
  • 了解docker-compose的使用

正式开始

拉取redis镜像

docker pull redis:alpine

编写Redis集群配置

  1. 编写主从节点配置:保持为默认配置即可

  2. 编写哨兵配置:其他保持默认配置即可,只需添加一行以下配置:

# 设置主节点名字、主节点的 IP 地址和端口号以及 quorum 值。
sentinel monitor <master-name> <ip> <redis-port> <quorum>

至此,Redis集群就算配置好了。接下来,开始编写 docker-compose 文件来编排容器

编排容器

以下给出一个笔者搭建的一个 docker-compose 文件示例

# Docker Compose 文件格式版本
version: '3.7'

# 定义一组服务
services:

# Redis-1 实例
redis-1:
# 使用 Redis 镜像 (轻量级)
image: redis:alpine
# 容器名称
container_name: redis-1
# 启动命令,加载配置文件启动 Redis 服务器
command: redis-server /config/redis-1.conf
# 映射主机端口到容器内部端口,以便外部访问
ports:
- 6379:6379
# 挂载本地目录到容器内的卷,持久化数据和日志
volumes:
- ./data/redis-1:/data # Redis 数据持久化目录
- ./logs/redis-1.log:/var/log/redis.log # Redis 日志文件路径
- ./config:/config # Redis 配置文件目录
# 将服务加入指定网络
networks:
- web

# Redis-2 实例
redis-2:
image: redis:alpine
container_name: redis-2
command: redis-server /config/redis-2.conf
ports:
- 6380:6379
volumes:
- ./data/redis-2:/data
- ./config:/config
- ./logs/redis-2.log:/var/log/redis.log
networks:
- web
# 设置依赖关系,确保 redis-1 先启动
depends_on:
- redis-1

# Redis-3 实例
redis-3:
image: redis:alpine
container_name: redis-3
command: redis-server /config/redis-3.conf
ports:
- 6381:6379
volumes:
- ./logs/redis-3.log:/var/log/redis.log
- ./data/redis-3:/data
- ./config:/config
networks:
- web
depends_on:
- redis-1

# Redis Sentinel-1 实例
sentinel-1:
image: redis:alpine
container_name: sentinel-1
# 使用 sentinel 模式启动 Redis,加载配置文件
command: redis-sentinel /config/sentinel-1.conf
ports:
- 26379:26379
volumes:
- ./data/sentinel-1:/data
- ./logs/sentinel-1.log:/var/log/sentinel.log
- ./config:/config
networks:
- web

# Redis Sentinel-2 实例
sentinel-2:
image: redis:alpine
container_name: sentinel-2
command: redis-sentinel /config/sentinel-2.conf
ports:
- 26380:26379
volumes:
- ./data/sentinel-2:/data
- ./config:/config
- ./logs/sentinel-2.log:/var/log/sentinel.log
networks:
- web
depends_on:
- redis-1

# Redis Sentinel-3 实例
sentinel-3:
image: redis:alpine
container_name: sentinel-3
command: redis-sentinel /config/sentinel-3.conf
ports:
- 26381:26379
volumes:
- ./logs/sentinel-3.log:/var/log/sentinel.log
- ./data/sentinel-3:/data
- ./config:/config
networks:
- web
depends_on:
- redis-1

# 定义一个名为 "web" 的外部网络
networks:
web:
# 已存在的网络名称
name: "common.network"
# 标记该网络为外部已存在的网络,而非由Docker Compose创建
external: true

运行服务

进入到 docker-compose 文件所在目录,执行:

# 用于redis数据及日志文件持久化
mkdir logs data

# 开始启动服务之前,创建一个外部网络,将所有节点放入同一个网络
docker network create web

# 执行服务
docker-compose up -d

至此,大功告成~