Redis—主从配置


前言

  前面一篇介绍了Redis常见参数配置,这篇文章主要介绍Redis的主从。


一、Redis主从简介

  Redis的高可靠性,这里有两层含义:一是数据尽量少丢失,二是服务尽量少中断。AOF 和 RDB 保证了前者,而对于后者,Redis 的做法就是增加副本冗余量,将一份数据同时保存在多个实例上。即使有一个实例出现了故 障,需要过一段时间才能恢复,其他实例也可以对外提供服务,不会影响业务使用。

Redis 提供了主从库模式,以保证数据副本的一致,主从库之间采用的是读写分 离的方式。

  1. 读操作:主库、从库都可以接收;
  2. 写操作:首先到主库执行,然后,主库将写操作同步给从库。

二、参数详解

replicaof
  主从复制。使用 replicaof 来让一个 Redis 实例复制另一个 Redis 实例。

  1. Redis 复制是异步进行的,但是可以通过配置让 Redis主节点拒绝写请求:配置会给定一个值,主节点至少需要和大于该值的从节点个数成功连接。
  2. 如果 Redis 从节点和主节点意外断连了很少的一段时间,从节点可以向主节点进行增量复制。
  3. 复制会自动进行且不需要人为介入。

配置格式:replicaof masterip masterport

masterauth
  如果主节点配置了密码(使用了 “requirepass” 配置项),从节点需要进行密码认证才能进行复制同步的过程,否则主节点会直接拒绝从节点的复制请求。
配置格式:masterauth master-password

replica-serve-stale-data yes
  当复制过程与主节点失去连接,或者当复制正在进行时,复制可以有两种行为模式:

  1. 如果 replica-serve-stale-data 设置为 ‘yes’(默认设置),从节点仍可以处理客户端请求,但该从节点的数据很可能和主节点不同步,如果这是与主节点进行的第一次同步,从节点的数据也可能是空数据集,。
  2. 如果 replica-serve-stale-data 设置成 ‘no’,从节点会对除了 INFO,replicaOF,AUTH,PING,SHUTDOWN,REPLCONF,ROLE,CONFIG,SUBSCRIBE,UNSUBSCRIBE,PSUBSCRIBE,PUNSUBSCRIBE,PUBLISH,PUBSUB,COMMAND, POST,HOST: and LATENCY 这些命令之外的请求均返回 “SYNC with master in process”。

默认配置:replica-serve-stale-data yes

replica-read-only
  可以配置从节点是否可以处理写请求。针对从节点开启写权限来存储时效低的(ephemeral)数据可能是一种有效的方式(因为写入到从节点的数据很可能随着重新同步而被删除),但是开启该配置也会导致一些问题。从 Redis 2.6 开始从节点默认是仅可读的。
默认配置:replica-read-only yes

repl-diskless-sync
  同步复制策略:硬盘或者套接字(不使用硬盘的复制策略目前还在实验阶段)
  新建立连接和重连的副本不会根据数据情况进行恢复传输,只会进行全量复制。主节点会传输在从节点之间传输 RDB 文件。传输行为有两种方式:

  1. 硬盘备份:Redis 主节点创建一个子进程来向硬盘写 RDB 文件。之后由父进程持续的文件传给副本。
  2. 不使用硬盘:Redis 主节点建立一个进程直接向副本的网络套接字写 RDB 文件,不涉及到硬盘。

  对于方式 1,在生成 RDB 文件时,多个副本会进行入队并在当前子进程完成 RDB 文件时立即为副本进行 RDB 传输。对于方式 2,一旦传输开始,新来的副本传输请求会入队且只在当前的传输断开后才建立新的传输连接。
  如果使用方式 2,主节点会等待一段时间,根据具体的配置,等待是为了可以在开始传输前可以有期望的副本同步请求到达,这样可以使用并行传输提高效率。
  对于配置是比较慢的硬盘,而网络很快(带宽大)的情况下,使用方式 2 进行副本同步会更适合。

默认配置:repl-diskless-sync no

repl-diskless-sync-delay
  如果 diskless sync 是开启的话,就需要配置一个延迟的秒数,这样可以服务更多通过 socket 传输 RDB 文件的副本。
  这个配置很重要,因为一旦传输开始,就不能为新来的副本传输服务,只能入队等待下一次 RDB 传输,所以该配置一个延迟的值就是为了让更多的副本请求到达。
  延迟配置的单位是秒,默认是 5 秒。不想要该延迟的话可以配置为 0 秒,传输就会立即开始。

默认配置:repl-diskless-sync-delay 5

repl-ping-replica-period
  副本会根据配置好的时间间隔(interval)向主节点发送 PING 命令。可以通过 repl_ping_replica_period 配置修改时间间隔。默认为 10 秒。
配置格式:repl-ping-replica-period 10

