当前位置: 首页 > news >正文

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:alpinecontainer_name: redis-masterports:- "6379:6379"volumes:- ./redis.conf:/usr/local/etc/redis/redis.conf- ./master-data:/datacommand: ["redis-server", "/usr/local/etc/redis/redis.conf"]networks:- redis-networkredis-slave-1:image: redis:alpinecontainer_name: redis-slave-1ports:- "6380:6379"volumes:- ./slave.conf:/usr/local/etc/redis/redis.conf- ./slave1-data:/datacommand: ["redis-server", "/usr/local/etc/redis/redis.conf"]depends_on:- redis-masternetworks:- redis-networkredis-slave-2:image: redis:alpinecontainer_name: redis-slave-2ports:- "6381:6379"volumes:- ./slave.conf:/usr/local/etc/redis/redis.conf- ./slave2-data:/datacommand: ["redis-server", "/usr/local/etc/redis/redis.conf"]depends_on:- redis-masternetworks:- redis-networkredis-sentinel-1:image: redis:alpinecontainer_name: redis-sentinel-1ports:- "26379:26379"volumes:- ./sentinel.conf:/usr/local/etc/redis/sentinel.confcommand: ["redis-sentinel", "/usr/local/etc/redis/sentinel.conf"]depends_on:- redis-master- redis-slave-1- redis-slave-2networks:- redis-networkredis-sentinel-2:image: redis:alpinecontainer_name: redis-sentinel-2ports:- "26380:26379"volumes:- ./sentinel.conf:/usr/local/etc/redis/sentinel.confcommand: ["redis-sentinel", "/usr/local/etc/redis/sentinel.conf"]depends_on:- redis-master- redis-slave-1- redis-slave-2networks:- redis-networkredis-sentinel-3:image: redis:alpinecontainer_name: redis-sentinel-3ports:- "26381:26379"volumes:- ./sentinel.conf:/usr/local/etc/redis/sentinel.confcommand: ["redis-sentinel", "/usr/local/etc/redis/sentinel.conf"]depends_on:- redis-master- redis-slave-1- redis-slave-2networks:- redis-networknetworks: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 个哨兵节点:监控主节点状态,实现自动故障转移。

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

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

相关文章:

  • Qt基础007(Tcp网络编程)
  • 32单片机——GPIO的工作模式
  • Redis的string类型使用
  • Redis核心技术知识点全集
  • 第五章:5.3 ESP32物联网应用:阿里云IoT平台与腾讯云IoT平台的数据上传与远程控制
  • KafkaSpark
  • 初始SpringBoot
  • Java | 深拷贝与浅拷贝工具类解析和自定义实现
  • 数据预处理:前缀和算法详解
  • Vue3 + TypeScript 实现二维码生成与展示
  • poi生成横向文档以及复杂表头
  • 驱动开发硬核特训 · Day 18:深入理解字符设备驱动与子系统的协作机制(以 i.MX8MP 为例)
  • 欧拉计划 Project Euler54(扑克手牌)题解
  • MySQL运算符
  • stack和queue的学习
  • 【实证分析】ESG发展对企业新质生产力影响的研究—来自中国A股上市企业的经验
  • ROS第十二梯:ros-noetic和Anaconda联合使用
  • Python常用的第三方模块之【pymysql库】操作数据库
  • HarmonyOS 5.0应用开发——MVVM模式的应用
  • CF2103F Maximize Nor
  • 限制再放宽!新版市场准入负面清单缩减到106项
  • 聚焦“共赢蓝色未来” “海洋命运共同体”上海论坛举行
  • 2025年一季度上海市生产总值
  • 安徽临泉一小区交付后多楼层现裂缝,专家组论证称不影响安全
  • 国防部发布、中国军号及多家央媒官博发祝福海报:人民海军76岁生日快乐
  • 教皇方济各逝世,外交部:表示哀悼,愿同梵方共同推动中梵关系持续改善