Redis配置文件参数解析

本文详细解读了Redis哨兵节点的sentinel.conf配置,包括监控实例、认证、故障转移设置,以及数据节点redis.conf中的通用配置、持久化、主从复制、安全和性能优化配置,以及集群相关配置,为Redis管理员提供了全面的配置指南。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

📖参考链接

  • redis配置文件:https://redis.io/docs/management/config-file/
  • sentinel配置文件:https://redis.io/docs/management/sentinel/#configuring-sentinel

哨兵节点:sentinel.conf

哨兵节点配置文件:

sentinel announce-ip "192.168.1.5"
port 26379
loglevel verbose
logfile "/opt/redis/logs/sentinel.log"
dir "/tmp"

sentinel monitor mymaster 127.0.0.1 6379 2
sentinel auth-user mymaster sentinel_user
sentinel auth-pass mymaster Sentipass_123
sentinel down-after-milliseconds mymaster 60000
sentinel failover-timeout mymaster 180000

sentinel monitor resque 192.168.1.3 6380 4
sentinel auth-user mymaster sentinel_user
sentinel auth-pass mymaster Sentipass_123
sentinel down-after-milliseconds resque 10000
sentinel failover-timeout resque 180000

其中:

  • announce-ipport分别指定哨兵节点的IP和端口;
  • loglevellogfile分别指定哨兵节点的日志级别和日志文件。如果logfile为空,日志会输出到标准输出。
  • mymaster和resque是哨兵集群监控的两个Redis主实例的名字。每个主实例都可以有自己的一到多个副本。
  • sentinel_user和Sentipass_123分别是哨兵节点访问所监控主实例时使用的用户和口令。
  • down-after-milliseconds最后面的数字是当前哨兵节点认为主实例不可达之前,与主实例同步心跳失败后必须经过的最小毫秒数。
  • failover-timeout即故障转移超时失败时间。如果对一个主节点failover失败,那么下次对同一个主节点发起failover必须至少经过2 * failover-timeout毫秒。
  • sentinel monitor用于配置哨兵集群监控的Redis主实例。
sentinel monitor <master-name> <ip> <port> <quorum>

其中,quorum是可以发起failover之前,投票主实例已经不可达的哨兵节点数量必须达到的法定最小值。

如果通过redis-cli动态修改了某些Redis参数,重启实例后在sentinel.conf中可能看到自动生成的内容,以下面的标志行开始。

# Generated by CONFIG REWRITE

数据节点:redis.conf

一般通用配置项

一些通用配置参数:

################################## NETWORK #####################################

#指定redis监听的网卡IP地址,可以设置为监听Redis服务器上的所有网卡
bind 0.0.0.0

#是否开启保护模式。该模式下没有密码的用户只能从本地访问Redis。默认开启
protected-mode no

################################# TLS/SSL #####################################

#Redis服务端口
port 6379

#在高并发环境下需要设置一个高backlog值来避免慢客户端连接问题。调大该参数时需要同时调大Linux内核参数somaxconn和tcp_max_syn_backlog
tcp-backlog 2048

#客户端连接空闲超过timeout将会被断开,单位为秒。0表示即使一直idle也不断开连接
timeout 0

#tcp保活参数,每间隔一定时间会向客户端发送一个ACK来确认连接状态。默认为300秒,如果设置为0,则不会进行keepalive检测
tcp-keepalive 300

#是否以守护进程模式启动Redis。使用systemd管理Redis时该参数无效
#daemonize no

################################# GENERAL #####################################

#是否通过upstart或systemd来管理Redis进程
#supervised upstart - 通过将Redis置于SIGSTOP模式来发信号给upstart,需要在upstart job里配置expect stop
#supervised systemd - 在启动时通过将READY=1写入$NOTIFY_SOCKET来发信号给systemd
#supervised auto    - 基于UPSTART_JOB或NOTIFY_SOCKET环境变量检测upstart或systemd方法
supervised no

#PID文件路径,daemonize模式下默认/var/run/redis.pid,非daemonize模式下默认不会自动创建
#pidfile /var/run/redis.pid

