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

【Redis】主从复制局限性与哨兵概念、Docker 部署教程

哨兵

Redis的主从复制模式下,一旦这个主节点不能提供服务,就需要人工进行主从切换,这是非常麻烦的。后续如果要解决单机存储容量限制,需要继续看集群

主从复制局限性

主从复制能够很好地平衡数据一致性问题,但是当遇到故障时,还是会遗留一些问题:

  1. 主节点发生故障时,需要手动切换主节点,非常复杂。
  2. 主节点能够将读压力分担到从节点中,但是主节点仍然承担写压力,受到单机限制。

来看第一个问题,如果出现故障了,大致流程是:

  1. 检查主节点是否健康,是否还能工作或抢救。
  2. 如果短时间不能排查问题,则需要手动挑一个从节点设置为新的主节点。
  3. 把选好的从节点通过slaveof no one升级成主节点。
  4. 再将原来的从节点通过slaveof 主节点的 ip port连上新的主节点。
  5. 修改客户端配置,让客户端能够顺利连接到另一个主节点。

这步骤看着都头疼…于是 Redis 就引入了哨兵来解决这个问题。通常哨兵也不会只设置一个,而会部署一个哨兵集群,防止哨兵挂了或单个哨兵误判。

实现原理

正常运行状态时,哨兵集群中的每个节点都是单独的redis-sentinel进程,会监控现有的redis-masterslave。它们的监控是通过 TCP 长连接定期发送心跳包。

不过,一个哨兵节点发现主节点挂了还不够,需要多个哨兵节点共同认同这件事,才会进行接下来的操作,主要是为了防止误判。

当多数哨兵都认为主节点挂了,就会接着往下操作:

  • 哨兵节点中会先挑选出一个 leader,由这个 leader 负责从现有从节点中挑选一个作为新的主节点。leader 会通过投票方式选出,每个哨兵都有一票,票数多的成为 leader。
  • 挑选出从节点后,哨兵会控制这个节点执行slaveof no one,并控制其他节点修改slaveof到新的主节点上。
  • 然后自动通知客户端。

Docker 部署

这里使用 Docker 做多个 Redis 的部署练习,结构是一个主节点、两个从节点、一个哨兵集群(三个 sentinel)。

主从节点配置

在云服务器上运行 Docker,首先要安装 Docker:

aptinstalldocker-compose

如果本身有 Redis 进程,可以先停掉之前的服务:

serviceredis-server stop

然后使用 Docker 拉取 Redis 镜像:

dockerpull redis:5.0.9

首次拉取可能会出现拉取超时,这是由于国内网络环境导致的。要么给云服务器加代理,要么配置镜像源。我这里配置了镜像源,只需要逐条执行即可:

sudomkdir-p/etc/dockersudotee/etc/docker/daemon.json>/dev/null<<'EOF' { "registry-mirrors": [ "https://docker.1ms.run", "https://hub-mirror.c.163.com" ] } EOFsudosystemctl daemon-reloadsudosystemctl restartdockersudodockerpull redis:5.0.9

最后使用下面的命令查看镜像是否拉取成功:

dockerimages

我们需要创建两个文件夹。建议在主目录中建一个redis文件夹,在里面再分成redis-dataredis-sentinel文件夹:

mkdirrediscdredismkdirredis-datamkdirredis-sentinel

最终你在redis目录中会有这两个文件夹:

进入redis-data

cdredis-data

新建配置文件:

vimdocker-compose.yml

注意这个文件名称必须是docker-compose.yml,然后把这段配置粘贴进去:

version:'3.7'services:master:image:'redis:5.0.9'container_name:redis-masterrestart:alwayscommand:redis-server--appendonly yesports:-6379:6379slave1:image:'redis:5.0.9'container_name:redis-slave1restart:alwayscommand:redis-server--appendonly yes--slaveof redis-master 6379ports:-6380:6379slave2:image:'redis:5.0.9'container_name:redis-slave2restart:alwayscommand:redis-server--appendonly yes--slaveof redis-master 6379ports:-6381:6379

最后启动:

docker-composeup-d

哨兵配置

进入哨兵文件夹:

cdredis-sentinel

同样创建配置文件:

vimdocker-compose.yml

配置内容如下:

