写点什么

Redis - 配置文件

发布于: 刚刚
Redis - 配置文件

配置指导着程序的行为,看看配置怎么影响,有哪些影响,也是掌握内在原理的好方法,最佳实践的必要手段。

配置文件主要分为以下几个模块。

网络

bind

绑定本机的 IP 地址,redis 只接受来自该地址的请求。在本机有多个 ip 地址的情况下有意义,通过该配置可以设置只接受来自某个或者某几个 ip 的请求,避免把 redis 暴露给所有 ip。


port

redis 监听的本机端口


protected-mode

网络保护模式,如果没有设置 bind 且没有设置验证密码,当该模式开启时,redis 只接受本机环回 IP 的请求,不接受本机面向外部的 ip 请求。


tcp-backlog

建立 tcp 连接时的参数,即用于存放已完成三次握手的连接的队列长度,等待 accept 调用返回给应用。如果设置太小,accept 太慢,新增的完成握手的连接就放不到该队列了(协议默认会丢弃客户端发送的 ack,人为造成三次握手失败,等待超时重发)。

该参数同时也受/proc/sys/net/core/somaxconn 控制,如果应用设置的 backlog 值大于该值,这会以该值为准,所以需要同步调整该值。

一般情况下,accept 很快,队列都是空的,使用 redis 的默认值即可,不需要调整。


timeout

设置连接空闲超时时间,若一个连接超过 timeout 时间空闲,则关闭关连接。取值整数,单位秒,0 表示不关闭,正整数表示超时时间。

一般设置为 0 即可,特别是使用 redis 客户端,会自行维护长连接,服务端没有必要再来控制。除非服务端很在意连接资源。


tcp-keepalive

tcp 连接保活机制,机制开启端,固定周期发送一个 ack 探测包,检测对端是否存活、连接是否有效,或者用于保活,防止防火墙等中间网络设备因为连接太长时间没有负载而将连接删除。该配置项配置发送探测包的周期,默认 5 分钟,默认即可。

通用

daemonize

指示 redis 是否要以守护进程的方式启动,如果否,则随着命令行或者其他启动终端的退出,redis 也退出。如果是,则 redis 一直在后台运行,除非 kill 掉。


loglevel

redis 日志输出的级别,默认 notice。


database

redis 中维护的 database 数量,单机有效,集群环境有且只有一个 databse,不受配置影响。

RDB 持久化

save [seconds] [changes]

rdb 自动持久化,每隔 seconds 检查下是否发生了 changes 次写操作,如果是则进行 rdb 持久化。可以配多组。不配置该项,则不自动进行 rdb 持久化。


stop-writes-on-bgsave-error

fork 出子进程后,如果子进程持久化出现异常,主进程是否仍然处理写请求。这就看业务场景对持久化的要求程度,持久化是必须的,则设置为 yes,持久化有异常,则同时就不处理写请求了;如果不是必须的,则设置为 no,持久化有异常,也处理写请求,哪怕这些新的写请求在后续持久化时仍然会失败。


rdbcompression

持久化成 rdb 文件时,是否对数据进行压缩,默认打开。打开时,多耗 cpu,但文件较小,导出和加载

比较快;关闭时,cpu 消耗小,文件大,导出和加载比较慢。


rdbchecksum

rdb 数据的 crc 校验,会耗费更多的 cpu,但让数据更加安全、可靠,默认打开。开启时,持久化成 rdb 文件时,会计算 crc 并添加文件尾部,加载时会进行 crc 校验。


dbfilename

rdb 文件的名称,有特殊癖好可以更改,否则用默认的 dump.rdb 即可。


dir

存储 rdb 文件的路径。

复制

masterauth

复制权限验证密码,从节点从主节点复制时要进行密码验证。不配置时,表示不需要验证。


replica-serve-stale-data

从节点配置项,指示从节点和主节点的同步连接异常或者正在进行同步时(应该是 RDB 全量同步),从节点是否仍然处理读请求。配置为 yes,则上述情况下仍然提供读服务,但可能和主节点的数据不一致。可用性和一致性的权衡。


replica-read-only

从节点配置项,从节点是否只提供读服务,若 yes,则只提供读服务;若 no,则提供读写服务。从节点提供写服务是一件很危险的事情,很容易导致主从数据不一致,所以一般都是 yes。


repl-diskless-sync

主节点配置项,全量同步时,主节点传输 rdb 文件给从节点的方式。

若 no,则为磁盘模式,主节点在磁盘上生成 rdb 文件,再通过网络传输给从节点,因为已经固化成 rdb 文件了,如果随后有其他从节点也要全量同步,则可以复用改文件。

若 yes,则为无盘模式,在内存中生成 rdb 文件,直接通过网络传输给从节点,不再写到磁盘。但因为在内存中保存,不可能为后续可能的其他从节点所需保存很久,所以这种模式下,提供一个复用的策略:接收到一个全量不同请求后,再等一段时间,看看还有没有同样需求的从节点,延迟时间到了,则开始在内存生成,然后通过网络并行发送给这些节点。延迟时间后到来的从节点,则需要再进行一遍流程。


repl-diskless-sync-delay

主节点配置项,无盘模式下的延迟时间,见上文说明。


repl-diskless-load

从节点配置项,是否开启无盘加载,即从网络接收到 rdb 文件后,是否直接加载,而不是先全部写入磁盘文件,再加载。无盘加载因为不通过磁盘,所以速度快一点,但是因为不写入磁盘,所以在故障转移时可能会丢失数据。