#日志级别
#debug级别,日志信息最详细,用于开发测试环境
#verbose级别,日志信息仅次于debug级别
#notice级别,日志信息次于verbose级别,可用于生产环境
#warning级别,仅记录关键的、重要的日志信息
loglevel notice

#日志文件位置与文件名,设置为空表示直接输出到标准输出
#logfile /opt/redis/logs/redis.log
logfile ""

#是否记录日志到syslog
#syslog-enabled no
#syslog标识符
#syslog-ident redis
#日志的来源
#syslog-facility local0

#数据库的数量,默认使用DB 0,可以通过SELECT命令选择一个DB
#集群环境默认只有DB 0
databases 16

持久化相关配置项

与数据持久化相关的配置:

################################ SNAPSHOTTING  ################################

# 持久化内存数据到磁盘
# save <seconds> <changes> [<seconds> <changes> ...]
#仅配置一行 save "" 会完全禁用数据持久化
#save ""
#默认为 save 3600 1 300 100 60 10000
save 600 100
save 120 10000
save 7200 1

#开启RDB快照时,默认情况下如果bgsave失败REDIS会拒绝写入请求,直到bgsave恢复正常。
#如果有相关监控和可靠的持久化策略,也可以关闭该特性
stop-writes-on-bgsave-error yes

#压缩rdb文件,默认启用
rdbcompression yes

#是否校验rdb文件
rdbchecksum yes

#rdb文件名称
dbfilename dump.rdb

#工作目录,rdb文件保存的路径
dir /opt/redis/data

############################## APPEND ONLY MODE ###############################

#启用AOF模式(AOF和RDB模式可以同时开启)
appendonly yes

#AOF文件base名称
appendfilename "appendonly.aof"

#REDIS通过fsync()系统调用告诉操作系统把数据刷到磁盘上
#Redis支持三种不同的模式:
# no:让操作系统自己决定什么时候将数据落盘。比较快。
# always:每次写操作都立刻写入到aof文件。慢,但是最安全。
# everysec:每秒写一次。默认的策略。
appendfsync everysec

#如果AOF的同步策略设置成always或者everysec,并且后台有bgsave或AOF日志重写进程产生大量磁盘I/O开销时,fsync()系统调用可能会阻塞很久。
#为了缓解这个问题,可以将下面这个参数设置为yes,在 BGSAVE 或 BGREWRITEAOF 处理时阻止fsync()调用。
#开启该参数存在一定的数据安全风险,在最差的情况下可能会丢掉30秒钟的日志数据
no-appendfsync-on-rewrite no

#自动重写AOF文件。如果AOF日志文件增大到指定百分比,Redis能够通过 BGREWRITEAOF 自动重写AOF日志文件。
#Redis会记住上一次重写时AOF文件的大小(如果重启后还没有写操作,就直接用启动时的AOF大小)
#这个基准大小和当前大小做比较。如果当前大小超过指定比例,就会触发重写操作。
#还需要指定被重写日志的最小size,以避免在日志文件很小时频繁触发AOF重写。
#指定百分比为0会禁用AOF自动重写特性
auto-aof-rewrite-percentage 100

#AOF文件重写时必须达到的最小文件大小
auto-aof-rewrite-min-size 64mb

主从复制配置项

与主从复制相关的配置:

################################# REPLICATION #################################

#Redis复制是异步的,副本与主实例由于网络问题短暂中断后会自动重连恢复同步
#为当前副本指定主实例的IP地址和端口
# replicaof <masterip> <masterport>

#当前副本连接到主实例所用的主从复制用户
# masteruser <username>

#当前副本连接到主实例所用的主从复制用户口令
# masterauth <password>

#当副本与主实例的连接断开时,或者同步正在进行中尚未完成时:
#如果replica-serve-stale-data设置为yes (默认值),replica会继续响应客户端请求,并返回已过期的数据、或者还没获得值的空数据;
#如果replica-serve-stale-data设置为no,replica会向客户端返回报错:MASTERDOWN Link With MASTER is down ...
replica-serve-stale-data yes

#配置replica是否为只读,默认只读
replica-read-only yes

#同步策略默认为磁盘方式,主实例将数据库写入磁盘上的RDB文件然后,传输给副本实例;
#diskless同步模式下,主实例同步给副本的数据文件不会被写入磁盘中,而是直接传输给副本的socket。
#如果磁盘读写性能一般,并且网络带宽比较高,diskless同步模式效率更高
repl-diskless-sync no