version:'3.7'services:sentinel1:image:'redis:5.0.9'container_name:redis-sentinel-1restart:alwayscommand:redis-sentinel /etc/redis/sentinel.confvolumes:-./sentinel1.conf:/etc/redis/sentinel.confports:-26379:26379sentinel2:image:'redis:5.0.9'container_name:redis-sentinel-2restart:alwayscommand:redis-sentinel /etc/redis/sentinel.confvolumes:-./sentinel2.conf:/etc/redis/sentinel.confports:-26380:26379sentinel3:image:'redis:5.0.9'container_name:redis-sentinel-3restart:alwayscommand:redis-sentinel /etc/redis/sentinel.confvolumes:-./sentinel3.conf:/etc/redis/sentinel.confports:-26381:26379# 用于解析处于不同局域网的主节点。# 主从节点使用另一个 docker-compose 配置,这个 Docker 网络内无法直接解析对应域名。# 可以用 docker network ls 列出 Docker 中的局域网。networks:default:external:name:redis-data_default

最后执行:

docker-composeup-d

-d的意思是在后台运行。执行到这里就部署完成了。

如果想查看 Redis 日志,可以使用:

docker-composelogs

这是各个哨兵节点的日志:

也能查看主从节点日志,只需切换到对应文件夹即可:

http://www.jsqmd.com/news/929728/

相关文章:

  • Dynamic Workflows 深度解析:Claude Code 为什么把多 Agent 编排写进可执行代码
  • AI幽默生成:从模式模仿到认知理解的NLP技术挑战
  • 【MATLAB】数字调制解调系统性能仿真与分析
  • 暗黑破坏神2存档编辑器终极指南:5分钟实现角色自由定制,告别复杂十六进制编辑
  • 淮安市区哪家龙虾店好?三步选店兼顾性价比 - 资讯快报
  • IndexFileDeleter
  • AI作为课堂“坏学生”:教育融合中的挑战与教学策略
  • TuxGuitar终极指南:免费开源吉他谱编辑软件从入门到精通
  • 基于MH-M18模块的蓝牙音频接收器DIY:从原理图到PCB的完整实践
  • 秀场即主场!爱玛遛玛大赏,以一场年度时尚大秀,锁定两轮出行时尚话语权!
  • 5分钟快速上手:用ImageToSTL将图片变成立体3D模型的完整实用指南
  • Hyper-V导入VHDX创建虚拟机:从文件准备到性能调优完整指南
  • Sora 2动作捕捉模拟的“黑箱”被拆解了:3大隐式运动先验+2类时空一致性损失函数详解
  • Tabee技术架构深度解析:现代浏览器标签管理系统的设计哲学与实践指南
  • 2026 年南京 GEO 优化公司深度测评:AI 搜索时代本土服务商实力与选型参考 - 小艾信息发布
  • 从“就近买网”到“跨省选厂家”:边坡防护采购逻辑的重构 - 资讯快报
  • 终极Chrome标签管理指南:Tabee扩展让浏览器标签井井有条
  • 电子-光子AI系统:突破算力瓶颈的可持续计算方案
  • 【Redis】事务与Lua脚本Day7(2026年)
  • Arduino实战手册:30+组件接线与代码详解,从RGB LED到MPU6050
  • 2026年宁夏钢结构源头工厂全景报告:银川厂房建设与冷库工程供应商综合挑选 - 优质企业观察收录
  • 基于Unity与Arduino的VR头部触觉反馈系统DIY指南
  • 数字分压器怎么选?靠谱品牌与联系方式一站式汇总 - 品牌推荐大师
  • 从‘韩信点兵’到‘中国剩余定理’:一个趣味算法背后的数学原理与Python代码实现
  • Windows桌面太混乱?免费开源的NoFences帮你打造整洁高效工作空间
  • 如何彻底解决Windows Defender干扰:开源工具defender-control深度技术指南
  • 基于Arduino Uno的温湿度数据记录器:从传感器采集到SD卡存储
  • K7杀毒软件订阅迁移指南:从设备解绑到新机激活全流程
  • 2026成都中专学校深度盘点:从升学率到实训室,哪家值得就读? - 深度智识库
  • 基于模块化电子套件的彩虹电路项目:从PWM原理到RGB混色实践