三种常用的网站设计软件,河南省建造师网官网,东莞临时工最新招聘信息,免费开发网站大全目录
前言#xff1a;
分布式系统
主从模式
主从同步连接过程
replication id作用
offset作用
psync命令#xff08;psync replicationId offset)
全量复制
全量复制过程
部分复制
部分复制过程
实时复制 前言#xff1a; redis为了保证高可用#xff0c;它支持…目录
前言
分布式系统
主从模式
主从同步连接过程
replication id作用
offset作用
psync命令psync replicationId offset)
全量复制
全量复制过程
部分复制
部分复制过程
实时复制 前言 redis为了保证高可用它支持主从模式进行部署服务。可以引入更多硬件资源提供高可用的服务器。主节点和从节点数据需要一致那么在读数据就可以在服务器集群中任意选择一个节点进行读取。redis主从复制默认只能在主节点中修改数据从节点是不可以修改的也是为了保证主从节点数据的一致性。
分布式系统 采用分布式模式部署redis服务引入更多的硬件资源。 1可用性某个节点服务挂了还有其他节点可以代替。 2并发性硬件资源多了可处理的请求并发数也就多了。
主从模式 一个主节点多个从节点。主节点上的数据和从节点数据是同步的可以认为从节点是主节点的副本。 redis中的主从模式从节点不允许修改数据只可以在主节点上同步数据主节点数据有任何修改都需要同步到从节点。写数据仍然是在主节点上写。 那么读数据主节点和从节点数据是一致的都可以去读。写数据只可以在主节点上写主节点还是有一定的压力。但通常情况下读操作数量远远大于写操作。很好的解决了读并发的可用性和并发数的提高
主从同步连接过程 注意
1通过配置文件保存主节点ip地址和端口号等一些信息。
2通过TCP的三次握手进行连接。
3验证主节点是否能正常工作。
4redis可能会开启密码在连接的时候就需要验证。
5从节点连接到主节点进行数据同步涉及全量同步和部分同步。
6当从节点和主节点连接成功后主节点还是会修改数据那么就需要持续进行数据同步。 redis提供了psync命令。用于完成数据同步过程。不需要手动执行redis服务器在建立好主从同步关系后自动执行。从节点负责执行psync同步主节点数据。
replication id作用 主节点启动的时候就会生成从节点晋升为主节点也会生成。即使同一个主节点每次重启replication id都是不同的。从节点和主节点建立了复制关系就会从主节点这边获取到replication id。 如果从节点认为主节点挂了自己就会晋升为主节点给自己生成一个replid从节点主动断开。此时这个节点也会记得之前主节点的replid就是通过replid2。后续发现主节点可以正常通信了就可以使用replid2来恢复之前的主从关系。需要手动干预哨兵机制可以自动完成这个过程。
offset作用
1主节点和从节点都会维护 偏移量整数。
2主节点的偏移量主节点会收到很多的修改命令每个命令都要占据几个字节。主节点会把这些修改命令每个命令的字节数进行累加。
3从节点偏移量就描述数据同步到哪里了。从节点每秒钟会上报自己的offset给主节点。
4如果主节点和从节点offset一样并且replication id也一致说明主节点和从节点的数据完全一致。
psync命令psync replicationId offset) 从节点主动发起用来从主节点同步数据。可能是全量复制也可能是复制一部分数据增量复制 offset如果为-1则是获取全量数据。如果是具体的整数那么就从当前偏移量进行获取。
全量复制 不是从节点索要哪部分数据主节点就会给从节点哪部分数据。主节点会做一个判断如果方便就给部分数据如果不方便就是全量复制了。
全量复制时机 从节点首次和主节点进行数据同步 主节点积压缓冲区不足以从节点缺失是数据主节点积压缓冲区和从节点断开连接后数据保存位置
部分复制时机 之前已经复制过一部分数据了由于网络抖动两者断开连接了。当从节点再次连接上之后。
全量复制过程 1从节点发送psync命令给主节点进行数据同步由于是第一次同步从节点没有主节点replid和offset所以发送psync ? -1进行全量复制。
2主节点根据命令解析出需要全量复制回复FULLRESYNC响应。
3从节点接收主节点的运行信息进行保存。
4主节点执行bgsave进行rdb文件持久化。
5主节点发送rdb文件到从节点从节点保存rdb文件到本地。
6主节点将从生成rdb文件到从节点接收完成期间执行写命令写入缓冲区。等从节点保存完rdb文件后主节点再将缓冲区数据补发给从节点补发的数据仍然按照rdb二进制格式追加到收到的rdb文件中保持主从一致性。
7从节点清空自身原有旧数据。
8从节点加载rdb文件得到与主节点一致的数据。
9如果从节点加载完成rdb文件后并且开启了AOF持久化功能它会进行bgrewrite操作得到最近AOF文件。
部分复制 之前已经复制过一部分数据了由于网络抖动两者断开连接了。当从节点再次连接上之后。
部分复制过程 1从主从节点之间出现网络中断时如果超过rep-timeout时间主节点就会认为从节点出现故障并中断复制连接。
2主从连接中断期间主节点仍然接收命令但无法发送给从节点所以暂时将这些命令保存在复制积压缓冲区中。
3当主从节点网络恢复后从节点再次连接上主节点。
4从节点将之前保存的replid和offset作为psyns命令参数发送给主节点请求进行部分复制。
5主节点接收到psync请求后进行必要验证随后根据offset去复制积压缓冲区中查找合适的数据并响应CONTINUE给从节点进行部分复制。
6主节点将从节点需要同步的数据发送给它完成数据一致性操作。
replication id 从节点再次连接主节点首先进行replication id判断如果和之前主节点保存的不一致则进行全量复制。 如果和之前保存的一致然后再根据offset进行判断。
offet 当从节点和主节点断开连接后主节点会临时将数据保存到积压缓冲区中。通过offset进行判断如果积压缓冲区可以满足从节点则就部分复制了。 如果积压缓冲去不能满足从节点缺失的数据则只能全量复制了。
从节点和主节点断开 从节点和主节点主动断开。从节点就会升级为主节点生成自己的replication id 主节点挂了。从节点不会升级为主节点必须通过人工干预恢复主节点。
注意 全量复制从节点刚连接上主节点之后进行的数据初始化工作。 部分复制特殊情况的处理方式一种优化手段毕竟全量复制操作比较重量。
实时复制 当从节点和主节点数据已进同步完成后续主节点还会收到修改数据的操作。主节点和从节点会使用tcp长连接主节点将变化数据同步到从节点上。
注意 进行实时复制的时候需要保证连接处于可用状态使用心跳包机制进行判定。 主节点默认每隔10s给从节点发送一个ping命令从节点收到后返回pong 从节点默认每隔1s给从节点发送一个特定的请求上报从节点的复制进度offset
注意 主从复制最大的问题还是在主节点上如果主节点挂了从节点就迷茫了。只能提供读操作从节点不能自动升级为主节点替换不了原来主节点角色。只能手动干预改变拓扑结构。 redis哨兵模式可以自动对挂了的主节点进行替换。