自学内容网 自学内容网

Redis的主从复制

让一个Redis服务器成为另一个Redis的Slave

slaveeof 主Redis服务器ip 端口
此后slave只能读不能写了,并且slave的数据和master的相同。
只能写master。
此时主从服务器之间会存在不一致的情况。

AP模型 - CP模型

Redis 的主从复制默认情况下更倾向于 AP 模型,优先保证可用性和分区容忍性。
cp模型需要保证更多的强一致性。
当然redis可以通过C特定配置和命令,Redis 可以提供更高的一致性,但可能会牺牲部分可用性,特别是在网络分区的情况下。

为了实现可用性

(1)简单主从结构的心跳机制
(2)异步写入,写入不会立刻返回,也不会阻塞,而是将数据写入同步缓冲区中,等从服务器返回后,主服务器再给客户端返回写入成功。

尽管使用了 WAIT 命令或者配置了 min-slaves-to-write 参数,Redis 的复制机制仍然是异步的。主服务器在接收到客户端的写操作后,会将这些操作记录在复制积压缓冲区中,并异步地将操作发送给所有连接的从服务器。主服务器不会等待从服务器确认接收到数据就继续处理其他请求,这保证了系统的高响应性和性能。

(3)可以通过哨兵和集群来实现更强的高可用。

为了实现分区容忍

Redis可以通过配置哨兵,来进行分区后的选举。

为了实现一致性:多个从节点确认后才返回写入成功

(1)多个从节点在指定时间内确认后才给主节点返回写入成功:不会阻塞,可以连续写入多个set

配置 min-slaves-to-write 和 min-slaves-max-lag
min-slaves-to-write:设置 master 需要等待至少指定数量的 slave 确认写操作。
min-slaves-max-lag:设置 slave 在多长时间内必须确认写操作,否则 master 将拒绝新的写操作。

配置示例:
min-slaves-to-write 2
min-slaves-max-lag 10

这意味着 master 只有在至少有 2 个 slave 的复制延迟小于 10 秒时,才会接受写操作。

(2)在事务中使用wait也是保证多个从节点确认后才返回写入成功:WAIT 命令会阻塞事务,直到满足指定的条件或者超时。
MULTI
SET key1 value1
WAIT 2 1000   // 等待至少 2 个 slave 在 1000 毫秒内确认写操作
EXEC

复制的具体实现

(1)同步:启动时,从服务器复制完整的主服务器数据

(2)命令传播:主服务器的写入传递给从服务器

通过传递指令实现
Redis 使用异步复制,即主服务器将写入操作记录在称为复制积压缓冲区(replication backlog)的地方,并异步将这些操作发送给所有附属的从服务器。

(3)断线重同步:利用数据偏移量,只同步丢失的数据,而不是同步完整的数据库

复制偏移量缓冲区:如果缓冲区内存在从服务器丢失的完整数据,那么可以使用重同步而不是同步


原文地址:https://blog.csdn.net/qq_35693377/article/details/140374020

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!