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

Redis主从复制(replication)

文章目录

  • 是什么
  • 作用
  • 使用
  • 案例实操
  • 主从复制原理和工作流程
    • slave启动,同步初请
    • 首次连接,全量复制
    • 心跳持续,保持通信
    • 进入平稳,增量复制
    • 从机下线,重连续传
  • 复制的缺点


是什么

  • 主从复制,master以写为主,slave以读为主
  • 当master数据发生变化的时候,自动将新的数据异步同步到其他slave数据库

作用

  • 读写分离
  • 容灾恢复
  • 数据备份
  • 水平扩容支撑高并发

使用

  • 配置从库不配主库

  • 权限细节
    master如果配置了requirepass参数,需要密码登录
    那么slave就要配置masterauth来设置校验密码,否则的话主机master会拒绝访问
    在这里插入图片描述

  • 基本操作命令

info replication:可以查看复制节点的主从关系和配置信息

replicaof 主库ip 主库端口:一般写入redis.conf中

slaveof 主库ip 主库端口:
每次与主机断开之后,都需要重新连接,除非配置进了redis.conf文件
在运行期间修改slave节点的信息,如果该数据库已经是某个主数据库的从库,那么会停止和原主库的同步关系,转而和新的主库进行同步

slaveof no one
使当前数据库停止与其他数据库的同步,转成主数据库

案例实操

架构设计:
在这里插入图片描述
主机配置:

  1. 开启daemonize yes
    在这里插入图片描述

  2. 注释掉bind 127.0.0.1
    在这里插入图片描述

  3. protected-mode no
    在这里插入图片描述

  4. 指定端口
    在这里插入图片描述

  5. 指定当前工作目录,dir
    在这里插入图片描述

  6. pid文件名字,pidfile
    在这里插入图片描述

  7. log文件名字,logfile
    在这里插入图片描述

  8. requirepass
    在这里插入图片描述

  9. dump.rdb
    在这里插入图片描述

  10. aof文件,appendfilename
    在这里插入图片描述
    在这里插入图片描述

  11. 从机访问主机的通行密码masterauth必须,从机配置

在这里插入图片描述

  1. 主从关系命令查看
info replication

问题:

  • 从机可以执行写命令吗?
    在这里插入图片描述

  • 主机关闭后,从机会上位吗
    从机不动,原地待命,从机数据可以正常使用;等待主机重启动归来
    在这里插入图片描述

  • 主机关闭后,重启后主从关系还在吗
    主从关系依旧存在
    在这里插入图片描述

  • 某台从机关闭后,主机继续写入数据,从机重启后是否数据有同步

主从复制原理和工作流程

slave启动,同步初请

  1. slave启动成功连接到master后会发送一个sync命令
  2. slave首次全新连接master,一次完全同步(全量复制)将被自动执行,slave自身原有数据会被master数据覆盖清除

首次连接,全量复制

  • master节点收到sync命令后会开始在后台保存快照(即RDB持久化,主从复制时会触发RDB),同时收集所有接收到的用于修改数据集命令缓存起来,master节点执行RDB持久化完后,master将rdb快照文件和所有缓存的命令发送到所有slave,以完成一次完全同步
  • 而slave服务在接收到数据库文件数据后,将其存盘并加载到内存中,从而完成复制初始化

心跳持续,保持通信

master发出PING包的周期,默认是10秒
在这里插入图片描述

进入平稳,增量复制

继续将新的所有收集到的修改命令自动依次传给slave,完成同步

从机下线,重连续传

master会检查backlog里面的offset,master和slave都会保存一个复制的offset还有一个masterId
offset是保存在backlog中的。Master只会把已经复制的offset后面的数据复制给Slave,类似断点续传

复制的缺点

  • 复制延时,信号衰竭
    在这里插入图片描述

  • master挂了咋办,因为只有主机可以进写操作,从机只能读,主机挂了,相当于缓存不可用,系统瘫痪


http://www.kler.cn/a/391595.html

相关文章:

  • 解决表格出现滚动条样式错乱问题
  • [CKS] K8S ServiceAccount Set Up
  • 【Android、IOS、Flutter、鸿蒙、ReactNative 】约束布局
  • ODOO学习笔记(3):Odoo和Django的区别是什么?
  • 云防护单节点2T抗攻击能力意味着什么?
  • HarmonyOS Next 实战卡片开发 02
  • SpringBoot(十七)创建多模块Springboot项目
  • Redis中的持久化
  • C# Properties保存参数
  • LeetCode:103. 二叉树的锯齿形层序遍历
  • 2024-11-13 Unity Addressables1——概述与导入
  • Flink Source 详解
  • 成都睿明智科技有限公司解锁抖音电商新玩法
  • 计算器上的MC、MR、M+、M—、CE是什么意思?
  • 正向代理服务器
  • TP6将HTML转换为PDF文件,非法UTF-8编码和中文乱码问题
  • 品融电商:新形势下电商平台如何助力品牌长期经营
  • Openstack7--安装消息队列服务RabbitMQ
  • 【C语言】程序性能优化——除法运算符
  • 设计一致性的关键:掌握 Axure 母版使用技巧
  • 框架学习03-Spring 七大核心模块
  • 机器学习—神经网络的Softmax输出
  • “K线剩余时间”,显示当前K线已用和剩余时间 +品种信息面板 MT4免费工具!
  • MDBook 使用指南
  • Serverless GPU:助力 AI 推理加速
  • 常见error集合