1. 关闭AOF,开启preamble
首先确定一点,无论是否在配置文件中开启了RDB、AOF或者preamble,都不影响手动执行save,bgsave,bgrewrite的结果。也就是即使都关闭,还是可以通过save,bgsave生成RDB文件,也可以通过bgrewriteof生成AOF文件。
如果关闭了AOF,但是开启了preamble混合模式,这种情况下AOF是不会生效的,只会使用默认的RDB方式。但是如果手动去bgrewriteof,生成的AOF还是混合模式的。无论是手动去执行,还是自动去执行,效果都是一样的。
2. 开启AOF,同时开启preamble
这时,主机一运行,就会自动生成AOF文件,并且存一些初始化的信息。所有的操作是会从主机同步到从机的AOF增量日志文件中。
这时候如果主机挂掉,可以手动去把选定的一个从机作为主机来用。但是即使主机挂掉,从机也只是从机的角色,所以必须要解除对原来主机的追随。具体解决方式是:在选定将作为主机的客户端执行命令replicaof no one
,代表不再追随别人。然后再把其他的从机用replicaof host port
的方式追随到新主机。
但这种方式,还是需要人工去干预,太过于繁琐,所以redis提供了一套哨兵机制的方式,用程序自己去监控并实现自动的故障转移。下篇再作分析。
3. 配置文件解析
具体的配置在redis的配置文件里的replication项。一些常见的配置如下:
replicaof host port
代表本机在启动时要追随哪个主机
masterauth password
在追随时被追随主机的密码
replica-serve-stale-data yes/no
是主机给本机传输数据的期间,是否对外暴露本地老数据
replica-read-only yes/no
是否开启只读,设置成no表示可以写入
repl-diskless-sync yes/no
是否开启无磁盘传输。如果网络较好且磁盘方式较慢,可以选择开启
repl-backlog-size 1mb
在主从复制过程中,主redis维护的队列大小。如果在从redis挂掉期间,主redis传到队列的数据把原本的偏移量挤出,则触发全量同步。如果没有挤出,则继续从偏移量处“断点续传”
min-replicas-to-write
min-replicas-max-lag
这两个选项代表。最少几个写成功,比较看重数据的准确性,由弱一致性偏向强一致性。默认注释掉的,可以根据业务场景选择是否开启