范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

一篇搞定Redis主从复制原理和实现方式

  满怀忧思,不如先干再说!主从复制介绍
  主从复制是将一台Redis服务器的数据,复制到其他Redis服务器上,前者称为主节点(master/leader),后者称为从节点(slave/follower),一个主节点可以有多个从节点,但是一个从节点只能有一个主节点,数据的复制是单向的,只能从主节点复制到从节点。默认情况下,每一个Redis服务器都是一个主节点。
  作用数据备份:主从复制实现了数据的热备份,提高数据的安全性故障恢复:当主节点发生问题不能提供服务时,从节点可以提供服务,保证Redis集群的可用性负载均衡:在主从复制的基础上,可以实现读写分离,主节点 负责写 操作,从节点 负责读 操作,在写少读多的场景下,可以使用该模式大大提高Redis的并发量Redis高可用:主从复制是实现哨兵和集群的基础,主从复制是Redis高可用的基石主从复制实现集群准备
  主从复制不会在同一台节点上,我们准备三台虚拟机,分别为test201,test202,test203,Redis端口分别为6379,6380和6381,我们将test201:6379当做主节点,余下两个为从节点。我们使用之前讲解的配置文件方式启动三台Redis节点。实现方式
  1、客户端命令:Redis服务启动后在客户端使用slaveof  ,该Redis服务会成为从节点。127.0.0.1:6380> slaveof test201 6379
  2、启动命令:使用redis-server命令时使用 --slaveof  ,该Redis会成为从节点redis-server redis-6381.conf --slaveof test201 6379
  3、配置文件:在从节点的配置文件中配置 slaveof  slaveof test201 6379
  敲黑板:此三种方式实现Redis的主从复制,实现数据的热备份,即主节点新增,删除,修改key,从节点也会实时更新。断开主从关系
  哪天想单飞或者另寻明主需要断开现在主从关系,在从节点上运行slaveof no one ,实现断开,那么从节点上的数据不会清空,但是不再接收主节点的数据更新 查看主从复制关系
  在客户端执行以下命令info replication
  test201: 主节点,可以看出该节点是master,主节点,有一个从节点,ip为192.168.109.203,端口为6381
  test203: 从节点,可以看出该节点是slave,主节点是test201,端口为6379
  数据同步概述
  在Redis复制的基础上从节点(slave )可以精确的复制主节点(master )上的数据,每当slave和master之间断开连接时,slave会自动连接上master,并且无论这期间master发生了什么,slave都会尝试去同步精确的数据,称为master的精确副本。这个过程就是数据同步
  Redis2.8之前,从节点向主节点发送sync命令请求数据同步,此时的同步时全量复制,Redis2.8之后从节点发送psync 命令进行数据同步,此时根据主从节点当前状态不同,同步的结果可能是全量复制或者部分复制。全量复制 :用于初次复制或其他无法部分复制的情况,将主节点中的所有数据都发送给从节点,是一个很重的操作。部分复制 :用于网络中断等情况的复制,只将中断期间主节点的写操作发送给从节点,相比全量复制不比较高效,如果连接断开时间过长,导致主节点没有完整的保存断开时间内的数据,那么还是会使用全量复制。同步机制当一个 master 实例和一个 slave 实例连接正常时, master 会发送一连串的命令流来保持对 slave 的更新,以便于将自身数据集的改变复制给 slave , :包括客户端的写入、key 的过期或被逐出等等。当 master 和 slave 之间的连接断开之后,因为网络问题、或者是主从意识到连接超时, slave 重新连接上 master 并会尝试进行部分重同步:这意味着它会尝试只获取在断开连接期间内丢失的命令流。当无法进行部分重同步时, slave 会请求进行全量重同步。这会涉及到一个更复杂的过程,例如 master 需要创建所有数据的快照,将之发送给 slave ,之后在数据集更改时持续发送命令流到 slave 。
  Redis使用默认的异步复制,其特点是低延迟和高性能,是绝大多数 Redis 用例的自然复制模式。但是,slave会异步地确认其从master周期接收到的数据量。全量复制slave判断无法进行部分复制,向master发送全量复制请求,或slave发送部分复制,master判断无法进行全量复制;master接收到全量复制指令之后,运行bgsave ,在后台生成RDB文件 ,并生成一个缓冲区(复制缓冲区 ),记录从现在开始执行的所有写命令 ;master的bgsave执行完毕之后,将RDB文件发送给slave,slave首先清除自身旧数据,然后载入接收的RDB文件,将数据库状态更新至master执行bgsave时的数据库状态;master将上文提到的复制缓冲区 中所有写命令发送给slave,slave执行这些写命令,将数据库状态更新至master最新状态;如果slave开启了AOF,则会触发bgrewriteaof 操作,从而保证AOF文件更新到最新状态。
  从上述可以看出全量复制是一个很重的操作:master通过bgsave使进行fork子进程进行RDB持久化,该过程非常消耗CPU、内存、硬盘IO;master通过网络将RDB文件发送给slave,对主/从节点的带宽都有很大损耗;slvae清空老数据,载入新的RDB文件,这个过程是阻塞的,无法响应客户端命令,slave执行bgrewrieaof也会到来损耗。部分复制
  因为全量复制损耗太大,Redis2.8版本开始提供部分复制,用于处理网络中断时的数据同步。部分复制实现主要依赖于三个重要的概念:复制偏移量,复制积压缓冲区,服务器运行ID 。复制偏移量
  主节点和从节点分别维护一个复制偏移量(offset),代表的是master向slave传递的字节数 ;主节点每次向从节点传播N个字节数据时,主节点的offset增加N;从节点每次收到主节点传来的N个字节数据时,从节点的offset增加N。offset用于判断主从节点的数据库状态是否一致:如果二者offset相同,则一致;如果offset不同,则不一致,此时可以根据两个offset找出从节点缺少的那部分数据。例如,如果主节点的offset是1000,而从节点的offset是500,那么部分复制就需要将offset为501-1000的数据传递给从节点。而offset为501-1000的数据存储的位置,就是下面要介绍的复制积压缓冲区 。
  复制积压缓冲区
  当主节点开始有从节点时创建,其作用是备份主节点最近发送给从节点的数据,复制积压缓冲区由主节点创建、维护、固定长度、先进先出。无论主节点有几个从节点,都只需要一个复制积压缓冲区,默认大小为1M
  在命令传播阶段,主节点除了将写命令发送给从节点外还会发送一份给复制积压缓冲区,作为写命令的备份,除了存储写命令,复制积压缓冲区中还存储了其中的每个字节对应的复制偏移量(offset)。由于复制积压缓冲区定长且是先进先出,所以它保存的是主节点最近执行的写命令;时间较早的写命令会被挤出缓冲区。
  由于该缓冲区长度固定且有限,因此可以备份的写命令也有限,当主从节点offset的差距过大超过缓冲区长度时,将无法执行部分复制,只能执行全量复制。反过来说,为了提高网络中断时部分复制执行的概率,可以根据需要增大复制积压缓冲区的大小(通过配置repl-backlog-size);例如如果网络中断的平均时间是60s,而主节点平均每秒产生的写命令(特定协议格式)所占的字节数为100KB,则复制积压缓冲区的平均需求为6MB,保险起见,可以设置为12MB,来保证绝大多数断线情况都可以使用部分复制
  从节点将offset发送给主节点后,主节点根据offset和缓冲区大小决定能否执行部分复制:如果offset偏移量之后的数据,仍然都在复制积压缓冲区里,则执行部分复制;如果offset偏移量之后的数据已不在复制积压缓冲区中(数据已被挤出),则执行全量复制。服务器运行ID(runid)
  每个Redis节点(无论主从),在启动时都会自动生成一个随机ID(每次启动都不一样),由40个随机的十六进制字符组成;
  runid用来唯一识别一个Redis节点。通过info Server命令,可以查看节点的runid 。
  主从节点初次复制时,主节点将自己的runid发送给从节点,从节点将这个runid保存起来;当断线重连时,从节点会将这个runid发送给主节点;主节点根据runid判断能否进行部分复制:如果从节点保存的runid与主节点现在的runid相同,说明主从节点之前同步过,主节点会继续尝试使用部分复制(到底能不能部分复制还要看offset和复制积压缓冲区的情况);如果从节点保存的runid与主节点现在的runid不同,说明从节点在断线前同步的Redis节点并不是当前的主节点,只能进行全量复制
  psync命令执行流程
  1、首先从节点根据当前状态,决定如何调用psync命令:如果从节点之前未执行过slaveof或最近执行了slaveof no one,则从节点发送命令为psync ? -1,向主节点请求全量复制;如果从节点之前执行了slaveof,则发送命令为psync  ,其中runid为上次复制的主节点的runid,offset为上次复制截止时从节点保存的复制偏移量。
  2、主节点根据收到的psync命令,及当前服务器状态,决定执行全量复制还是部分复制:如果主节点版本低于Redis2.8,则返回-ERR回复,此时从节点重新发送sync命令执行全量复制;如果主节点版本够新,且runid与从节点发送的runid相同,且从节点发送的offset之后的数据在复制积压缓冲区中都存在,则回复+CONTINUE,表示将进行部分复制,从节点等待主节点发送其缺少的数据即可;如果主节点版本够新,但是runid与从节点发送的runid不同,或从节点发送的offset之后的数据已不在复制积压缓冲区中(在队列中被挤出了),则回复+FULLRESYNC  ,表示要进行全量复制,其中runid表示主节点当前的runid,offset表示主节点当前的offset,从节点保存这两个值,以备使用。命令传播阶段
  在命令传播阶段,除了发送写命令,主从节点还维持着心跳机制:PING和REPLCONF ACK。心跳机制对于主从复制的超时判断、数据安全等有作用。主->从:PING
  每隔指定的时间,主节点会向从节点发送PING命令,这个PING命令的作用,主要是为了让从节点进行超时判断。
  PING发送的频率由 repl-ping-slave-period  参数控制,单位是秒,默认值是10s。从->主:REPLCONF ACK
  在命令传播阶段,从节点会向主节点发送REPLCONF ACK命令 ,频率是每秒1次;命令格式为:REPLCONF ACK {offset},其中offset指从节点保存的复制偏移量。
  REPLCONF ACK命令的作用包括:
  (1)实时监测主从节点网络状态:该命令会被主节点用于复制超时的判断。此外,在主节点中使用info Replication,可以看到其从节点的状态中的lag值,代表的是主节点上次收到该REPLCONF ACK命令的时间间隔,在正常情况下,该值应该是0或1。
  (2)检测命令丢失:从节点发送了自身的offset,主节点会与自己的offset对比,如果从节点数据缺失(如网络丢包),主节点会推送缺失的数据(这里也会利用复制积压缓冲区)。注意,offset和复制积压缓冲区,不仅可以用于部分复制,也可以用于处理命令丢失等情形;区别在于前者是在断线重连后进行的,而后者是在主从节点没有断线的情况下进行的。
  (3)辅助保证从节点的数量和延迟:Redis主节点中使用min-slaves-to-write和min-slaves-max-lag参数,来保证主节点在不安全的情况下不会执行写命令;所谓不安全,是指从节点数量太少,或延迟过高。例如min-slaves-to-write和min-slaves-max-lag分别是3和10,含义是如果从节点数量小于3个,或所有从节点的延迟值都大于10s,则主节点拒绝执行写命令。而这里从节点延迟值的获取,就是通过主节点接收到REPLCONF ACK命令的时间来判断的,即前面所说的info Replication中的lag值。总结
  1、主从复制的作用:了解主从复制是为了解决什么样的问题,即数据冗余、故障恢复、读负载均衡等。
  2、主从复制的操作:即slaveof命令。
  3、主从复制的原理:主从复制包括了连接建立阶段、数据同步阶段、命令传播阶段;其中数据同步阶段,有全量复制和部分复制两种数据同步方式;命令传播阶段,主从节点之间有PING和REPLCONF ACK命令互相进行心跳检测。
  主从复制虽然可以对数据进行热备份,但其缺陷仍很明显:故障恢复无法自动化;写操作无法负载均衡;存储能力受到单机的限制;这些问题的解决,需要哨兵和集群的帮助 ,但是主从复制是实现Redis高可用的基石非常重要,如哨兵模式和集群都需要依赖主从实现。
  你的支持是对我最大的肯定,如果不错记得关注,点赞哦!

