配置文件
https://raw.githubusercontent.com/redis/redis/7.0/redis.conf
通用模板
~~~
引入
- include
# 用于引入其他配置文件,支持使用通配符
# 根据从上到下的顺序,读取配置项,对同一个配置项多次设置,总是取最后配置的值
include <Path>
引入多个配置文件
include /path/to/My1.conf
include /path/to/My2.conf
优先级例子:
redis.conf 主配置
include /path/myRedis.conf
tcp-keepalive 300
myRedis.conf 引入配置
tcp-keepalive 400
最终应用的是:
tcp-keepalive 300
模块
- loadmodule
# 启动时加载模块,支持加载多个模块
loadmodule <Path>
loadmodule /path/to/My_module1.so
loadmodule /path/to/My_module2.so
网络
- bind
# 用于绑定网卡,默认只能本机访问,绑定网卡后其他用户就可以根据绑定的网卡的ip地址进行访问
bind <IP>
如何取值?
1.监听多个地址用空格分隔
bind 192.168.1.100 10.0.0.1
2.环回
bind 127.0.0.1 ::1
3. ~~
* -::*
- bind-source-addr
用于提供一个特定的网卡,提供给 复制模式,集群模式,哨兵模式 这种非用户访问的
bind-source-addr <IP>
- protected-mode
保护模式:当开启保护模式且默认用户没有密码则只能接收本机本地访问
protected-mode <yes/no>
- enable-protected-configs
- enable-debug-command
- enable-module-command
三个安全相关的选项,默认是关闭的
enable-protected-configs <no / yes / local>
enable-debug-command <no / yes / local>
enable-module-command <no / yes / local>
no 阻止任何链接
yes 允许任何链接
local 仅允许本地链接
- port
绑定端口,默认6379,如果值为0表示禁用
port <端口号>
- tcp-backlog
tcp 链接 缓存数
tcp-backlog 511
- timeout
客户端连接空闲N秒后关闭链接,如果值为0则表示禁用
timeout 0
- tcp-keepalive
tcp心跳检测,用于验证tcp连接后检测对方是否存活
其原理是tcp建立链接后每隔N时间就发送一次ACK消息,对方收到后会进行回复ACK消息,这样就可以知道对方是否存活,默认 300秒,如果为 0秒则不进行检测
tcp-keepalive 300
- socket-mark-id
打标记,不知道
socket-mark-id 0
TLS/SSL
默认情况是禁用的
- tls-port
开启tls-port端口需要将port给关闭,没有测试可能也不需要关闭
port 0
tls-port <端口号>
- tls-cert-file
- tls-key-file
- tls-key-file-pass
配置X.509正数或者私钥
tls-cert-file <文件.crt>
tls-key-file <文件.key>
tls-key-file-pass secret
- tls-client-cert-file
- tls-client-key-file
- tls-client-key-file-pass
通常 Reids对服务器功能(接收链接)和客户端功能(复制,集群,总线连接)使用相同的证书
也可以通过 tls-client....区分服务器端功能和客户端功能使用的证书
- tls-dh-params-file
配置DH参数文件以启用Diffie_Hellman(DH)密钥交换,旧版本的OpenSSL < 3.0可能需要
tls-dh-params-file <redis.dh>
- tls-ca-cert-file
- tls-ca-cert-dir
配置CA证书
tls-ca-cert-file <ca.crt>
tls-ca-cert-dir </etc/ssl/certs>
- tls-auth-clients
默认情况下,验证客户端的证书
该参数
tls-auth-clients <no / optional>
no : 不验证客户端的证书
optional : 客户端可以不传证书,如果传了则会进行校验
- tls-replication
默认情况副本不会通过tls与主服务器建立链接
通过取值yes 让副本使用tls与主服务器建立通信
-tls-replication yes
- tls-cluster
默认情况加 Redis集群是通过TCP链接,可以通过取值yes使用TLS通信
tls-cluster yes
- tls-protocols
默认仅启用 TLSv1.2 和TLSv1.3,也可以通过取值指定支持旧版本的TLS,双引号包裹 空格分隔
tls-protocols <"TLSv1.2 TLSv1.3">
- tls-ciphers
加密,仅适用于 TLSv1.2
tls-ciphers <DEFAULT:!MEDIUM>
- tls-ciphersuites
加密,适用于 TLSv1.3
tls-ciphersuites <TLS_CHACHA20_POLY1305_SHA256>
- tls-prefer-server-ciphers
选择密码时,使用服务器的首选项而不是客户端的
首选项。默认情况下,服务器遵循客户端的偏好。
tls-prefer-server-ciphers yes
- tls-session-caching
关闭TLS会话缓存,默认是开启的
tls-session-caching <no>
- tls-session-cache-timeout
缓存TLS会话的默认超时时间,默认300秒
tls-session-cache-timeout 60
通用
- daemonize
Redis默认前台运行,通过取值yes可以改为后台运行
daemonize yes
- supervised
# supervised no - no supervision interaction
# supervised upstart - signal upstart by putting Redis into SIGSTOP mode
# requires "expect stop" in your upstart job config
# supervised systemd - signal systemd by writing READY=1 to $NOTIFY_SOCKET
# on startup, and updating Redis status on a regular
# basis.
# supervised auto - detect upstart or systemd method based on
# UPSTART_JOB or NOTIFY_SOCKET environment variables
supervised <no / upstart / systemd / auto>
- pidfile
用于指定pid文件
Redis 前台运行 且没有指定Pid文件 则不进行创建
Redis 后台运行 且没有指定Pid文件 默认在/var/run/redis.pid
引用:
pid文件是什么:
以Nginx为例,每个Nginx都是一个进程且每个进程都有一个全局为的Id号,叫做pid
进程是无法检测其他进程的,所以进程间无法沟通,那么在Redis启用的时候也不知道当前有没有Redis服务为了能进行沟通
必须有一个东西来传递消息,这个东西就是pid文件,里面保存的是进程的Id
pid文件作用:
应用程序为了防止用户启动多次 ----
当Nginx启动时,会先检测有没有nginx.pid文件,如果没有则创建一个并且把自身pid写进去,当nginx启动时,如果检测到已经有nginx.pid文件
此时会有两种情况:
1. nginx检测到没有哪个进程的id是文件中写的id,那么就认为pid指向的进程不存在,那么nginx会启动
2. nginx检测到pid指向的进程存在,说明nginx已经启动,那么本次启动会报错
- loglevel
指定日志级别
debug 大量信息,开发/测试阶段
verbose 详细信息
notice 通知
warning 警告
loglevel <debug / verbose / notice / warning>
- logfile
默认输出到屏幕,如果是后台运行则发送到 /dev/null , 指定日志文件名称会将日志输出到文件
logfile <"">
- syslog-enabled
是否启用syslog日志
syslog-enabled <no / yes>
- syslog-ident
指定系统日志标识
syslog-ident redis
- syslog-facility
指定系统日志facility。必须是 USER 或介于 LOCAL0-LOCAL7 之间
syslog-facility local0
- crash-log-enabled
禁用内置日志
crash-log-enabled <no / yes>
- crash-memcheck-enabled
不清楚
crash-memcheck-enabled <no /yes>
- databases
指定数据库的数量,默认16个 0~15
databases 16
- always-show-logo
不知道,默认关闭
always-show-logo <no / yes>
- set-proc-title
修改进程的标题,默认开启
set-proc-title <no / yes>
- proc-title-template
进程标题的模板,模板变量在大括号中指定
# {title} 父进程执行的进程名称,或子进程的类型。
# {listen-addr} 绑定地址或 '*' 后跟 TCP 或 TLS 端口侦听,或
# Unix 套接字(如果只有它可用)。
# {server-mode} 特殊模式,即“[sentinel]”或“[cluster]”。
# {port} TCP 端口监听,或 0。
# {tls-port} TLS 端口监听,或 0。
# {unixsocket} Unix 域套接字监听,或“”。
# {config-file} 使用的配置文件的名称。
proc-title-template "{title} {listen-addr} {server-mode}"
快照
- save
Redis 默认开启 RDP 持久化
save 3600 1 300 100 60 10000 默认配置
如果有1次写入操作则3600秒后保存一次
如果有100次写入操作则300后保存一次
如果有10000次写入操作则60秒后保存一次
save <秒> <写入操作次数>
save "" 禁用 RDP
- stop-writes-on-bgsave-error
快照出错时是否禁止redis 写入操作 默认yes
stop-writes-on-bgsave-error <no /yes>
- rdbcompression
将存储到磁盘的快照进行压缩处理,会使用一些CPU的资源,默认yes
rdbcompression <no / yes>
- rdbchecksum
快照存储完成后通过CRC64算法进行数据校验,会造成一些性能消耗,默认yes
rdbchecksum <no / yes>
- sanitize-dump-payload
不知道
- dbfilename
设置rdb文件的名称,默认 dump.rdb
dbfilename <dump.rdb>
- rdb-del-sync-files
主从复制时,是否删除用于同步的从机上的RDB文件。默认是no,不会删除这台节点上的rdb文件。redis主从复制是通过rdb文件传输实现的,所以当机器没开启AOF和RDB删除才有意义,如果AOF和RDB开启,redis就会自己做持久化,此配置配置为yes也会忽略
rdb-del-sync-files <no / yes>
- dir
指定存储的目录
dir <./>
复制
- replicaof
配置主服务的ip 和端口
replicaof <masterIp> <masterPort>
- masterauth
如果主服务器需要密码在这里配置
masterauth <master-Password>
- masteruser
用于配置链接主服务器的用户
masteruser <username>
默认用户无法运行PSYNC,最好提供一个特殊的用户
#新的认证方式 ?
AUTH <username> <password>
- replica-serve-stale-data
如果失去和主机的链接,或者正在同步时,有客户端操作,有两种方式
1. yes 执行客户端的操作,可能会有假数据 或者空数据
2. no 报错(HOST and LATENCY),但是不包括 info,replicaof,auth,shutdown~~~等等操作
replica-serve-stale-data <no / yes> 默认yes
- replica-read-only
主从时期,从库是否只读,默认yes 只读
replica-read-only <on / yes>
- repl-diskless-sync
目前默认使用无硬盘复制,不需要通过RDB文件同步,而是直接传输数据,如果将Master的RDB文件 落在 Slave中,如果Slave发生重启会重新读取RDB文件,但是时间点又不确认可能会造成数据不一致
repl-diskless-sync <no / yes> 默认yes
- repl-diskless-sync-delay 5
配置同步的延时,
如果使用无硬盘复制,因为master一旦启动了socket传输,将不能在为这之后的slave传输数据,需要等待到下一次,如果开启延时,那么master会延时N秒,目的是为了尽可能的汇集更多的slave同步请求
repl-diskless-sync-delay 5
- repl-diskless-sync-max-replicas
如果是无硬盘传输,如果预期的最大副本数已连接,则可以在最大延时之前进行复制
在主服务器配置
repl-diskless-sync-max-replicas <int> 默认 0 标识未定义
- repl-diskless-load
1. RDB文件落在Slave磁盘上模式,通常情况下磁盘比网络慢,存储和加载RDB文件会增加复制时间,也会增加Master的复制写内存和Slave的缓冲区
2. 无硬盘模式是测试阶段,因为直接从socket获取rdb数据会有一个问题,那就是需要拿到完整的rdb数据才可以进行同步,针对这个问题以下由几种方案
disable 不使用 无硬盘方案
on-empty-db 只有在完全安全才使用无硬盘
swapdb 在解析socket的rdb数据时,将当前数据库的数据放到内存中,这样可以在复制的时候为客户端提供服务,但是可能会造成内存溢出
repl-diskless-load <disabled / on-empty-db / swapdb> 默认是disable
- repl-ping-replica-period
Master 心跳检测 Slave
repl-ping-replica-period <秒> 默认10秒
- repl-timeout
超时时间,超时条件:
1.Slave角度, N秒没有收到Master 传输的数据
2.Slave角度,N秒没有收到Master的数据包或者ping
3.Master角度,N秒没有收到Slave的 ack
repl-timeout <秒> 默认60秒
- repl-disable-tcp-nodelay
延时通信
no: 不禁用,Master的指令无论大小都及时发送给Slave,但是会增加网络带宽,合适主从网络环境良好的场景
yes: 禁用,主从链接都是TCP链接,所以当网络环境一般的情况下,交给Linux内核对TCP数据包进行优化,也就是合并较小的TCP数据包从而节省带宽,默认发送时间间隔取决于Linux内核,一般40毫秒,适合跨机房部署的场景
repl-disable-tcp-nodelay <no / yes> 默认no
- repl-backlog-size
缓冲区
如果从库断开链接,重新连接后,那么不需要全量同步,而是将断开链接~重新连接之间的数据进行复制即可,该配置就是用来配置当从库断开链接后将要同步的数据进行缓存起来,等待从库重新连接后发送给从库
repl-backlog-size <Nmb> 默认 1mb
- repl-backlog-ttl
如果Master在N ttl没有连接到从库则将缓冲区的文件释放,如果值为0则标识永不释放缓冲区的数据
repl-backlog-ttl 3600
- replica-priority
灾备方案
如果Master异常,Sentinel使用它来选择Slave提升为Master
优先级
Sentinel会优先选择数值低的Slave提升为Master
0 是一个特殊的优先级,Sentinel不会选择数值为0的Slave为Master
replica-priority 100 默认100
- propagation-error-behavior
如果Slave在同步的RDB或AOF中的指令出现错误,可以有以下方式进行处理
ignore: 忽略错误并继续执行指令
panic: 不知道
panic-on-replicas: 不知道
propagation-error-behavior ignore
- replica-ignore-disk-write-errors
Slave无法将从Master接收到的指令持久化到磁盘时,默认情况下Slave会异常
如果需要兼容低版本的Redis,可以调整为yes,会记录警告并执行从Master获得的写入指令
replica-ignore-disk-write-errors <no / yes> 默认no
- replica-announced
是否让Sentinel的Redis服务列表中展示
但是不会影响选举的时候会选举忽略的Redis服务器,如果不想让Sentinel选举该Redis需要配合使用 replica-priority 将值设为0
replica-announced <no / yes> 默认yes 会被Sentinel发现
- min-replicas-to-write
- min-replicas-max-lag
如果从库的数量少于N个 并且 延时时间小于或等于N秒 ,那么Master将停止发送同步数据
计算方式:
从库数量: 根据心跳
延时: 根据从库最后一次ping进行计算,默认每秒一次
例子:
最少需要3个延时小于10秒的从库,才会发送同步
min-replicas-to-write 3
min-replicas-max-lag 10
如果这两项任意一项的值为0则表示禁用
- replica-announce-ip
- replica-announce-port
Slave项Master声明实际的ip和port
主从 集群 sentienl都是通过 Redis服务 info指令得到的ip和port进行自动发现redis服务!!
因为网络环境的原因,如果两台redis在docker中,两台redis地址实际是docker提供的网络地址(172.17.0.xx),但是sentinel却在另一网络环境是访问不到docker提供的网络地址,所以可以通过这两个配置项用来指定info指令展示的ip和端口信息,用来指定当前docker宿主机的ip和port,这样sentinel就可以访问docker所在宿主机的ip和port用来发现redis服务,宿主机在转发到docker容器中
replica-announce-ip 5.5.5.5
replica-announce-port 1234
KEYS TRACKING
- tracking-table-max-keys
key失效管理
Redis通过是失效表记录,记录客户端访问了使用哪个key,如果key被修改过则将表中记录删除,并将失效的消息发送给客户端
失效表默认1m,如果超出设置则开始淘汰失效表的key,~~~
好像没什么用~~
取值范围
0: 没有限制
tracking-table-max-keys 1000000
安全
客户端
- maxclients
Redis 最大接受客户端链接数量
maxclients 10000
内存管理
https://cloud.tencent.com/developer/article/1692645
- maxmemory
设置内存大小,如果内存使用超过设定的值,则会根据maxmemory-policy设置的策略进行淘汰key
如果内存满了且没有淘汰key,如果在由写入指令(set)会报错,但是可以执行读取指定(get)
maxmemory <bytes> 默认注释,根据实例分配的内存大小
- maxmemory-policy
当内存使用超出 maxmemory 设置的值或已超出,当前分配给redis实例的内存时,可以选择具体的策略处理key
# volatile-lru -> 在所有设置过期时间的key中,使用LRU算法淘汰。
# allkeys-lru -> 在所有key中,使用LRU算法进行淘汰。
# volatile-lfu -> 在所有设置过期时间的key中,使用LFU 算法淘汰。
# allkeys-lfu -> 在所有key中,使用LFU 算法淘汰。
# volatile-random -> 在所有设置过期时间的key中,使用随机算法淘汰。
# allkeys-random -> 在所有key中,使用随机算法淘汰。
# volatile-ttl -> 在设置过期时间的key中,把最早过期时间的key淘汰
# noeviction -> 不淘汰key,只在写操作时返回错误。
# LRU 最近最少使用
# LFU 最少使用
maxmemory-policy noeviction 默认不淘汰key,有写入指令时会报错
- maxmemory-samples
用于设置选出淘汰key的数量样本
默认 选出5个,然后从中根据淘汰算法,淘汰1个key
Redis为了节省CPU成本,对 LRU / LFU 做了处理,并不是精确算法,相对模糊,配合其他参数一起使用
取值范围: 3 , 5 , 10
3 速度更快,但不准确
5 默认值,
10 更接近LRU / LFU 算法,但是CPU资源会使用的更多
maxmemory-samples 5
- maxmemory-eviction-tenacity
设置淘汰key的延时
线上写入的流量如果过大,内存满了淘汰key的时候延时越低,那么保存的数据越快,但是性能会有影响
取值范围:
0: 最小延时
10: 默认
100: 不考虑延迟
maxmemory-eviction-tenacity 10
- replica-ignore-maxmemory
Redis5 开始 Key的淘汰都是由Master进行处理,然后发送DEL指定同步到Slave,但是如果Slave是可写 或者需要Slave由不同的内存大小设置并且确定所有可以的Slave也互相保持一致性,那么可以把值设置为no ,默认Slave是忽略最大内存限制的
replica-ignore-maxmemory yes
- active-expire-effort
过期key的处理
1. 定时删除: 过期key,开启定时任务,过期时间到期执行
2. 惰性删除: 访问过期key的时候,将过期的key清理
3. 定期删除: 后台扫描过期的key ,默认过期key的数量不能超过内存10%,避免效果超过25%的CPU资源
取值范围
1 ~ 10 值越大CPU消耗越大,越频繁
active-expire-effort 1
LAZY FREEING 异步
- lazyfree-lazy-eviction
- nolazyfree-lazy-expire
- nolazyfree-lazy-server-del
- replica-lazy-flush
- lazyfree-lazy-user-del
- lazyfree-lazy-user-flush
Redis 的 del指定默认是阻塞的,有很多场景用到了阻塞的删除指令,通过以下配置可以在特定的场景使用非阻塞的删除方式
lazyfree-lazy-eviction : 淘汰key时
nolazyfree-lazy-expire : 删除过期key时
nolazyfree-lazy-server-del : 执行一些指令时 例如rename
replica-lazy-flush : 主从同步数据时
lazyfree-lazy-user-del : 用户手动删除时
lazyfree-lazy-user-flush : 指定flushdb flush ~~时
取值范围:
yes 采用非阻塞的删除方式
no 采用阻塞的删除方式 默认
I/O
- io-threads
扩展Redis I/O数量,默认是禁用的功能
默认Redis单线程的,但是也有一些操作时其他线程进行处理,例如异步删除key,慢i/o的链接等等
目前支持可以在不同的I/O处理客户端的网络读取和写入
默认情况时禁用的,官方建议至少4核或更多的机器上进行启用而建议保留一个核,如果超过8个线程没有太大的意义,只有遇到了性能问题才开启这部分
例如有4核CPU可以尝试使用2个或者3个I/O线程,如果有8核CPU可以尝试开启6个I/O线程
io-threads 4
- io-threads-do-reads
设置多开启的线程是否设置为非读I/O
一般如果开启多个I/O,则说明性能遇到了瓶颈,一般瓶颈不是出现在读上,所以可以通过该设置将开启的I/O调整为非读
有两个方面可能会不生效
1. 在运行时期使用 config set 调整时
2. 启用SSL时
io-threads-do-reads <no,yes> 默认no
OOM
- oom-score-adj
出现内存溢出时,Redis 主动控制 oom-score_adj 设置的值来决定 进程的死亡顺序
取值范围:
no: 在所有其他进程之前先杀死后台子进程,并且在主进程之前杀死其他进程 《默认》
yes: 相对的
absolute: 把 oom-score-adj-values 直接写入到内核
relative: 服务器启动,将值改为 -1000 ~ 1000 的范围内,
oom-score-adj <no>
- oom-score-adj-values
不知道
oom-score-adj-values 0 200 800
KERNEL transparent hugepage CONTROL
- disable-thp
AOF
- appendonly
是否开启AOF持久化
appendonly <no,yes> 默认no
- appendfilename
指定aof文件名称,文件会自增
例子:
appendfilename "appendonly.aof"
appendonly.aof.1.base.rdb 基础文件
appendonly.aof.1.incr.aof, appendonly.aof.2.incr.aof 作为增量文件
appendonly.aof.manifest 清单文件
- appenddirname
指定aof文件的存储路径
- appendfsync
将实际数据存储在磁盘中
取值范围
1. no 让操作系统自己决定什么时候将数据存储到磁盘中 ,性能高 ,不安全
2. always 每次写入都通知操作系统,fsync 性能低,最安全
3. everysec 每秒fsync一次 , 性能中等,安全性中等,最多丢失1秒的数据
appendfsync ererysec 默认的
- no-appendfsync-on-rewrite
当 appendfsync 设置的时 alwasys / everysec 时,对磁盘执行大量I/O操作,在某些Linux配置中Redis调用fsync()可能会阻塞太久
为了防止手动或上一个AOF还在保存时正在进行时主进程又调用fsync() ,所以可以将该项的值设置成yes,那么appendfsync就会成为no模式但是如果出现问题丢失的数据可能会更多,所以默认no即可,除非出现了fsync长时间断断续续阻塞的现象,
no-appendfsync-on-rewrite no 默认
- auto-aof-rewrite-percentage
- auto-aof-rewrite-min-size
重写AOF,指定文件的增长百分比自动重写,隐式调用 BGREWRITEAOF
因为AOF记录的都是指令,有很多之前的写入的指令不需要记录了( 10分钟前写入了一个key设置的过期时间是3分钟 ,那么aof文件在3分钟后就没有必要记录这个key值了,这个是时间的例子, 大小也是一样)
这两个配置项配合一起使用,可能百分比设置了但是文件很小,就会一直重写aof
取值范围
0 表示禁用自动AOF
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
- aof-load-truncated
如果读取到一个错误的aof文件,由两种方案
取值范围
1. yes 打印日志通知用户
2. no 服务器报错并且拒绝启动
aof-load-truncated <no /yes> 默认yes
- aof-use-rdb-preamble
基础文件选择RDB 还是 AOF
取值范围
1. no 使用AOF
2. yes 使用RDB
aof-use-rdb-preamble yes
- aof-timestamp-enabled
Redis 支持AOF中记录时间戳,支持特定时间点的恢复数据,但是可能会与现有的AOF解析器不兼容的方式更改AOF格式,默认关闭
aof-timestamp-enabled no
关闭
- shutdown-timeout
关闭Redis时,允许等待Slave同步的最长时间
默认:如果配置了RDB,则等待RDB保存
取值范围
0 - 不等待Slave同步
N - 秒
shutdown 10
- shutdown-on-sigint
- shutdown-on-sigterm
针对SIGINT / SIGTERM 这两个指令做出不同的解决方案
取值范围
default: 如果有需要保存的数据,则等待RDB保存,且等待Slave同步
save : 即便便有需要保存的数据,也会执行RDB
nosave : 有保存点,也不执行RDB
now : 不等待Slave同步
force : 如果Redis关机遇到问题则忽略
以上五个值,save 和 nosave不能一起使用外,其他都可以一起使用,例如
shutdown-on-sigint nosave force now
集群
Redis 如果使用的是集群,以下用”节点“来说明Redis
- cluster-enabled
以集群的方式启动Redis,默认是关闭的
cluster-enabled yes
- cluster-config-file
指定节点的配置文件,每个节点都需要不同的集群配置文件,不允许重复使用,由集群自动管理无需配置
cluster-config-file nodes-6379.conf
- cluster-node-timeout
心跳-检测状态
如果超过指定N毫秒,就认为该节点是故障状态
cluster-node-timeout 15000
- cluster-port
指定集群端口,集群总线监听的入站端口
取值范围:
0 自动绑定到 10000之后的某个端口
1~65535 指定端口号
cluster-port 12321
- cluster-replica-validity-factor
集群节点故障检测:
当主节点发生故障时,其他Slave节点全部申请成为Master
但是不同的Slave的数据可能不一样,例如有的Slave可能和Master断开过,数据不全/陈旧数据,所以不应该提升为Master
这个参数就是用来判断,Slave节点与Master断线时间是否过长
两种方式进行检测
1、节点们彼此交换数据,对比偏移量
2、根据该参数判断,与主节点断开的时间
(node-timeout 超时时间 * cluster-replica-validity-factor 检测时间) + repl-ping-replica-period 最后ping的时间
cluster-replica-validity-factor 10
- cluster-migration-barrier
用于保证每一个主节点都由N个从节点,前提是有足够的节点
如果某一个主节点出现问题后,会从其他富于的主节点分配一个从节点过来,确保每个主节点都有N个从节点
避免因为主节点挂掉而没有相应的从系欸但替换为主节点导致集群不可用
例如 cluster-migration-barrier 设置为1的情况下
主节点 1001 从节点 2001 2002
主节点 1002 从节点 2003 2004
如果主节点 1001 宕机后再次启动,是没有从节点的,执行check后,会从1002 匀出一个从节点给主节点 1001
cluster-migration-barrier 1
- cluster-allow-replica-migration
自动集群配置
取值范围
no : 不启用自动集群配置
yes: 不允许从节点迁移,也不会让主节点下面没有从节点
cluster-allow-replica-migration yes
- cluster-require-full-coverage
当一个主节点宕机且没有从节点进行故障恢复(选主)时 集群是否可用(是否能提供查询等操作)
取值范围
no: 可用
yes: 不可用
cluster-require-full-coverage yes/no
- cluster-replica-no-failover
是否进行故障转移
取值范围
no: 不管
yes: 可以
cluster-replica-no-failover no
- cluster-allow-reads-when-down
当集群状态为down时是否可以支持 查询操作
cluster-allow-reads-when-down no
- cluster-link-sendbuf-limit
集权间互相传递消息的大小限制,默认 1G 默认禁用通过其他配置或指令开启
cluster-link-sendbuf-limit 0
- cluster-announce-hostname “”
供外部链接
用于指定集群的主机名称
- cluster-preferred-endpoint-type
供外部链接
cluster-preferred-endpoint-type ip
关于Docker的支持
因Docker的特殊网络环境,可能有的ip不通,所以提供下面几个参数用于指定节点间链接的ip
# cluster-announce-ip 10.1.1.5
# cluster-announce-tls-port 6379
# cluster-announce-port 0
# cluster-announce-bus-port 6380
SLOW LOG 慢日志
用于记录一些操作时操作
- slowlog-log-slower-than
超过多长时间的指令会认为是超时指令
取值范围
N 微秒 1000000 = 1秒 如果是负数则表示禁用慢日志
- slowlog-max-len
保存的长度,长度没有限制,但是会消耗内存,记录最新慢指令,且队列满的情况下,会删除最旧的慢日志记录
取值范围
N 整数
slowlog-max-len 128