简介

redis 主从模式复制,可以保证数据的安全性。

有些人认为 master-slave 暗指“奴隶制度”,因此建议修改掉,这个看似简单的修改实际上要付出昂贵的代价。

在redis5的时候,将 master-slave 架构的描述改为 master-replica,并且兼容之前的slave命令。

只是为 SLAVEOF 提供别名 REPLICAOF,所以仍然可以使用 SLAVEOF,但多了一个选项。

复制

1、redis复制是异步的,但是也指定几个从节点接受到复制后,才表示写成功。

2、如果网络出现抖动或者延迟,相对时间比较断,Redis副本可以与主节点进行增量同步即可。这个可以通过配置的缓存大小来控制。

3、复制过程是自动的,不需要手动干预,如果是网络断开了,Redis副本会自动重新尝试连接主节点,进行增量或者全量同步。

master-replica 配置

replicaof 192.168.122.100 7000

密码验证

如果主节点设置了密码验证,从节点同步的时候就需要设置masterauth这个参数进行同步验证。

masterauth cjwdVD6B2NXSDShBWWzD3sdPjISbOBrw

同步断开,副本继续回复请求

当副本节点与主节点断开,当从节点服务还可以用的时候,有两种不同的操作方式:

1、当replica-serve-stale-data 设置成yes(默认选项),副本将继续回复客户端的请求,只是这时候的数据跟主节点可能不一致;如果是第一次同步就会出现空数据的情况。

2、如果replica-serve-stale-data 设置成no,副本将对所有请求回复“SYNC with master in progress”的错误,除了 INFO, replicaOF, AUTH, PING, SHUTDOWN, REPLCONF, ROLE, CONFIG, SUBSCRIBE, UNSUBSCRIBE, PSUBSCRIBE, PUNSUBSCRIBE, PUBLISH, PUBSUB, COMMAND, POST, HOST, LATENCY 这些命令。

replica-serve-stale-data yes

副本只读

可以配置副本节点是否接受写操作,如果接受写操作一般都会出现数据不一致的情况。

从redis 2.6 开始,默认副本节点都是只读的

replica-read-only yes

副本数据不落地磁盘

副本同步可以写到磁盘也可以不写使用socket方式:

1、使用磁盘的方式,新的副本或者断开长时间无法继续增量同步的副本,就需要进行全量同步。

2、如果是socket方式,不写到磁盘,主节点的rdb文件直接通过socket,写到副本节点内存,不同步到磁盘。这样子可以有更快的同步数据和性能。

注意:目前socket的方式还是处于实验阶段

repl-diskless-sync no

无盘同步延迟

当使用socket方式同步的时候,多个节点同步可能导致主节点出现异常,这是延迟同步可以缓解这种情况,默认是延迟5s。完全禁用延迟,尽快的同步数据设置为0即可。

repl-diskless-sync-delay 5

ping存活

副本会间隔一段时间发送ping操作,可以通过repl_ping_replica_period参数进行设置,默认是10s

同步超时

同步超时时间设置

repl-timeout 60

TCP_NODELAY

启用这个参数可以减少TCP包,使用更少的带宽进行同步。但是可以会导致副本节点的数据延迟,最多40毫秒。

repl-disable-tcp-nodelay no

设置复制缓存大小

当副本断开的时候,数据同步将写在backlog的缓冲区里面,重新连接的时候直接从缓冲区开始进行增量同步即可。

这个缓冲区之后副本连接的时候才会分配。缓冲区越大,可以缓存数据越多,意味着副本断开时间越长,还可以进行增量同步。

repl-backlog-size 1mb

缓冲区释放时间

当副本不再连接,backlog缓冲区将被释放。如果设置为0,表示永远不释放。

repl-backlog-ttl 3600

副本优先级

当主节点不可用的时候,哨兵根据优先级提升为主节点,数字越低表示优先级越高,默认是100

replica-priority 100

副本写延迟,禁用主节点的写操作

副本同步会存在延迟,至少3个写操作,时间延迟小于等于10秒的副本,主节点就停止写入操作。这两个参数只要一个设置为0,就禁用该功能。

min-replicas-to-write 3
min-replicas-max-lag 10

副本通知IP和端口

redis服务没有跟哨兵在同一个网络,比如:在容器里面跑,info replication查看到IP和端口,哨兵就有可能访问不到,这时候就需要,指定对外的IP和端口,提供给哨兵检测。

 replica-announce-ip 192.168.122.100
replica-announce-port 1234