所以可以使用配置 repl-diskless-sync-delay 5 参数指定一个延迟时间,这个单位是秒,让 master 节点等待一会,让更多 slave 节点连接再执行传输 。
因为一旦开始传输,master 节点无法响应新的 slave 节点的全量复制请求,只能在队列中等待下一次 RDB 内存快照传输 。
想要关闭这个功能,设置为 0 即可 。
8、repl-diskless-load
mastar 节点有两种方式传输 RDB,slave 节点也有两种方式加载 master 传输过来的 RDB 数据 。
- 传统方式:接受到数据后,先持久化到磁盘,再从磁盘加载 RDB 文件恢复数据到内存中,这是传统方式 。
- diskless-load:从 Socket 中一边接受数据,一边解析,实现无盘化 。
- disabled:不使用 diskless-load 方式,即采用磁盘化的传统方式 。
- on-empty-db:安全模式下使用 diskless-load(也就 slave 节点数据库为空的时候使用 diskless-load) 。
- swapdb:使用 diskless-load 方式加载,slave 节点会缓存一份当前数据库的数据,再清空数据库,接着进行 Socket 读取实现加载 。缓存一份数据的目的是防止读取 Socket 失败 。
另外,该模式会占用更多内存,可能会导致 OOM 。
9、repl-ping-replica-period
默认配置repl-ping-replica-period 10 表示 slave 每 10 秒 PING 一次 master 。
10、repl-timeout
很重要的一个参数,slave 与 master 之间的复制超时时间,默认配置是repl-timeout 60,表示在 60 秒内 ping 不通,则判定超时 。
超时包含以下三种情况 。
- slave 角度,全量同步期间,在 repl-timeout 时间内没有收到 master 传输的 RDB 内存快照文件 。
- slave 角度,在 repl-timeout 时间内没有收到 master 发送的数据包或者 ping 。
- master 角度,在 repl-timeout 时间内没有收到 REPCONF ACK (复制偏移量 offset)确认信息 。
你需要注意的是,这个配置一定要大于 repl-ping-replica-period的值,否则每次心跳监测都超时 。
11、repl-disable-tcp-nodelay
当 slave 与 master 全量同步(slave 发送 psync/sync 指令给 master)完成后,后续的增量同步是否设置成 TCP_NODELAY 。
如果设置成 yes,master 将合并小的 TCP 包从而节省带宽,但是会增加同步延迟(40 ms),造成 master 与 slave 数据不一致;设置成 no,则 master 会立即发送数据给 slave,没有延迟 。
默认配置 repl-disable-tcp-nodelay no 。
12、repl-backlog-size
设置主从复制积压缓冲区(backlog) 容量大小,这是一个环形数组,正常主从同步不涉及到 repl-backlog 。当主从断开重连,repl-backlog 的作用就出来了 。
缓冲区用于存放断连期间 master 接受的写请求数据,当主从断开重连,通常不需要执行全量同步,只需要将断连期间的部分数据传递到 slave 即可 。
主从复制积压缓冲区越大,slave 可以承受的断连时间越长 。
默认配置是 repl-backlog-size 1mb,建议根据每秒流量大小和断开重连时间长,设置大一点,比如 128 mb 。
13、repl-backlog-ttl
用于配置当 master 与 slave 断连多少秒之后,master 清空主从复制积压缓冲区(repl-backlog) 。配置成 0 ,表示永远不清空 。默认配置repl-backlog-ttl 3600 。
14、replica-priority
slave 优先级,这个配置是给哨兵使用的,当 master 节点挂掉,哨兵会选择一个 priority 最小的 slave 节点作为新的 master,这个值越小没接越优先选中 。
如果是 0,那意味着这个 slave 将不能选中成为 master,默认配置是 replica-priority 100 。
15、min-slaves-to-write 和 min-slaves-max-lag
这两个配置要一起设置才有意义,如果有一个配置成 0,表示关闭该特性 。
先看默认配置含义 。
min-replicas-to-write 3min-replicas-max-lag 10
如果 master 发现超过 3 个 slave 节点连接 master 延迟大于 10 秒,那么 master 就停止接收客户端写请求 。这么做的目的是为了尽可能保证主从数据一致性 。master 会记录每个 slave 最近一次发来 ping 的时间,掌握每个 slave 的运行情况 。
推荐阅读
- 职业教育|热血江湖手游:经典五大职业设定,公测火爆开启,两大门派争霸,谁能成为江湖第一?
- “魔兽”退场 两代玩家告别青春
- 华晨宇|有一种“差距”叫邓紫棋和华晨宇,分手5年后,两人现状天差地别
- 王思聪|王思聪与网红喝下午茶,女方被扒已婚有娃,两人关系引发猜测
- 华晨宇|华晨宇王悦伊高调秀恩爱,两人穿情侣装、戴情侣口罩,细节好浪漫
- 陈乔恩|陈乔恩和Alan晒照秀幸福,甜喊老公老婆示爱,两人越来越有夫妻相
- 林青霞|林青霞邀请作家莫言家中做客,吃水饺喝茅台,两人同龄像隔代人!
- 梦中的那片海|68岁林青霞看京剧,和大师交头接耳显亲密,两位友人都戴千万翡翠
- 王思聪|王思聪带俩美女玩剧本杀,大热天套两件T恤,同回酒店当护花使者
- 李明|女同事请吃饭,喊两位闺蜜一起,吃完准备离开就被服务员拦了下来!