Redis主从复制问题和扩容问题的解决思路
一、解决主从复制问题
当使用redis作为存储引擎的时候,并且使用redis读写分离,从机作为读的情况,从机宕机或者和主机断开连接都需要重新连接主机,重新连接主机都会触发全量的主从复制,这时候主机会生成内存快照,主机依然可以对外提供服务,但是作为读的从机,就无法提供对外服务了,如果数据量大,恢复的时间会相当的长。为了解决redis主从copy的问题,有如下两个解决方案:
主动复制
所谓主动复制,就是业务层双写多个redis,避开redis自带的主从复制。但是自己干同步,就会产生一致性问题,为了保证主从一致,需要加入一系列的验证机制。而且这样的做法,会降低系统性能。
修改源代码,支持增量同步
redis写aof文件,关闭redis rewrite aof文件功能,为了避免文件过大,可以自己实现文件分割功能。
在业务低峰时期,生成内存快照,并记录快照时刻aof所在的点。
当从机重连的时候,从机发送同步命令给主机,主机收到命令后,把最新的快照文件发送给从机,从机从快照文件中恢复,并且获得了该快照对应的aof点,从机将aof点发送给主机,主机将aof文件中该点之后的所有数据操作同步给从机,达到增量同步的效果。
二、解决扩容问题
redis作者的思路是:redis presharding(http://oldblog.antirez.com/post/redis-presharding.html)
预算设定redis instances数量,假设实例数量n,n = 机器数*单台机器redis实例数
后期扩展只需要将旧机器上的部分redis实例迁移到新的机器上,达到平滑扩容。
迁移步骤如下:
在新的机器上创建实例,并且每个实例设置为被迁移实例的从机。
主从复制完成之后,设置程序将新的实例作为主。
停止旧的实例
经过如上步骤之后,旧机器的内存就变大了,最后内存最大为每台机器一个redis实例。
按作者文章中所说的,一个机器启动多个实例,其实并不会耗费太多资源,因为redis够轻量,另外多个实例一个接一个的重写aof文件或者生成内存快照,可以降低内存的占用,而不影响对外的服务。
上一篇: 《智能机器人》教学设计
下一篇: 计算机系统结构 慕课 存储系统习题
推荐阅读
-
vue代理和跨域问题的解决
-
基于vue打包后字体和图片资源失效问题的解决方法
-
Table 组件构建过程中遇到的问题与解决思路
-
transport.js和jquery冲突问题的解决方法
-
通过过滤器(Filter)解决JSP的Post和Request中文乱码问题
-
php中curl和soap方式请求服务超时问题的解决
-
win10专业版更新升级KB4025342和KB4025339蓝屏/更新失败等问题的解决方法
-
ASP 包含文件中的路径问题和使用单一数据库连接文件的解决方案
-
关于钱粮问题曹操和刘备分别是如何解决的?曹操比刘备直接多了!
-
Cocos2d-x 3.0中集成社交分享ShareSDK的详细步骤和常见问题解决