#开启diskless同步模式下,主实例在每次同步前会等待一定时间,以便每次同步时尽可能同时同步给更多的副本实例。默认值为5秒
repl-diskless-sync-delay 5

#主实例每隔一定时间向replica发送ping请求。默认10秒
#repl-ping-replica-period 10

#同步的超时时间,必须比repl-ping-replica-period设置得更大。适用于以下情况:
#从replica来看,主从复制SYNC期间有大量数据传输,造成超时;
#从replica来看,主实例超时,包括数据和PING超时;
#从主实例来看,副本超时,包括REPLCONF ACK ping
#repl-timeout 60

#在主从同步的latency和使用的网络带宽之间做权衡
#默认为no,使用更多带宽来降低同步时延。如果网络流量拥堵或者主从之间路由跳数过多时,可以开启
#repl-disable-tcp-nodelay no

#设置主从复制backlog缓存大小。主从断开后重新进行部分同步时会用到。
#该参数值越大,从节点能够忍受的断开时间就越长
#repl-backlog-size 1mb

#从最后一个slave断开开始计时多少秒后,主实例的backlog缓冲将会释放。
#考虑到可能会被提升为主实例,replica副本不会因为超时而释放自己的backlog缓存
#repl-backlog-ttl 3600

#副本被提升为主实例的优先级。数字越小,优先级越高,默认为100
#该参数值等于0时,表示当前副本实例永远不会被提升为主实例
replica-priority 100

#通过下面两个参数来预防主实例出现单点故障风险
#至少有3个处于online状态的副本实例,其同步延迟小于10秒,主实例才会接受写请求
#min-replicas-to-write 3
#min-replicas-max-lag 10

#使用端口转发或者NAT网络地址转换协议时,replica通过下面两个参数来向主实例报告自己的地址和端口
#replica-announce-ip 5.5.5.5
#replica-announce-port 1234

:使用容器部署Redis哨兵主从时,建议采用host仅主机网络模式,或者通过announce-ip和announce-port指定哨兵节点的IP地址和端口,否则哨兵集群的自动发现机制可能会失效。

安全相关配置项

与数据安全相关的配置:

################################## SECURITY ###################################

#通过外部ACL文件来配置用户和口令
# aclfile /etc/redis/users.acl

#设置默认用户的访问口令。如果已经配置了aclfile,该参数会被忽略
#requirepass foobared

#重命名一些高危操作的命令。重命名为空表示禁用
#rename-command FLUSHALL ""
#rename-command FLUSHDB  ""
#rename-command CONFIG   ""

#可以把一些高危操作重命名为很复杂的字符串
#rename-command FLUSHALL xoYAPNXRPmcarcR4ZDgC81TbdSmAzRPmcarcR
#rename-command FLUSHDB  pr69aZbLAX3cf3ednM3SOlbH71yEXLAX3cf3e

优化相关配置项

与优化相关的配置:

################################### CLIENTS ####################################

#设置最多同时连接的客户端数量,默认为10000,建议3000~4000
maxclients 3000

#REDIS使用的内存限制,建议操作系统物理内存的80%
maxmemory 10gb

#达到最大的内存限制,Redis是否删除KEY的策略。默认是noeviction:
# volatile-lru -> 根据LRU算法删除设置了过期时间的key
# allkeys-lru  -> 根据LRU算法删除任何key
# volatile-lfu -> 根据LFU算法删除设置了过期时间的key
# allkeys-lfu  -> 根据LFU算法删除任何key
# volatile-random -> 随机移除设置了过期时间的key
# allkeys-random  -> 随机移除任何key
# volatile-ttl    -> 移除即将过期的key(minor TTL)
# noeviction      -> 不移除任何key,只返回一个写错误
#如果Redis找不到合适的可以删除的key,会在写操作时返回一个错误
#maxmemory-policy noeviction

############################# LAZY FREEING ####################################

#根据maxmemory-policy驱逐key、清理过期key、RENAME/SUNIONSTORE/SET等命令触发key删除、replica从主实例进行全量同步触发本地的key删除
#以上四种情况中,redis会通过DEL操作来删除key,这种方式会产生阻塞(时间取决于删除的数据量)
#通过分别配置下面的参数可以用非阻塞的方式清理key(例如UNLINK)
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no

