-redis已经发现了这个读写分离场景特别普遍,自身集成了读写分离供用户使用。我们只需在redis的配置文件里面加上一条,【slaveof host port】语句
- 配置过程,启动多个redis节点,修改节点里面的redis.conf配置文件
服务器下线导致数据丢失,slave下线之后怎么保证数据的同步?
在进行复制的主从服务器双方的数据库将保存相同的数据,概念上将这种现在称为“数据库状态一致”
RDB 全量持久化 AOF append only if 增量持久化
1.) redis2.8版本之前使用旧版复制功能SYNC
- SYNC是一个非常耗费资源的操作
- 主服务器需要执行BGSAVE命令来生成RDB文件,这个生成操作会耗费主服务器大量的的CPU、内存和磁盘读写资源
- 主服务器将RDB文件发送给从服务器,这个发送操作会耗费主从服务器大量的网络带宽和流量,并对主服务器响应命令
- 请求的时间产生影响:接收到RDB文件的从服务器在载入文件的过程是阻塞的,无法处理命令请求
2.) 2.8之后使用PSYNC
-
PSYNC命令具有完整重同步(full resynchronization)和部分重同步(partial resynchronization1)两种模式
- 部分重同步功能由以下三个部分构成:
- 主服务的复制偏移量(replication offset)和从服务器的复制偏移量
- 主服务器的复制积压缓冲区(replication backlog),默认大小为1M
- 服务器的运行ID(run ID),用于存储服务器标识,如从服务器断线重新连接,取到主服务器的运行ID与重接后的主服务器运行ID进行对比,从而判断是执行部分重同步还是执行完整重同步