Redis repl-disable-tcp-nodelay配置
问题:在slave和master同步后(发送psync/sync),后续的同步是否设置成TCP_NODELAY? 假如设置成yes,则redis会合并小的TCP包从而节省带宽,但会增加同步延迟(40ms),造成master与slave数据不一致。 假如设置成no,则redis master会立即发送同步数据,没有延迟。 前者关注性能,后者关注一致性
是否禁止复制tcp链接的tcp nodelay参数,可传递yes或者no。默认是no,即开启tcp nodelay。 如果master设置了yes来禁止tcp nodelay设置,在把数据复制给slave的时候,会减少包的数量和更小的网络带宽。但是这也可能带来数据的延迟。默认我们推荐更小的延迟,但是在数据量传输很大的场景下,建议选择yes。
redis执行slaveof命令过程原理(执行步骤)
从数据库向主数据库发送sync命令。主数据库接收sync命令后,执行BGSAVE命令(保存快照),创建一个RDB文件,在创建RDB文件期间执行的命令将保存在缓冲区中。当主数据库执行完BGSAVE时,会向从数据库发送RDB文件,而从数据库会接收并载入该文件。主数据库将缓冲区的所有写命令发给从服务器执行。以上处理完之后,之后主数据库每执行一个写命令,都会将被执行的写命令发送给从数据库。
注意:在Redis2.8之前,主从断线或则重启之后再重连接,都需要做一次完整的sync操作(5步骤),即使断线期间只有几条的更新操作或则是没有操作,导致系统资源极度浪费。Redis2.8之后,会用一个psync来替换sync,不会进行完整的sync操作,只需要同步断线期间的记录。相关参数:repl-backlog-size、repl-backlog-ttl
repl-diskless-sync-delay
diskless复制的延迟时间,防止设置为0。一旦复制开始,节点不会再接收新slave的复制请求直到下一个rdb传输。所以最好等待一段时间,等更多的slave连上来。 repl-diskless-sync-delay默认为5
sentinel日志信息
# Sentinel runid is 07a40fd381d618f0716c20b270d5c1bd47ef8fa3
+monitor master mymaster
127.0.0.1 10086 quorum
2 #主加入监控
+slave slave
127.0.0.1:
10087 127.0.0.1 10087 @
T1 127.0.0.1 10086 #检测到一个slave并添加进slave列表
+slave slave
127.0.0.1:
10088 127.0.0.1 10088 @
T1 127.0.0.1 10086 #检测到一个slave并添加进slave列表
+sentinel sentinel
127.0.0.1:
20087 127.0.0.1 20087 @
T1 127.0.0.1 10086 #增加了一个sentinel
+sentinel sentinel
127.0.0.1:
20088 127.0.0.1 20088 @
T1 127.0.0.1 10086 #增加了一个sentinel
+reset-master <
instance details>
+slave <
instance details>
+failover-state-reconf-slaves <
instance details>
+failover-detected <
instance details>
+slave-reconf-sent <
instance details>
+slave-reconf-inprog <
instance details>
+slave-reconf-done <
instance details>
-dup-sentinel <
instance details>
+sentinel <
instance details>
+sdown <
instance details>
-sdown <
instance details>
+odown <
instance details>
-odown <
instance details>
+new-epoch <
instance details>
+try-failover <
instance details>
+elected-leader <
instance details>
+failover-state-select-slave <
instance details>
no-good-slave <
instance details>
selected-slave <
instance details>
failover-state-send-slaveof-noone <
instance details>
failover-end-for-timeout <
instance details>
failover-end <
instance details>
switch-master <master name> <oldip> <oldport> <newip> <newport>
+tilt
-tilt
美团在Redis上踩过的一些坑-目录(本人非美团) 博客地址:http://carlosfu.iteye.com/blog/2254154