redis 使用 Docker 部署 简单的Redis 集群(包括哨兵机制)

目录

环境准备

步骤 1:创建 Docker Compose 配置文件

步骤 2:创建配置文件

主节点配置文件 (redis.conf)

从节点配置文件 (slave.conf)

哨兵配置文件 (sentinel.conf)

步骤 3:启动 Redis 集群

步骤 4:验证集群状态

1. 检查主节点状态

2. 检查从节点状态

3. 检查哨兵状态

步骤 5:测试故障转移

步骤 6:清理环境(可选)

总结


这个示例将部署:

  1. 1 个 Redis 主节点
  2. 2 个 Redis 从节点
  3. 3 个 Redis 哨兵节点

环境准备

  1. Docker 和 Docker Compose

    • 确保你的环境中已经安装了 Docker 和 Docker Compose。
    • 如果尚未安装,可以参考 Docker 官方文档 进行安装。
  2. 网络配置

    • 确保 Docker 主机之间的网络可以互通。
    • 确保防火墙规则允许 Docker 容器之间的通信。
    • 创建一个redis-network:docker network create redis-network
    • 查看网络情况:docker network inspect redis-network

步骤 1:创建 Docker Compose 配置文件

创建一个 docker-compose.yml 文件,用于定义 Redis 集群的服务:

version: '3.8'

services:
  redis-master:
    image: redis:alpine
    container_name: redis-master
    ports:
      - "6379:6379"
    volumes:
      - ./redis.conf:/usr/local/etc/redis/redis.conf
      - ./master-data:/data
    command: ["redis-server", "/usr/local/etc/redis/redis.conf"]
    networks:
      - redis-network

  redis-slave-1:
    image: redis:alpine
    container_name: redis-slave-1
    ports:
      - "6380:6379"
    volumes:
      - ./slave.conf:/usr/local/etc/redis/redis.conf
      - ./slave1-data:/data
    command: ["redis-server", "/usr/local/etc/redis/redis.conf"]
    depends_on:
      - redis-master
    networks:
      - redis-network

  redis-slave-2:
    image: redis:alpine
    container_name: redis-slave-2
    ports:
      - "6381:6379"
    volumes:
      - ./slave.conf:/usr/local/etc/redis/redis.conf
      - ./slave2-data:/data
    command: ["redis-server", "/usr/local/etc/redis/redis.conf"]
    depends_on:
      - redis-master
    networks:
      - redis-network

  redis-sentinel-1:
    image: redis:alpine
    container_name: redis-sentinel-1
    ports:
      - "26379:26379"
    volumes:
      - ./sentinel.conf:/usr/local/etc/redis/sentinel.conf
    command: ["redis-sentinel", "/usr/local/etc/redis/sentinel.conf"]
    depends_on:
      - redis-master
      - redis-slave-1
      - redis-slave-2
    networks:
      - redis-network

  redis-sentinel-2:
    image: redis:alpine
    container_name: redis-sentinel-2
    ports:
      - "26380:26379"
    volumes:
      - ./sentinel.conf:/usr/local/etc/redis/sentinel.conf
    command: ["redis-sentinel", "/usr/local/etc/redis/sentinel.conf"]
    depends_on:
      - redis-master
      - redis-slave-1
      - redis-slave-2
    networks:
      - redis-network

  redis-sentinel-3:
    image: redis:alpine
    container_name: redis-sentinel-3
    ports:
      - "26381:26379"
    volumes:
      - ./sentinel.conf:/usr/local/etc/redis/sentinel.conf
    command: ["redis-sentinel", "/usr/local/etc/redis/sentinel.conf"]
    depends_on:
      - redis-master
      - redis-slave-1
      - redis-slave-2
    networks:
      - redis-network

networks:
  redis-network:
    driver: bridge

步骤 2:创建配置文件

主节点配置文件 (redis.conf)
bind 0.0.0.0
port 6379
dir /data
replicaof no one
masterauth <password>  # 设置主节点密码,根据需要修改
requirepass <password>  # 设置Redis访问密码,根据需要修改
从节点配置文件 (slave.conf)
bind 0.0.0.0
port 6379
dir /data
replicaof 192.168.1.100 6379  # 指定主节点的IP和端口
masterauth <password>  # 与主节点密码一致
requirepass <password>  # 与主节点密码一致
哨兵配置文件 (sentinel.conf)
# 端口配置:指定Sentinel监听的端口,默认是26379  
port 26379  

# 守护进程配置:让Sentinel在后台运行  
daemonize yes  

# PID文件配置:指定PID文件的存储路径,方便管理Sentinel进程  
pidfile /var/run/redis-sentinel.pid  

# 监控配置:监控名为mymaster的主节点,IP地址为192.168.1.100(需改为自己的虚拟机的ip地址,ip address找到eth0或ens33),端口为6379,需要至少2个Sentinel同意才能判定主节点下线  
sentinel monitor mymaster 192.168.1.100 6379 2  

# 主节点密码:用于Sentinel连接主节点进行验证,需要与主节点的密码配置一致  
sentinel auth-pass mymaster <password>  

# 下线判断配置:设置Sentinel判断主节点下线的超时时间,单位为毫秒,默认为30000ms(30秒)  
sentinel down-after-milliseconds mymaster 30000  

# 并行同步配置:设置并行同步的从节点数量,值为1表示一次一个节点同步  
sentinel parallel-syncs mymaster 1  

# 故障转移超时配置:设置故障转移的超时时间,单位为毫秒,默认为180000ms(180秒)  
sentinel failover-timeout mymaster 180000  

步骤 3:启动 Redis 集群

docker-compose.yml 所在的目录下,运行以下命令验证docker-compose.yml文件格式是否正确

docker-compose config

格式无误则运行以下命令启动集群:

docker-compose up -d
  • -d 参数表示后台运行。
  • 集群启动后,可以通过 docker ps 查看所有运行的容器。

步骤 4:验证集群状态

1. 检查主节点状态
docker exec -it redis-master redis-cli ping
# 预期输出:PONG
2. 检查从节点状态
docker exec -it redis-slave-1 redis-cli info replication | grep role
# 预期输出:role:slave
3. 检查哨兵状态
docker exec -it redis-sentinel-1 redis-cli -p 26379 sentinel masters
# 预期输出:包含主节点的状态信息

步骤 5:测试故障转移

  1. 停止主节点容器

    docker stop redis-master
    
  2. 观察哨兵日志

    docker logs -f redis-sentinel-1
    
    • 看到哨兵检测到主节点下线并触发故障转移的日志。
  3. 验证新主节点

    docker exec -it redis-slave-1 redis-cli info replication | grep role
    # 预期输出:role:master
    

步骤 6:清理环境(可选)

如果需要清理环境,可以运行以下命令:

docker-compose down -v
  • -v 参数表示删除 volumes,即清理所有数据卷。

总结

通过以上步骤,我们成功使用 Docker 部署了一个 Redis 集群,包含:

  1. 1 个主节点:处理所有写操作。
  2. 2 个从节点:处理读操作,并提供数据冗余。
  3. 3 个哨兵节点:监控主节点状态,实现自动故障转移。

这个集群实现了以下功能:

  • 高可用性:主节点故障时,哨兵自动将从节点提升为主节点。
  • 读写分离:从节点分担读操作,提升系统性能。
  • 自动故障转移:哨兵持续监控主节点状态,确保集群稳定性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

草海桐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值