################################## SLOW LOG ###################################

#记录执行时间超过多少微秒的命令,1000000等于1秒
#设置为0则记录所有命令,设置为负数表示不记录慢日志
slowlog-log-slower-than 10000

#慢日志大小,可通过SLOWLOG RESET命令回收慢日志占用的内存
slowlog-max-len 128

################################ LATENCY MONITOR ##############################

#记录执行时间大于或等于预定时间(毫秒)的操作,设置为0时不记录。默认不记录
#latency-monitor-threshold 0

############################# EVENT NOTIFICATION ##############################

#是否把键空间发生的事件通知给Pub/Sub客户端,默认关闭
#notify-keyspace-events ""

########################### ACTIVE DEFRAGMENTATION #######################

#主动在线碎片整理可以压缩内存中分配的碎片化空间,从而回收内存。
#该功能默认关闭。如果要开启,需要配合官方Jemalloc内存管理器一起使用才能生效
#如果没有遇到内存碎片化问题,不需要开启主动在线碎片整理
#activedefrag no

#启用碎片整理的最小碎片浪费量
#active-defrag-ignore-bytes 100mb

#启用碎片整理的最小碎片百分比
#active-defrag-threshold-lower 10

#使用最大消耗时的最大碎片百分比
#active-defrag-threshold-upper 100

#在CPU百分比中进行碎片整理的最小消耗,达到active-defrag-threshold-lower时使用
#active-defrag-cycle-min 1

#磁盘碎片整理的最大消耗,达到active-defrag-threshold-upper时使用
#active-defrag-cycle-max 25

#将从主字典扫描处理的最大set/hash/zset/list字段数
#active-defrag-max-scan-fields 1000

集群相关配置项

以下配置仅适用于Redis集群模式。

################################ REDIS CLUSTER  ###############################

#开启redis集群
cluster-enabled yes

#自动生成的集群配置文件名。同一系统中运行的各redis实例该配置文件不要重名。
cluster-config-file nodes-6379.conf

#集群节点超时毫秒数
#cluster-node-timeout 15000

#如果数据太旧,集群中的replica节点会避免成为备用master
#如果slave和master失联时间超过:(node-timeout * cluster-replica-validity-factor) + repl-ping-replica-period,则不会被提升为master。
#较大的cluster-replica-validity-factor值可能允许包含过旧数据的replica成为master,同时较小的值可能会导致集群选举不出新master。
#为了达到最大限度的高可用性,可以设置为0,即replica不管和master失联多久都可以提升为master
#cluster-replica-validity-factor 10

#replica可以迁移成为其他已成为孤儿主实例的副本,以防止孤儿主实例出现问题时无法failover
#replica迁移的前提是,当前所属的主实例在replica迁移后至少还有一定数量的其他副本
#将该参数值设置的特别大或者设置为no,表示禁用replica迁移
#cluster-migration-barrier 1

#默认情况下如果redis集群如果检测到至少有1个hash slot不可用,集群将停止接受查询请求。如果所有slot恢复则集群自动恢复。
#如果需要集群部分可用情况下仍可提供查询服务,设置为no。
#cluster-require-full-coverage yes

#设置为yes时,会阻止replicas在master故障期间自动进行故障转移,但是仍然可以强制执行手动故障转移
#该参数适用于跨数据中心集群中希望主实例不切换到备用机房的情况
#cluster-replica-no-failover no

########################## CLUSTER DOCKER/NAT support  ########################

#默认情况下,Redis会自动检测自己的IP和从配置中获取绑定的PORT,告诉客户端或者是其他节点。
#而在Docker环境中,如果使用的不是host网络模式,在容器内部的IP和PORT都是隔离的,那么客户端和其他节点无法通过节点公布的IP和PORT建立连接。
#如果开启以下配置,Redis节点会将配置中的这些IP和PORT告知客户端或其他节点。而这些IP和PORT是通过Docker转发到容器内的临时IP和PORT的。
#cluster-announce-ip
#cluster-announce-port
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GottdesKrieges

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值