跟我学Redis(15)—Redis主从复制
redis,主从,复制2016-08-14
(一)主从简介
关系数据库(MySql)会使用一个主服务器(master)向多个从服务器(slave)发送更新,并使用从服务器来处理所有的读请求,来提高读写效率和数据备份。
Redis采用同样的方法来实现自己的复制特性,并将其作为扩展的一种手段。
尽管Redis性能非常优秀,也会遇到性能瓶颈。比如对集合或者有序集合进行操作的时候,如果元素有上万个甚至上百万个,在这种情况下,执行操作所花费的时间要以秒来计算。但是即使一个命令只需要花费10毫秒,单个Redis实例1秒也只能处理100个命令。
在Redis持久化中,当从服务器链接主服务器的时候,主服务器会执行BGSAVE命令,将快照保存。而dir和dbfilename选项,用于配置快照位置。
(二)从服务器配置
开启从服务器的配置 slaveof host port 。那么从服务器启动的时候会根据 host 和port 来连接主服务器。
对于一个正在运行的从服务器,用户可以发送 SLAVEOF no one 让服务器终止复制操作,不再接受主服务器的数据更新;
也可以发送 SLAVEOF host port
让服务器开始复制一个新的主服务器。
(三)Redis复制过程
当从服务器发起连接主服务器的时候,主从服务器执行的所有操作:
1,同步总结
分2个部分:1)当前的快照;2)主服务器缓冲区中的命令;
分3个步骤:1)先执行快照;2)再执行缓冲区中的命令;3)同步之后从服务器执行主服务器的每一个命令;
主服务器是通过创建子进程和缓冲区进行同步的,如果系统的内存不够,那么效率会受到影响。一般内存预留30%~45%,用于执行BGSAVE命令和创建缓冲区。
2,注意
1)从服务器在进行同步的时候(初始连接的时候),会清空自己的所有数据,所以记得备份。
2)Redis不支持主主复制(master-master replication)。也就是两个服务器之间只能有一个 SLAVEOF 配置。互相设置为主服务器的两个Redis只会持续地占用大量的CPU资源、连续不断地尝试与对方通信,根据客户端连接服务器的不同,会导致不一致的数据或者得不到数据。
3,多个从服务器连接一个主服务器时,有时可以重用已有的快照文件。
主从链
当创建多个从服务器的时候,可能会导致:
1)负载太大,主服务器无法快速更新所有从服务器;
2)当复制需要通过互联网进行或者需要不同数据中心之间进行时,容易造成网络不可用;
Redis主服务器和从服务器并没有特别的不同,从服务区可以拥有自己的从服务器,从而形成主从链。从服务器对从服务器进行复制在操作上和从服务器对主服务器进行复制的唯一区别在于,如果从服务器X拥有从服务器Y,那么当从服务器X在执行步骤4时,它将断开与从服务器Y的连接,导致从服务器Y需要重新连接并重新同步(resync)。
所以,随着负载的增加,可以创建一个由Redis主从节点(master/slave node)组成的中间层来分担主服务器的复制工作。
(四)AOF持久化的主从复制简介
AOF进行持久化的时候,一般设置appendfsync everysec,这样服务器可以保持正常性能,但是会造成1秒的数据丢失。通过同时使用复制和AOF持久化,我们可以将数据持久化到多台机器上。
1)设置每台服务器 appendonly yes 选项和 appendfsync everysec,以保证多台服务器以每秒1次的频率将数据同步到硬盘上;
2)检验主服务器是否已经将写数据发送到从服务器。
扫一扫,通过微信也能学习