目录:
主从复制
master-slave 主从配置
备份与恢复
性能测试
管道技术
一 主从复制
Redis的主从复制功能非常强大,一个master可以拥有多个slave,而一个slave又可以拥有多个slave,如此下去,形成了强大的多级服务器集群架构。
主库只负责写数据,每次有数据更新都将更新的数据同步到它所有的从库,而从库只负责读数据。这样一来,就有了两个好处:
读写分离,不仅提高服务器的负载能力,并且可以根据读请求的规模自由增加或者减少从库的数量;
数据被复制成了了好几份,就算有一台机器出现故障,也可以使用其他机器的数据快速恢复。
需要注意的是:在Redis主从模式中,一台主库可以拥有多个从库,但是一个从库只能隶属于一个主库。
复制功能不会阻塞主服务器: 即使有一个或多个从服务器正在进行初次同步, 主服务器也可以继续处理命令请求。复制功能也不会阻塞从服务器。
复制过程
- 初始化:当一个从数据库启动时,会向主数据库发送SYNC命令,主数据库收到命令后,会开始在后台保存快照(执行 BGSAVE 命令保存RDB),并将保存快照期间接收到的命令缓存起来。当快照完成后,Redis会将快照文件和缓存的命令发给从数据库,从数据库收到数据后,会载入快照文件并执行缓存的命令。
- 同步阶段:复制初始化之结束后,主数据库每收到写命令时就会将命令同步给从数据库,从而保证主从数据库数据一致
需要注意:
当主从连接断开后,会重新进行复制初始化过程。但是主从服务器的数据库状态不一致的部分只有断线后主服务器执行那一部分修改数据库的命令,所以这时SYNC命令就非常浪费。Redis 2.8版本支持当从数据库再次连接到主数据库时,主数据库只需要将断线期间执行的命令发给从数据库,使用命令 PSYNC 用于断线后重连。
复制同步在整个主从同步过程,直到主从关系终止为止。在复制过程中,即使关闭了RDB方式的持久化,依旧会执行快照操作。
乐观复制
Redis 容忍在一定时间内主从数据库的内容是不同的,但是两者的数据最终会保持一致。
具体来说,Redis主从数据库之间的复制数据的过程本身是异步的,这意味着,主数据库执行完客户端的写请求后会立即将命令在主数据库的执行结果返回给客户端,而不会等待从数据库收到该命令后再返回给客户端。这一特性保证了复制后主从数据库的性能不会受到影响,但也会在一段时间内一个主从数据库数据不一致。
主数据库无法得知命令最终同步给了几个从数据库,不过Redis提供了两个配置选项来限制只有至少同步给指定数量的数据库时,主数据库才是可写的:
min-slaves-to-write 3
min-slave2-max-lag 10