redis主从复制完整攻略
1.主从配置
1.1单机
在服务器中copy一份redis.cnf
1 | [root@localhost redis-5.0.3]# cp redis.conf slave-redis.cnf |
修改端口号、pid文件、指定主redis的ip和端口
1 | [root@localhost redis-5.0.3]# vim slave-redis.cnf |
1.2测试
启动redis从服务 启动端口为6380的客户端
1 | redis-server slave-redis.cnf |
在主redis上添加数据
1 | 127.0.0.1:6379> set 1 1 |
从redis
1 | 127.0.0.1:6380> get 1 |
2.同步原理
如果你的redis仅当作缓存来使用,可以不必操太多的心,但是用到了持久化的功能,也就是当作一个数据库来使用,数据的持久性和一致性是必须得以重视!以下内容只针对主从同步原理做了讲解。
2.1增量同步
主节点会将自己做出的指令存储到本地buffer中,然后从节点异步的读取指令来尽可能达到和主节点的数据一致,因为buffer的内存有限,buffer的内存结构是一个环形数组,从头写到尾时(写完一圈),将会覆盖之前的指令数据。
注意: 如果,从节点网络状态不好,无法和主节点同步数据,没来的及的同步数据被覆盖掉,这时,就需要下面的快照同步。
2.2快照同步
这是一个十分耗时的操作。
首先主节点会进行一次内存全盘扫描(bgsave),将内存中的所有数据写入到磁盘中,写入完毕时后传送到从节点,从节点接受完毕后,首先将内存清空,然后执行一次全量加载,再然后进行增量同步。
注意: 在从节中快照同步的同时,主节点的操作指令依旧在写到buffer中,如果快照同步十分的耗时,以至于buffer中的指令又被覆盖,那么将陷入死循环中!
为了避免死循环,请合适的设置buffer容量参数。
2.3无盘复制
自redis 2.8.18版本后,引入了无盘复制,主节点直接通过套接字将内容传递给从节点。主节点一边遍历内存一边将序列化的内容传送到从节点中,从节点先将接收到的数据存入到磁盘中,最后执行一次全量加载。
新加入的从节点,必须先进行一次快照同步,后再进行增量同步
文章文献参考《redis深度历险核心原理与应用实践》
评论