首页 > 数据库 >Redis主从复制

Redis主从复制

时间:2022-08-17 22:23:21浏览次数:76  
标签:主从复制 同步 slave Redis master 服务器 数据

文章中的环境都是部署在云服务器上的,感兴趣的小伙伴可以选择3A云服务进行学习

一、主从复制简介

1.你的“Redis”是否高可用

单机redis的风险与问题

问题1.机器故障

  • 现象:硬盘故障、系统崩溃
  • 本质:数据丢失,很可能对业务造成灾难性打击
  • 结论:基本上会放弃使用redis.

问题2.容量瓶颈

  • 现象:内存不足,从16G升级到64G,从64G升级到128G,无限升级内存
  • 本质:穷,硬件条件跟不上
  • 结论:放弃使用redis

结论:

为了避免单点Redis服务器故障,准备多台服务器,互相连通。将数据复制多个副本保存在不同的服务器上,连接在一起,并保证数据是同步的。即使有其中一台服务器宕机,其他服务器依然可以继续提供服务,实现Redis的高可用,同时实现数据冗余备份。

2.主从复制

  • 提供数据方:master
    • 主服务器,主节点,主库
    • 主客户端
  • 接收数据方:slave
    • 从服务器,从节点,从库
    • 从客户端

主从复制即将master中的数据即时、有效的复制到slave中

特征:一个master可以拥有多个slave,一个slave只对应一个master

职责
master 写数据 执行写操作时,将出现变化的数据自动同步到slave 读数据(可忽略)
slave 读数据 写数据(禁止)

三、主从复制的作用

  • 读写分离:master写、slave读,提高服务器的读写负载能力
  • 负载均衡:基于主从结构,配合读写分离,由slave分担master负载,并根据需求的变化,改变slave的数量,通过多个从节点分担数据读取负载,大大提高Redis服务器并发量与数据吞吐量
  • 故障恢复:当master出现问题时,由slave提供服务,实现快速的故障恢复
  • 数据冗余:实现数据热备份,是持久化之外的一种数据冗余方式
  • 高可用基石:基于主从复制,构建哨兵模式与集群,实现Redis的高可用方案

二、主从复制工作流程

1.总述

  • 主从复制过程大体可以分为3个阶段
    • 建立连接阶段(即准备阶段)
    • 数据同步阶段
    • 命令传播阶段

2.阶段一:建立连接阶段

建立slave到master的连接,使master能够识别slave,并保存slave端口号

  • 方式一:客户端发送命令
slaveof <masterip> <masterport>
  • 方式二:启动服务器参数
redis-server -slaveof <masterip> <masterport>
  • 方式三:服务器配置
slaveof <masterip> <masterport>

三、阶段二:数据同步阶段工作流程

  • 在slave初次连接master后,复制master中的所有数据到slave
  • 将slave的数据库状态更新成master当前的数据库状态

数据同步阶段master说明

  1. 如果master数据量巨大,数据同步阶段应避开流量高峰期,避免造成master阻塞,影响业务正常执行
repl-backlog-size 1mb
  1. 复制缓冲区大小设定不合理,会导致数据溢出。如进行全量复制周期太长,进行部分复制时发现数据已经存在丢失的情况,必须进行第二次全量复制,致使slave陷入死循环状态。
  2. master单机内存占用主机内存的比例不应过大,建议使用50%-70%的内存,留下30%-50%的内存用于执行bgsave命令和创建复制缓冲区

数据同步阶段slave说明

  1. 为避免slave进行全量复制、部分复制时服务器响应阻塞或数据不同步,建议关闭此期间的对外服务
slave-serve-stale-data yes|no
  1. 数据同步阶段,master发送给slave信息可以理解master是slave的一个客户端,主动向slave发送命令
  2. 多个slave同时对master请求数据同步,master发送的RDB文件增多,会对带宽造成巨大冲击,如果master带宽不足,因此数据同步需要根据业务需求,适量错峰
  3. slave过多时,建议调整拓扑结构,由一主多从结构变为树状结构,中间的节点既是master,也是slave。注意使用树状结构时,由于层级深度,导致深度越高的slave与最顶层master间数据同步延迟较大,数据一致性变差,应谨慎选择

4.阶段三:命令传播阶段

  • 当master数据库状态被修改后,导致主从服务器数据库状态不一致,此时需要让主从数据同步到一致的状态,同步的动作称为命令传播
  • master将接收到的数据变更命令发送给slave,slave接收命令后执行命令

标签:主从复制,同步,slave,Redis,master,服务器,数据
From: https://www.cnblogs.com/htx666/p/16596986.html

相关文章

  • 20. Redis---发布订阅
    1.前言RedisPubSub模块又称发布订阅者模式,是一种消息传递系统,实现了消息多播功能。发布者(即发送方)发送消息,订阅者(即接收方)接收消息,而用来传递消息的链路则被称为 chan......
  • Redis---服务端命令
    1.前言Redis服务器是对客户端提供服务的主体,只要是安装了Redis数据库的计算机都可以通过本地,或者远程的方式对外提供服务。Redis服务器能够以高可用集群的方式对外提......
  • 19. Redis---基数统计
    1.前言Redis经常使用的数据类型有字符串、列表、散列、集合和有序集合,但这些类型并不能满足所有的应用场景,因此,Redis的后续版本不断的扩增其他数据类型来增强Redis适......
  • redis实现消息队列的几种方式及其优劣
    redis实现消息队列的几种方式及其优劣衡与墨已于2022-04-2720:46:32修改5617收藏24分类专栏:redis精华文章标签:redispub-substream消息队列版权redis同时被......
  • Redis介绍与安装
    目录redis介绍安装介绍安装通用命令字符串命令redis介绍安装介绍redis是什么是一个软件(用c语言写的,初级版本代码只有1w多行7.x,公司5.x,4.x多)非关系型(没有外键......
  • redis-数据类型List的安全队列和不安全队列
    在学习RPOPLPUSH命令的时候,官方文档中有提到安全队列和不安全的队列,一开始没有看懂,现在理解了做个笔记。 一般情况下,我们可以借助List来实现消息队列,比如一个客户端通过......
  • redis数据类型篇
    查看库下有多少个key127.0.0.1:6379>dbsize(integer)4查询redis库信息redis没有类似于selectdatabase();这样的查询方式且redis的数据库数量一般默认是16个,在配......
  • 使用 Canal 和 Kafka 与 RDS MySQL 进行 Redis 数据同步
    教程:https://www.alibabacloud.com/blog/redis-data-synchronization-with-rds-mysql-using-canal-%26-kafka_598072源码:https://github.com/alibabacloud-howto/soluti......
  • Redis Desktop Manager for Mac(Redis可视化工具) v2021.10.236中文版
    mac软件下载:https://mac.macsc.com/mac/2697.html?id=MzI1OTY2 RedisDesktopManagermac版是一个快速、简单、支持跨平台的RedisDB管理工具,专为Mac用户设计,基于Qt5......
  • redis hash
    在redis的value中以键值对存储数据  hsethashnamexage18addresshefei插入元素hgethashname输出元素"x"hgethashage"18"hgethashaddress"......