林志玲讨回极限挑战节目两期片酬高达400万!网友太好赚了极限挑战欠林志玲两期节目片酬,片酬金额高达四百万,是多少人一辈子都赚不到了财富。为何极限挑战会欠林志玲两期节目的片酬呢?真如严敏导演说的那样,节目经费紧张吗?在网上曝出林志玲两期节又一对明星夫妻离婚了,我痛并快乐着2021,汪小菲大S,王力宏李靓蕾一对对明星夫妻离婚了老妈一边刷抖音,一边说现在明星为啥离婚的这么多?说完抬头看着我,我明白她的话外之意,忙接话道就是呀,明星都不怕离婚,更何况我一模拟游戏机器人战车大战12月31日发售支持简体中文灵感来源于经典节目机器人大擂台的游戏机器人战车大战将于12月31日登陆Steam,该作支持简体中文,感兴趣的玩家可以点击此处进入商店页面。宣传片优酷视频云游戏介绍这是机械和烈火的完原神如果雷神和岩神打起来了,你觉得谁的赢面会更大?大家好,我是戒戒,专注于分享游戏心得和趣事的戒戒!提瓦特是原神手游里的一个由七种元素交汇而成的幻想世界,目前提瓦特大陆上有七位神明,他们以尘世七执政之名统治七国。玩家们在提瓦特世界反转?曝福原爱母亲一直喜欢江宏杰,反对离婚,拒绝和福原爱同住福原爱和江宏杰已经离婚一段时间了,如今,两个孩子由江宏杰照顾,而福原爱在日本工作,日本媒体还透露,她准备好开启另一段感情了,而对象就是之前被曝光的那位事业型男士。不过,日本媒体女性新华社官宣年度10佳!全红婵孙颖莎意外落选,女排国足男篮全出局北京时间12月28日,新华社在今天正式评选出了2021年度的中国十佳运动员,一起来看一看具体的榜单情况吧。榜单的第1名是杨倩,杨倩在今年的东京奥运会上为中国队打响了第1枪,而且又是28分4板4助!辽篮弃将两战狂轰15记三分,李洪庆后悔放走他吗?12599,山西男篮大胜广东宏远,迎来两连胜的同时也终结对广东宏远常规赛13连败。此役过后,山西男篮战绩来到11胜4负,排名超越广东宏远,升至积分榜第七的位置。面对卫冕冠军广东宏远有人说王曼昱和陈梦在乒乓世界杯上是故意让给孙颖莎?是这样吗?最近老是看到网上有一些球迷,针对莎莎这次获得乒乓球三大赛事之一的世界杯冠军,给出了一些不一样的声音。有一些网友竟然说王曼昱和陈梦在乒乓球世界杯上是故意让给孙颖莎夺冠的?听到这句话作3消息!杜锋悼念吴远之,山东强援空降赛区,广东第三外援被曝光杜锋沉痛宣布噩耗12月25日,CBA新赛季第二阶段的比赛正式打响,在26号,广东队也是迎来了第二阶段的第一个对手广厦队,不过广东队本场比赛状态不佳,以86比98输给了广厦队,遭遇了次战仅得11分,林书豪被质疑出工不出力!或许我们误会他了在对阵同曦的比赛中,林书豪登场28分钟,全场12中4,得到11分7助攻。相比队友吉布森,林书豪感觉退步了。与上一场对阵辽宁不同,本次书豪几乎低迷了一整场,不过好在队友发挥出色,在末广东队罕见两连败!两大王牌心态崩了,杜锋想念马尚12599,广东队26分惨败给山西队,遭遇两连败!你还记得广东队两连败是什么时候吗?可能要追溯到很多年之前,广东队三连冠期间,印象中还从来没有两连败过!上一场比赛,广东队全场被广厦
MIFATRIBE乐享骑乘,用音乐为骑行带来全新体验超清音质,澎湃低音身材迷你,但是音质却相当惊人。MIFAWILDROD产品净重仅0。63Kg,单手可握的体积,可以说非常小巧轻便了,但是音质却毫不含糊。小编见过很多小型便携户外音箱switch版让我们歌唱吧ABBA游戏类型音乐聚会让我们歌唱吧是一款音乐集会游戏,定于今年2022年10月4日发售。庆祝瑞典流行音乐巨头ABBA的辉煌复出。单独或与您的朋友一些你最喜欢的经典曲目的乐队!从收集的31ABBA经典和执送父母手机怎么选?大内存超长续航,我只推荐这三款很多人在给父母选手机的时候很纠结,贵的不知道咋选,便宜的又怕用不住,今天小编找了这几款手机,都是手机大厂制造,价格低,使用稳定,大内存超长续航,真的很不错。1000元以下红米Not全红婵太难复制!弟弟妹妹参加广东跳水比赛,全都没有拿到前两名在今年的跳水世锦赛上,全红婵因为身体发育等原因,没能延续东京奥运会上的神奇表现,以细微差距输给陈芋汐,无缘世锦赛首枚个人10米台金牌。但全红婵的天赋摆在那里,生长发育毕竟只是后天因韩旭出场7分钟贡献2分2篮板自由人击败梦想队迎来两连胜北京时间8月13日0730,2022年WNBA常规赛继续进行。纽约自由人队8070战胜亚特兰大梦想队,迎来两连胜。自由人队的中国球员韩旭出场7分钟,得到2分2个篮板。韩旭第一节,韩小鹏回应其车主出车祸被护栏插中身亡事发时车辆属于手动驾驶IT之家8月13日消息,随着电动汽车技术的不断发展,越来越多的用户开始购买电动汽车。与此同时,人们对电动汽车厂商的一举一动也更加关注,尤其是蔚小理这三家造车新势力。据南方都市报昨日新华全媒从世界5G大会看5G创新科技如何改变你我生活视频加载中10日至12日在哈尔滨举办的2022世界5G大会上,专家表示,我国5G建设取得了突破性成就,已进入社会生活各个方面。来自2022世界5G大会的数据显示,我国已经建成5G基中国女性内衣行业深度发展研究与十四五企业投资战略规划报告智研瞻产业研究院专注于中国产业经济情报及研究,目前主要提供的产品和服务包括传统及新兴行业研究商业计划书可行性研究市场调研专题报告定制报告等。涵盖文化体育物流旅游健康养老生物医药能源女性机器人不但逼真,还自带体温,怪不得深受用户喜爱你知道女性机器人为何受到男性欢迎吗?体验者表示,内部结构与人类相似,不但逼真,还自带体温,换作谁都不讨厌。(此处已添加小程序,请到今日头条客户端查看)现如今,人工智能行业发展飞速,不婚族,少子化,女性仿生机器人崛起或能解决根本问题随着不婚主义盛行,越来越多年轻人都不想结婚生子,人生是自己的,不想被模板限制。而在不婚主义环境下,机器人融入了人类生活。(此处已添加小程序,请到今日头条客户端查看)说起国内婚姻现象iPhone凭借一个电量百分比功能,上了热搜苹果的热搜频繁到什么程度呢?我要是哪天没在TOP10里看见iPhoneiOS之类的关键词,心里都会有一阵莫名的空虚感是日是不是还有什么事情没做完?但是有一说一,数量多,质量却不太行