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

Redis主从与哨兵架构详解

目录

主从架构

主从环境搭建

主从复制流程

1. 全量复制

2. 部分复制

主从风暴

哨兵架构

概念

哨兵环境搭建


主从架构

主从环境搭建

1. 复制一份redis.conf文件, 修改下面几行配置

port 6380
pidfile /var/run/redis_6380.pid
logfile "6380.log"
dir /usr/local/redis-data/6380
# 需要注释掉bind或改成0.0.0.0
# bind 127.0.0.1# 配置主从复制
replicaof 192.168.6.128 6379   # 从本机6379的redis实例复制数据,Redis 5.0之前使用slaveof
replica-read-only yes  # 配置从节点只读

2. 启动从节点

src/redis-server redis-6380.conf

3. info命令检查主从是否搭建成功

主从复制流程

1. 全量复制

1. 从节点向主节点发起psync命令, 并建立长连接

2. 主节点收到psync时候, 执行bgsave命令, 生成最新RDB快照

3. 主节点在生成RDB快照期间, 更新数据的命令写入buffer缓存

4. 主节点生成RDB结束后, 发送给从节点, 从节点先清空所有旧数据,再加载RDB

5. 主节点把buffer发送从节点, 从节点执行buffer的写命令

6. 主节点通过socket长连接, 持续把写命令写到从节点,保证主从一致

2. 部分复制

主从风暴

如果从节点太多, 一个主节点复制到多个从节点压力太大,可能造成主从风暴.

解决: 让部分从节点去从节点复制,如下架构

哨兵架构

概念

        sentinel哨兵是特殊的redis服务,不提供读写服务,主要用来监控redis实例节点。

        哨兵架构下client端第一次从哨兵找出redis的主节点,后续就直接访问redis的主节点,不会每次都通过sentinel代理访问redis的主节点,当redis的主节点宕机时,哨兵会从剩余从节点选举新的主节点,并且将新的redis主节点通知给client端.

哨兵环境搭建

1.复制一份sentinel.conf, 修改下面几个配置,注意配置的几个目录要有写入权限

port 26379
daemonize yes
pidfile "/var/run/redis-sentinel-26379.pid"
logfile "26379.log"
dir "/tmp"
# sentinel monitor <master-redis-name> <master-redis-ip> <master-redis-port> <quorum>
# quorum是一个数字,指明当有多少个sentinel认为一个master失效时(值一般为:sentinel总数/2 + 1),master才算真正失效
sentinel monitor mymaster 192.168.6.128 6379 2   # mymaster这个名字随便取,客户端访问时会用到

2、启动sentinel哨兵实例

src/redis-sentinel sentinel-26379.conf

3. 查看sentinel的info信息,验证是否搭建哨兵成功

src/redis-cli -p 26379

相关文章:

  • 函数声明与函数表达式
  • springboot+jsp+java房屋销售出租赁网站的ssm设计与实现7xcvq
  • 深入了解Java8新特性-日期时间API:OffsetDateTime类
  • RocketMQ-快速实战
  • docker-compose;私有镜像仓库harbor搭建;镜像推送到私有仓库harbor
  • 【开源】基于JAVA的大病保险管理系统
  • matlab 混沌动力学行为-分岔图-李雅普指数等
  • 推荐几款python在线学习和电子书网站
  • 带你手搓阻塞队列——自定义实现
  • 【UGUI】Unity教程:实现物品的拖拽功能
  • SpringBoot+mysql+vue实现大学生健康档案管理系统前后端分离
  • MySQL数据库的备份与恢复
  • 腾讯云手动下发指令到设备-用于设备调试
  • 全栈冲刺 之 一天速成MySQL
  • 知乎禁止转载的回答怎么复制做笔记?
  • 分享一款快速APP功能测试工具
  • [Vue CLI 3] 配置解析之 css.extract
  • PHP的Ev教程三(Periodic watcher)
  • Synchronized 关键字使用、底层原理、JDK1.6 之后的底层优化以及 和ReenTrantLock 的对比...
  • TCP拥塞控制
  • 给自己的博客网站加上酷炫的初音未来音乐游戏?
  • 目录与文件属性:编写ls
  • 前端每日实战 2018 年 7 月份项目汇总(共 29 个项目)
  • 手写一个CommonJS打包工具(一)
  • 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
  • 用简单代码看卷积组块发展
  • 主流的CSS水平和垂直居中技术大全
  • 7行Python代码的人脸识别
  • ionic入门之数据绑定显示-1
  • ​MPV,汽车产品里一个特殊品类的进化过程
  • #pragma预处理命令
  • #QT(串口助手-界面)
  • ${ }的特别功能
  • (16)Reactor的测试——响应式Spring的道法术器
  • (C语言)字符分类函数
  • (ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)讲解
  • (草履虫都可以看懂的)PyQt子窗口向主窗口传递参数,主窗口接收子窗口信号、参数。
  • (非本人原创)我们工作到底是为了什么?​——HP大中华区总裁孙振耀退休感言(r4笔记第60天)...
  • (三)centos7案例实战—vmware虚拟机硬盘挂载与卸载
  • (四)JPA - JQPL 实现增删改查
  • (一)80c52学习之旅-起始篇
  • ***检测工具之RKHunter AIDE
  • .[hudsonL@cock.li].mkp勒索加密数据库完美恢复---惜分飞
  • .helper勒索病毒的最新威胁:如何恢复您的数据?
  • .NET 4.0中使用内存映射文件实现进程通讯
  • .net 7 上传文件踩坑
  • .NET core 自定义过滤器 Filter 实现webapi RestFul 统一接口数据返回格式
  • .NET 使用 JustAssembly 比较两个不同版本程序集的 API 变化
  • .net下简单快捷的数值高低位切换
  • .skip() 和 .only() 的使用
  • .vollhavhelp-V-XXXXXXXX勒索病毒的最新威胁:如何恢复您的数据?
  • @Autowired @Resource @Qualifier的区别
  • [ Linux 长征路第五篇 ] make/Makefile Linux项目自动化创建工具
  • [AIGC] Spring Interceptor 拦截器详解
  • [BJDCTF 2020]easy_md5