原文:https://raw.githubusercontent.com/antirez/redis/2.8/redis.conf
主从备份。使用slaveof创建一个Redis实例作为另一个Redis服务器的备份。一些可以尽快理解关于redis备份的新东西。
1)redis备份是异步的,但你可以这样配置,若主站没有至少指定数量的从站与之相连,主站就停止接收写操作。
2)如果同步链接丢失了一小段时间,redis从站可以与主站执行部分同步。你可能想要将备份工作储备的大小(见本文下一节)配置成你希望的值。
3)备份是自动的,不需要用户关注。断网后,从站会自动地与主站重连和同步。
# slaveof <masterip> <masterport>
如果主站设置了密码保护(使用配置指令“requirepass”),它会告诉从站在启动备份同步进程前先进行认证,否则主站会拒绝从站的请求。
# masterauth <master-password>
当一个从站失去与主站的连接,或者正在与主站同步,从站可以有以下两种行为:
1)如果slave-serve-stale-data设置为yes(默认),从站会继续响应客户端的请求,有可能数据是过时的,如果正在进行第一次同步,数据集有可以是空的。
2)如果slave-serve_stale-data设置为no,从站会对除了(INFO和SLAVEOF)以外的所有命令返回“正在与主站同步”。
slave-serve-stale-data yes
你可以配置一个从站实例是否接收写请求。向一个从站写数据对于存储临时数据是有用的(因为与主站同步之后写在从站上的数据会被删除),也有可能会引起问题,因为客户端的写操作有可能是一个误操作。
从redis2.6版本开始,从站默认为只读。
注意:只读从站的设计不是用于暴露给网络上未受信任的客户端。它只是对误操作的一层保护。
默认情况下只读从站上仍然可以执行管理命令,例如CONFIG, DEBUG等。你可以通过使用rename-command命令隐藏所有用于管理的或危险的命令的方式来提高安全性。
slave-read-only yes
备份同步策略:硬盘还是套接字。
新的从站和重连后不能继续备份的从站,需要做所谓的“完全备份”,即将一个RDB文件从主站传送到从站。这个传送有以下两种方式:
1)硬盘备份:redis主站创建一个新的进程,用于把RDB文件写到硬盘上。过一会儿,其父进程递增地将文件传送给从站。
2)无硬盘备份:redis主站创建一个新的进程,子进程直接把RDB文件写到从站的套接字,不需要用到硬盘。
在硬盘备份的情况下,主站的子进程生成RDB文件。一旦生成,多个从站可以立即排成队列使用主站的RDB文件。在无硬盘备份的情况下,一次RDB传送开始,新的从站到达后,需要等待现在的传送结束,才能开启新的传送。
如果使用无硬盘备份,主站会在开始传送之间等待一段时间(可配置,以秒为单位),希望等待多个子站到达后并行传送。
在硬盘低速而网络高速(高带宽)情况下,无硬盘备份更好。
repl-diskless-sync no
当启用无硬盘备份,服务器等待一段时间后才会通过套接字向从站传送RDB文件,这个等待时间是可配置的。
这一点很重要,因为一旦传送开始,就不可能再为一个新到达的从站服务。从站则要排队等待下一次RDB传送。因此服务器等待一段时间以期更多的从站到达。
延迟时间以秒为单位,默认为5秒。要关掉这一功能,只需将它设置为0秒,传送会立即启动。
repl-diskless-sync-delay 5
从站以一个预先设置好的时间间隔向服务器发送PING。这个时间间隔可以通过repl_ping_slave_period选项改变。默认值是10秒。
# repl-ping-slave-period 10
接下来的选项为以下内容设置备份的超时时间:
1)从从站的角度,同步期间的批量传输的I/O
2)从站角度认为的主站超时(数据,ping)
3)主站角度认为的从站超时(REPLCONF ACK pings)
确认这些值比定义的repl-ping-slave-period要大,否则每次主站和从站之间通信低速时都会被检测为超时。
# repl-timeout 60
同步之后是否禁用从站上的TCP_NODELAY?
如果你选择yes,redis会使用较少量的TCP包和带宽向从站发送数据。但这会导致在从站增加一点数据的延时。linux内核默认配置情况下最多40毫秒的延时。
如果选择no,从站的数据延时不会那么多,但备份需要的带宽相对较多。
默认情况下我们将潜在因素优化,但在高负载情况下或者在主从站都跳的情况下,把它切换为yes是个好主意。
repl-disable-tcp-nodelay no
设置备份的工作储备大小。工作储备是一个缓冲区,当从站断开一段时间的情况时,它替从站接收存储数据,因此当从站重连时,通常不需要完全备份,只需要一个部分同步就可以,即把从站断开时错过的一部分数据接收。
工作储备越大,从站可以断开并稍后执行部分同步的断开时间就越长。
只要有一个从站连接,就会立刻分配一个工作储备。
# repl-backlog-size 1mb
主站有一段时间没有与从站连接,对应的工作储备就会自动释放。接下来这个选项用于配置释放前等待的秒数,秒数从断开的那一刻开始计算。
值为0表示不释放。
# repl-backlog-ttl 3600
从站优先级是可以从redis的INFO命令输出中查到的一个整数。当主站不能正常工作时,redis sentinel使用它来选择一个从站并将它提升为主站。
低优先级的从站被认为更适合于提升,因此如果有三个从站优先级分别是10, 100, 25,sentinel会选择优先级为10的从站,因为它的优先级最低。
然而优先级值为0的从站不能执行主站的角色,因此优先级为0的从站永远不会被redis sentinel提升。
默认优先级是100
slave-priority 100
主站可以停止接受写请求,当与它连接的从站少于N个,滞后少于M秒。
N个从站必须是在线状态。
延迟的秒数必须<=所定义的值,延迟秒数是从最后一次收到的来自从站的ping开始计算。ping通常是每秒一次。
这一选项并不保证N个备份都会接受写请求,但是会限制在指定秒数内由于从站数量不够导致的写操作丢失的情况。
如果想要至少3个从站且延迟少于10秒,这样写:
# min-slaves-to-write 3
# min-slaves-max-lag 10
设置某一个为0表示禁用这一功能。
默认情况下default min-slaves-to-write设置为0(禁用)而min-slaves-max-lag设置为10。