首页 > 数据库 >redis如何实现主从同步

redis如何实现主从同步

时间:2024-05-16 21:56:59浏览次数:24  
标签:同步 slave redis 节点 master offset 主从

redis实现主从同步分为两种:全量同步和增量同步:第一次连入集群的slave需要进行全量同步,那些断开后重连的slave需要进行增量同步

每个redis都有自己的replid,他们是master的标识,在尚未搭建集群之前,每个redis都是master,因此大家都有各自不同的replid

repl_backlog中会写入所有操作的命令,写操作会导致offset的增大,并且主从的offset会保持一致大小

全量同步:

  如果是一个新的slave连入集群,那我们就需要进行全量同步。如何判断这个slave是断后重连还是新来的呢?我们可以通过上述replid。

  slave连入集群时,会尝试向master发送psync,其中携带自己的replid。如果replid与master不相同,那么就可以说明他是新来的。除此以外,如果offset偏移丢失,已经无法通过增量同步恢复数据,也需要进行全量同步

  这时我们由master执行bgsave,生成一份RDB,再将RDB发送给slave。

  这里又翻了翻之前的笔记,1.什么是bgsave,2.为什么不用save:这两个问题的答案是:bgsave是异步的,save是同步的。使用save会造成阻塞问题。学完MQ,再加上了解了ws,我对bgsave有了新的印象

增量同步:

  master在与slave建立连接之后会生成一个repl_backlog,其中会记录master的操作。我们在master中定义了offset(偏移值),每当写入一条命令,offset就会增加,理想情况下slave的offset也会增加。一旦连接断开,主从节点的offset就会不一致。因此如果我们的slave是断开重连,需要携带offset,来告诉master他需要从哪里开始恢复数据

repl_backlog的一些问题:repl_backlog是一个环形结构,也就是说一旦从节点长时间宕机再恢复,只能进行全量同步,因为offset已经对不齐了

主从同步优化方案:

  1.   在master上启用无磁盘复制,避免大量磁盘IO。但是会加剧网络传输的负担:repl-diskless-sync yes
  2.   redis单节点不要太大,这样才是在根本上减少磁盘IO。。黑马说不要超过8G,超了可以用类似微服务的方案多建几个redis集群分离用
  3.   适当提高repl_backlog大小,尽可能避免全量同步
  4.   适当限制slave节点数量,可以采用主从从链式结构,减少master压力(本质上从节点依旧只能读,但是他能从别的从节点同步数据)。这个方法会降低时效性

 

之前学过一次redis,这个主从同步的机制的问题有哪些呢?

1.主节点挂了没有选新的主节点,直接不能进行写数据了,而且这样做主机鸭梨巨大。按照我的记忆来说,这里我们需要增设哨兵sentinel,让他来和主节点定时进行心跳链接,一定主节点超时未响应,这时就会选举一个新的主节点,而这又衍生了新的问题:万一主节点其实没挂,那不就成了有两个主节点了吗。后续就推出了分片集群的设置,我记得好像是每一个节点都可以读写,并且他们都有后备小弟,主节点挂了小弟顶上,主节点恢复的时候和小弟关系反转一下就好了

标签:同步,slave,redis,节点,master,offset,主从
From: https://www.cnblogs.com/kun1790051360/p/18196834

相关文章

  • 使用kettle同步数据
    如果这篇文章能给你带来帮助,不胜荣幸,如果有错误也请批评指正。共同学习一块进步。题外话:进入了2024.我决定做什么事都要持之以恒,首先是按时学习,按时记笔记,按时复习巩固。刚才看了一下,上年就想写出来,结果没有实现的。今年要好好处理一下这个事! 太多了。好多东西觉得是个知......
  • Flink同步kafka到iceberg(cos存储)
    一、flink到logger1、sourcecreatetablesource_table(idbigintcomment'唯一编号',order_numberbigintcomment'订单编号',update_timestamptimestamp_ltzmetadatafr......
  • 使用 Redis Zset 有序集合实现排行榜功能
    一、前言排行榜功能是非常常见的需求,例如商品售卖排行榜单、游戏中的积分排行榜、配送员完单排行榜等。实现排行榜功能需要高效地对大量数据进行排序和查询,如果直接进行数据库查询对应业务排行榜资源开销会非常大,一般会将对应榜单需要的数据做单独存储记录,查询时只要对榜单......
  • DataX将MySql数据库数据同步到Oracle数据库
    1.下载DataX并解压(本地环境安装有python)DataX/userGuid.mdatmaster·alibaba/DataX(github.com) job文件夹下存放数据同步的json脚本{"job":{"setting":{"speed":{"channel":1}......
  • 10分钟搞定Mysql主从部署配置
    流程Master数据库安装Slave数据库安装配置Master数据库配置Slave数据库网络信息Master数据库IP:192.168.198.133Slave数据库IP:192.168.198.132配置Master数据库在Master数据库安装完毕后,修改/etc/my.cnf[mysqld]server-id=1\\指定ID,主从的两台虚拟机ID必须不同log......
  • GPS北斗授时同步服务器(NTP网络时钟系统)技术应用方案
    GPS北斗授时同步服务器(NTP网络时钟系统)技术应用方案GPS北斗授时同步服务器(NTP网络时钟系统)技术应用方案京准电子科技官微——ahjzsz大数据时代,信息化建设已成为医院建设的发展大趋势,时间同步系统是医院做好信息化的基础工作,医院内拥有众多的计算机服务器、网络设备、存储设备等......
  • 首次尝试SeaTunnel同步Doris至Hive?这些坑你不能不避
    笔者使用SeaTunnel2.3.2版本将Doris数据同步到Hive(cdh-6.3.2)首次运行时有如下报错,并附上报错的解决方案:java.lang.NoClassDefFoundError:org/apache/hadoop/hive/metastore/api/MetaExceptionjava.lang.NoClassDefFoundError:org/apache/thrift/TBasejava.lang.NoClassDe......
  • Docker Desktop部署微软微服务Dapr(Redis+Zipkin+Placement)
    DockerDesktop部署微软微服务Dapr(Redis+Zipkin+Placement)说明系统:Windows11专业版23H2Docker:DockerDesktopv4.29.0+本文为开发环境学习和测试使用安装DaprCLI使用MSI安装程序安装每个DaprCLI的发布版本还包括一个适用于Windows的安装程序。您可以手动下......
  • 配置MySQL主从复制和读写分离
    实验环境序号主机名IP地址备注1mysql-master192.168.204.201MySQL主库2mysql-slave192.168.204.202MySQL从库3appserver192.168.204.111应用服务器安装配置MySQL数据库1.使用yum安装mysql和mysql-serveryuminstall-ymariadbmariadb-server2.启......
  • redis
    redis介绍安装#0数据库-存数据的软件#1关系型数据库-PostgreSQL(后面安装了解看看),mysql,sqlserver,oracle。。。-sql语句,通用#2非关系型数据库-redis,mongod,clickhouse,infludb,elasticsearch。。。#3非关系型数据库:nosql-c语言写的服务(监听端......