repl-ping-replica-period

从节点配置项,向主节点发送心跳的周期。检查主节点和连接的活性。


repl-timeout

多种事件的超时时间。

1)全量同步时,从节点从发出请求到 RDB 文件接收完整的超时

2)从节点的视角,主节点的通信超时(比如从发给主的心跳)

3)主节点的视角,从节点的通信超时


repl-disable-tcp-nodelay

tcp 的 nodelay 选项,小数据包时的处理策略,数据发送及时性和带宽占用的权衡。


repl-backlog-size

主节点配置项,复制积压缓冲区大小,默认 1m。


repl-backlog-ttl

主节点配置项,当主节点没有存活的从节点时,经过一段时间后会释放积压缓冲区。该项配置这段时间长短。


replica-priority

从节点配置,故障转移时的优先级,哨兵模式下有效。哨兵选择该值最小的从节点作为主节点。


min-replicas-to-write [n]

min-replicas-max-lag [m]

主节点配置,在 m 时间内,主节点拥有的活跃的从节点个数小于等于 n,则不提供写服务。

客户端

maxclients

单个几点最大能够接受的连接数,超出则会拒绝连接。集群模式下,处理来自客户端的连接,集群内部因为有 gossip 交互,所以也有连接,maxclients 配置也会包含这些连接。集群中任意一个节点都会和其他任意一个节点建立两条连接:发送连接和接收连接。集群规模较大时,集群内部占用的连接数也比较大,此时应注意调整该值。

内存管理

maxmemory

最大内存限制,达到了 redis 开始清理 key 腾空间,如果腾不出来,则处理写请求时直接报错。

注意不要配得太大了,服务器有多少就配多少,让其他进程或者网络交互没有足够的内存。


maxmemory-policy

达到最大内存后,设置空间清理策略。可选项如下:

volatile-lru:在有 expire 属性的 key 范围内按照 lru 原则清理

allkeys-lru:在所有 key 范围内按照 lru 原则清理

volatile-lfu:在有 expire 属性的 key 范围内按照 lfu 原则清理

allkeys-lfu:在所有 key 范围内按照 lfu 原则清理

volatile-random:在有 expire 属性的 key 范围内随机清理

allkeys-random:在所有 key 范围内随机清理

volatile-ttl:在有 expire 属性的 key 范围内清理即将到期的 key

noeviction:不清理,默认


maxmemory-samples [n]

lru、lfu、ttl 下的单批采样次数。redis 对于这三者的实现都不是精确的,一般会随机挑 n 个出来,然后按照既定的策略选一个出来清理。

小,则结果不精确,大,则结果相对精确,但更耗 cpu。


replica-ignore-maxmemory

默认情况下,从节点是忽略最大内存限制的,不处理 key 清理,所有存储数据都由主节点决定,保证一致性。5.0 版本提供了该配置,让从节点也可以设置,保证从节点提供写服务时,也能限制内存。


active-expire-effort

清理过期 key 努力程度,默认为 1,在扫描不超过 25%内存的限制下清除 90%的过期 key。努力程度最高到 10,越高越耗性能,清除的过期 key 越多。


lazyfree-lazy-eviction [yes/no]

lazyfree-lazy-expire [yes/no]

lazyfree-lazy-server-del [yes/no]

replica-lazy-flush [yes/no]

redis 删除 key 有两种模式,阻塞和非阻塞。对于客户端删除请求,提供了 del 命令(阻塞删除)和 unlink 命令(非阻塞删除)。上述的这些后台删除场景,也可以设置阻塞或者非阻塞。

AOF 持久化

appendonly

是否开启 aof


appendfilename

aof 文件名称


appendfsync

落盘模式


auto-aof-rewrite-percentage 100

auto-aof-rewrite-min-size 64mb

aof 重写触发策略。比上次重写时的大小增长了 100%时重写且大于 64m,才触发重写。如果只设置百分比,则前期数量很小,但是增长百分比大,也会触发重写,没必要。所以 min-size 从文件大小上设置触发条件,该条件实际只管控第一次进行重写的条件。

集群

cluster-enabled

当前节点是否以集群模式运行。


cluster-config-file

集群配置文件


cluster-node-timeout

超时时间,会作用到很多地方。


cluster-replica-validity-factor

故障转移,选举从节点时,和主节点断线时间间隔太久的从节点是没有资格的。什么叫太久:断线时间超过 factor * cluster-node-timeout。


cluster-migration-barrier [n]

集群中孤儿主节点时,可以从其他主节点匀一些从节点给孤儿节点,但要保证贡献从节点的主节点贡献之后仍然有 n 个从节点


cluster-require-full-coverage [yes/no]

总共 16384 个槽,如果其中有槽没有由状态正常的主节点,则此时集群对外不提供读写服务。该配置可以改变这一点,设置 no 时,即便有些槽没有责任主节点,集群也提供读写服务,只不过涉及这些槽读写会失败。


cluster-allow-reads-when-down

集群 down 掉后是否提供读服务。

慢查询

slowlog-log-slower-than [time]

慢查询条件,执行时间超过了该值,则判定为慢查询。


slowlog-max-len

最多记多少条慢查询命令,相当于一个队列,先进先出。

用户头像

还未添加个人签名 2020.04.30 加入

还未添加个人简介

评论

发布
暂无评论
Redis - 配置文件