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

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 个哨兵节点:监控主节点状态,实现自动故障转移。

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

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

相关文章:

  • 修电脑之电脑没有声音
  • 武装Burp Suite工具:xia SQL自动化测试_插件
  • date-picker组件的shortcuts为什么不能配置在vue的data的return中
  • 小红书文字配图平替工具
  • Vue3-原始值的响应式方案ref
  • 实时数仓体系概览与架构演进
  • python实战项目64:selenium采集软科中国大学排名数据
  • Django DRF实现用户数据权限控制
  • 服务器数据恢复—双循环RAID5数据恢复揭秘
  • 2025.04.23华为机考第二题-200分
  • 第七节:进阶特性高频题-Vue3的ref与reactive选择策略
  • 数据结构初阶:二叉树(四)
  • CSS3 基础(边框效果)
  • 从 Vue 到 React:React.memo + useCallback 组合技
  • PCB规则
  • 【android bluetooth 协议分析 11】【AVDTP详解 2】【avdtp 初始化阶段主要回调关系梳理】
  • 基于FPGA 和DSP 的高性能6U VPX 采集处理板
  • 深入解析C++ STL Queue:先进先出的数据结构
  • Android Gradle Plugin (AGP) 和 Gradle 的關係
  • 【Qwen2.5-VL 踩坑记录】本地 + 海外账号和国内账号的 API 调用区别(阿里云百炼平台)
  • 学习记录:DAY16
  • 2.RabbitMQ - 入门
  • 从入门到精通:CMakeLists.txt 完全指南
  • AI语音助手自定义角色百度大模型 【全新AI开发套件掌上AI+4w字教程+零基础上手】
  • 永磁同步电机控制算法-反馈线性化控制
  • 官方不存在tomcat10-maven-plugin插件
  • 【模板匹配】图像处理(OpenCV)-part10
  • 【金仓数据库征文】从Oracle到KingbaseES的语法兼容与迁移
  • 常用第三方库精讲:cached_network_image图片加载优化
  • Chrome/Edge浏览器使用多屏完美解决方案,http部署使用https部署的功能