189 8069 5689

Redis分布式基础的主从同步

本篇内容介绍了“redis分布式基础的主从同步”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

创新互联公司服务项目包括鹿寨网站建设、鹿寨网站制作、鹿寨网页制作以及鹿寨网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,鹿寨网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到鹿寨省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!

在使用Redis的时候首先开始是从单台Redis服务器开始,随着业务和用户量的增长,单机会暴漏一些问题,比如单台服务器的响应达到了上限、Redis服务器宕机所有请求全部越过缓存等等一系列问题。

那么我们最简单的就是有一个备用的Redis服务器,当主服务器挂了从服务器就顶替主服务器继续服务,提高可用性。

我们拥有了主从两台Redis服务器之后,当主服务器挂掉之后从服务器就替换上去继续为我们服务,原来的主服务器恢复正常后我们两台服务器的数据又不一样了,那么我们如何保证这两台服务器的数据一致性问题呢呢?前面我们提到过CAP定理和BASE理论,我们知道在分布式、集群环境中我们需要保证数据一致性。所以我们这里得使用主从同步,或者是如果我们服务器数量特别多,我们可以减轻主服务器的同步压力,可以使用从从同步。下面我们来介绍Redis支持的几种同步方式。

增量同步

我们知道Redis增量备份是通过保存执行指令来备份的,那么同步的时候我们也可以如此。主节点会将那些对自己的状态产生修改性影响的指令记录在本地的内存buffer中,然后异步将buffer中的指令同步到从节点,从节点一边执
行同步的指令流来达到和主节点一样的状态,一边向主节点反馈自己同步到哪里了(偏移量) 。

但是内存的buffer是有限的,所以Redis主节点不能将所有的指令都记录在内存buffer中,Redis的复制内存buffer是一个定长的环形数组,如果数组内容满了,就会从头开始覆盖前面的内容;如果因为网络状况不好,从节点在短时间内无法和主节点进行同步,那么当网络状况恢复肘,Redis的主节点中那些没有同步的指令在buffer中有可能已经被后续的指令覆盖掉了。

从节点将无法直接通过指令流来进行同步,这个时候就需要用到更加复杂的同步机制一一快照同步。

快照同步

快照同步既全量同步,就是把整个Redis数据库快照发送给从节点进行同步,成功后接下来的动作就是增量同步了,所以快照同步是一个非常耗资源的同步方式,这里注意的是新增加从节点是需要先进行快照同步的。

过程:

  1. 先将主节点的数据先bgsave

  2. 将这个快照保存在磁盘上,重写开启一个socket线程

  3. 通过socket线程可以发送快照给子节点,此时的快照是所有子节点共享的

  4. 子节点同步

这里注意一个问题:当我们进行快照同步的时候,增量同步也在进行,当增量同步的数据被覆盖后还会进行快照同步,如此反复形成一个死循环

无盘复制  

我们上面提到了在快照同步的时候会执行增量同步,这里还有一个没关注的就是Redis的AOF增量同步问题。

当主节点进行快照同步时是先把这个快照保存到磁盘中,然后通过子线程共享文件到从节点,这里会进行文件的IO操作,这个操作是非常耗时的,在非SSD磁盘中存储时快照同步会对系统产生较大的负载,此时刚好主节点到了执行AOF备份操作,但是这两者并不能同时进行,所以AOF操作是会被延迟执行的,这样会严重影响主节点的执行效率,所以在Redis2.8版本之后支持无盘复制。

无盘复制是指主服务器直接通过套接字将快照内容发送到从节点,生成快照是一个遍历的过程,主节点会一边遍历内存,一边将序列化的内容发送到从节点,从节点先将接收到的内容存储到磁盘文件中,再进行一次性加载。

同步复制

无盘复制属于一种异步的方式,Redis3.0提供了一种同步复制的指令——wait,确保系统强一致性。wait提供两个参数,第一个参数是从节点的数量,第二个参数是时间,以毫秒为单位

等待wait指令之前的所有写操作同步到N个从节点最多等待T毫秒时间。如果时间=0, 表示无限等待直至N个从节点同步完成 。

注意:如果时间等于0,刚好有个节点掉线了,那么这里会一直等待,阻塞服务器。

> set key valueOK> wait 1 0(integer) 1

总结一下

  1. 同步类型有主从同步、从从同步

  2. 同步方式有:增量同步、快照同步、无盘复制、同步复制

  3. 增量同步内存中的buffer环形数组满了会覆盖,而主节点会执行快照同步

  4. 新添加从节点会使用快照同步

  5. 快照同步过程:先执行bgsave把快照信息放入磁盘,并且开启子线程将快照共享,发送至从节点进行同步

  6. 快照同步的同时也会进行增量同步,如果增量同步已经被覆盖则会执行快照同步,产生死循环

  7. 为了减小主节点的压力,当启用同步时数据不经过磁盘直接通过套接字将快照数据同步到从节点

“Redis分布式基础的主从同步”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注创新互联网站,小编将为大家输出更多高质量的实用文章!


分享名称:Redis分布式基础的主从同步
本文路径:http://jkwzsj.com/article/isjsjd.html

其他资讯