repl-timeout
下面的配置会将副本进行超时处理,为了:

  1. 在副本的角度,在同步过程中批量进行 I/O 传输。
  2. 从副本 s 的角度,主节点超时了。
  3. 从主节点的角度,副本超时了。

需要重视的一点是确保该选项的配置比 repl-ping-replica-period 配置的值更高,否则每次主从之间的网络比较拥挤时就容易被判定为超时。
配置格式:repl-timeout 60

repl-disable-tcp-nodelay
同步过后在副本套接字上关闭 TCP_NODELAY?
  如果选择了 ‘yes’ ,Redis 会使用很小的 TCP 包,占用很低的带宽来想副本发送数据。但是这么做到达副本的数据会有一些延迟,使用默认的配置值且是 Linux 内核该延迟最多可能 40 毫秒。
  如果选择 ‘no’,副本的数据延迟会更低但是占用的带宽会更多一些。

默认会为了低延迟进行优化,但是在比较拥挤网络情况下或者是主节点和副本之间的网络情况比较复杂,比如中间有很多路由跳转的情况下,把选项设置为 ‘yes’ 应该会比较适合。
默认配置:repl-disable-tcp-nodelay no

repl-backlog-size
  配置副本的缓冲区(backlog)大小。该缓冲区用来在副本断开连接后暂存副本数据。这样做是因为副本重新连接后,不一定要重新进行全量复制,很多时候增量复制同步(仅同步断连期间副本可能丢失的数据)完全足够了。
  配置的缓冲区越大,副本可以承受的断连时间可以更长。至少有一个副本连接时缓冲区才会进行分配。

配置格式:repl-backlog-size 1mb

repl-backlog-ttl
  主节点如果一段时间没有副本连接,上面提到的缓冲区会被释放。可以通过配置一个指定的时间来释放缓冲区,如果主节点在这个时间内还没有与新的副本建立连接。
  需要注意的是副本不会因为超时释放缓冲区,因为副本可能会被晋升(promot)为主节点,需要保持对其他副本进行增量复制的能力:因此他们总是积累缓冲区。配置为 0 意味着不释放缓冲区。

配置格式:repl-backlog-ttl 3600

replica-priority
  副本的优先级是一个整型数字,可以由 Redis 的 INFO 命令显示。优先级的作用在于当主节点无法提供服务后,Redis 哨兵会使用到优先级进行选举副本,晋升为主节点。
  值越低,代表该副本晋升成为主节点的优先级越高,比如说有三个副本,优先级的值分别为 10,100,25,Redis 哨兵会选择最低的那个,即优先级配置为 10 的那个。但是,一个特殊的配置值 ‘0’,意味着该副本不可能充当主节点的角色,故优先级配置为 0 的副本永远不会被 Redis 哨兵选择晋升。默认的优先级配置时 100.

默认配置:replica-priority 100

min-replicas-to-write 和 min-replicas-max-lag
  主节点可以根据目前连接的延迟慢于 M 秒的副本数量,选择是否拒绝写请求。
  数量 N 的副本需要是 “online” 的状态。

延迟的秒数(The lag(落后) in seconds) M ,计算方式是根据上一次副本发送 ping 命令到主节点的时间计算。通常每秒都会发送 ping 命令。
这个选项不保证 N 个副本会接受写请求,但是如果没有足够的副本可用,则会限制那些丢失写请求的暴露窗口至特定的秒数。
比如要求至少有三个延迟小等于 10 秒的副本,可以这么配置:

min-replicas-to-write 3
min-replicas-max-lag 10

配置设置为 0 会关闭该功能。
默认的 min-replicas-to-write 被设置为 0(功能关闭),
# min-replicas-max-lag 设置为 10.

replica-announce-ip 和 replica-announce-port
  主节点应该有多种方式来列举出依附与它的副本的信息(ip 和 port)。比如 “INFO replication” 就可以提供这些信息,它也会被其他的功能使用,比如 Redis 哨兵就会使用该命令列举副本实例。还有一种方式是在主节点运行 “ROLE” 命令来获取这些信息。

副本获取监听的 IP 和地址分别通过以下的方式:

  • IP:IP 地址在副本和主节点建立的 socket 连接中自动被检测到。
  • Port:端口信息会在副本进行复制的 TCP 握手中交流传递,端口也是副本用来监听连接的一部分。

然而,如果使用了端口转发或者 NAT(Network Address Translation),实际连接到副本很可能通过的是不同的 IP 和端口对。下面的两个配置选项用来让副本上报特定的 IP 和端口集合给它连接的主节点,之后主节点使用 “INFO” 或者 “ROLE” 命令都可以输出这些上报的值。

如果只想上报 ip 或端口其中一个,就没有必要两个都使用。

replica-announce-ip 1.1.1.1
replica-announce-port 6379

总结

以上就是Redis的主从服务配置参数介绍,如有不正之处,欢迎留言指出。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值