为保证高可用,实际中除了服务冗余,数据也要冗余,所以一些分布式组件,比如kafka等都会看到副本的概念,同样redis为了高可用也有副本的机制。
# 配置文件指定主节点redis的ip和端口信息# slaveof <masterip> <masterport>slaveof lacr_r1 6379# 主节点密码,用于同步前认证# masterauth <master-password>masterauth 122222# 主从失联后如何响应客户端# yes: 仍然用最新同步成功的数据响应,若初次# 同步,空值响应# no:响应错误 “SYNC with master in progress”slave-serve-stale-data yes# 从节点是否设置为只读,默认只读,但是可以设置为no# 可写,但这只能临时存储,一旦同步master以后,数据# 会丢失# 默认情况下,写slave会报错# (error) READONLY You can't# write against a read only slave.slave-read-only yes# 向slave传输快照时,是否不在磁盘上建立快照文件# no:默认选项,此时同步前会写快照文件,然后传输快照# 文件给slave# yes:主节点开启一个子进程,直接将rdb文件写入到与slave# 连接的socket中,不会写磁盘repl-diskless-sync no# master 有个同步传输队列存储了待同步的slave,# 待下一个同步周期来时给队列里的slave进行快照# 同步。# 配置为 diskless 模式时,为了一次能够同步给# 更多的slave,就是同步队列里有更多的slave,# 主节点同步前会有一个秒级别的等待,用来等待更# 多的slave进入同步队列,从而提高同步效率repl-diskless-sync-delay 5# 类似心跳,定义slave多长时间向master# 发送一个ping,默认10srepl-ping-slave-period 10# master 等待slave的ping的超时时间,# 设置上要大于 repl-ping-slave-periodrepl-timeout 60# 带宽和数据延迟的这种设置# no 占用更多带宽,发送更多数据,slave收到# 收到数据延迟低# yes tcp发送用更小的包,带宽小,但是slave# 收到数据会有延迟,大概40msrepl-disable-tcp-nodelay no# backlog 缓冲区# 主节点开辟的缓冲区,当slave分区网络# 断开时,重连没必要同步全部,只需要同步# 断开期间的即可,该缓冲设置越大,允许# slave断开的时间越长repl-backlog-size 1mb# 主节点多长时间没有slave链接时释放backlog# 缓冲区,单位s,设置0,表示永远不释放repl-backlog-ttl 3600# slave 优先级设定,当主节点工作不正常时# 该值越低的节点会被选为主节点,若设置为0# 表示永远不选则为主节点slave-priority 100# 当从节点数少于该配置的值时,不处理写请求# 默认为0min-slaves-to-write 3# 当从节点延迟超过10时,不处理写请求,延迟# 通过 PING 来评估# 默认为10smin-slaves-max-lag 10# 用于slave上报自己真实ip,port# 这些信息有助于redis哨兵发现slave# 实例,上报后这些信息可以用INFO,# ROLE 命令获取slave-announce-ip 5.5.5.5slave-announce-port 1234
主从复制流程

redis-slave 节点发起链接,slaveof 决定 redis-slave 节点发送 sync 命令
redis-master 开启子进程执行BGSAVE redis-master 执行完快照后,发送快照文件给 redis-slave redis-slave 丢弃自己的数据,载入redis-master 发送的快照 redis-master 发送缓冲区的写命令给 redis-slave redis-slave 执行这些缓冲区的命令,至此,一次完整的复制结束 redis-master 每接收一条写命令,则同步给从节点
主从复制注意事项
redis 服务器设置为从节点时,原来可能存储了一些数据,若不想丢失,在开始设置为从服务器之前备份好这些数据,因为一旦设置为从,从服务会丢弃原有的数据,使用主节点的数据 主服务器需要有足够的内存来创建子进程以及写缓冲区,一般最好让主服务器只使用50%~65%的内存,留下35%~45%用来BGSAVE子进程和写缓冲区
redis 不支持相互设置为主,也就是不支持主主复制,只支持主从复制 redis 主节点会尽可能的使用相同的快照发送给从节点,但是从节点不凑巧,在不同的时间点接入,那么主节点不得不每一个从节点执行复制的流程,此时响应服务性能会降低
主从链

有什么意义?当系统读请求要求特别高时,为了提高读性能,可能扩充很多从服务器,构成一主多从结构


数据冗余:主节点宕机,还有从节点的数据可用 存储高可用:主节点宕机,从节点可通过优先级提升为主 提升读性能:多个从节点,分散单点读压力
文章转载自老码农空杯修行记,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




