Redis集群配置参数及优化

首先给大家推荐一下我老师大神的人工智能教学网站。教学不仅零基础,通俗易懂,而且非常风趣幽默,还时不时有内涵黄段子!点这里可以跳转到网站

Redis的主要参数配置在redis.conf文件中。

1.      conf 内存值

2.     bind ip

默认情况下,如果没有指定“bind”配置指令,Redis将侦听服务器上可用的所有网络接口的连接。

默认情况:bind 127.0.0.1

实际配置:bind 本机ip

3.     protected-mode yes

启用默认保护模式。只有当您确定您希望其他主机的客户端连接到Redis时,您才应该禁用它,即使没有配置身份验证,也没有使用“bind”指令显式列出特定的接口集。

4.      tcp-keepalive300

如果非零,请使用SO_KEEPALIVE向没有通信的客户发送TCP协议。

这很有用,有两个原因:

a)       检测死同伴

b)       从中间的网络设备的角度进行连接

在Linux上,指定的值(以秒为单位)是用于发送ack的周期。

注意,要关闭连接,需要双倍的时间。这个选项的合理值是300秒,这是新的Redis默认值,从Redis 3.2.1开始。

5.      timeout0

在客户机空闲N秒后关闭连接(0到禁用)

6.     port 6379

在指定端口上接受连接,默认值是6379

7.     daemonize yes

redis后台运行

8.     pidfile /var/run/redis_6379.pid

如果指定了一个pid文件,Redis会在启动时指定,并在退出时删除它。

当服务器运行非守护进程时,如果配置中没有指定pid文件,则不会创建pid文件。当服务器被守护时,即使没有指定,也会使用pid文件,默认为“/var/run/redis.pid”。

创建一个pid文件是最好的工作:如果Redis不能创建它,那么服务器就会正常启动和运行。

9.     loglevel notice

指定服务器冗余级别

包括:

a)       debug: 大量信息,用于开发/测试

b)       verbose: 许多很少有用的信息,但不像debug级别那样混乱

c)       notice: 适度详细,可能在生产中需要

d)       warning: 只有非常重要/关键的消息被记录

10.  logfile””

指定日志文件名。还可以使用空字符串强制Redis登录标准输出。请注意,如果您使用标准输出来记录日志,但是daemalize,日志将被发送到/dev/null。

11.  databases 16

设置数据库的数量。默认数据库是DB 0,您可以使用select 在每个连接上选择一个不同的数据库,其中dbid是一个0和’databases’-1之间的数字。

12.  always-show-logoyes

默认情况下,Redis只显示了ASCII艺术标志,当开始记录到标准输出时,如果标准输出是TTY。基本上,这意味着通常只有在交互式会话中才会显示徽标。但是,可以强制执行4.0的行为,并且在启动日志中始终显示一个ASCII艺术标识,通过设置下面的选项为yes。

13.  dbfilename dump.rdb

要转储数据库的文件名,存储文件。

14.  dir ./

工作目录

将在这个目录中写入,使用“dbfilename”配置指令指定上面指定的文件名。

只在此目录中创建附加文件。

注意,您必须在这里指定一个目录,而不是文件名。

15.  slaveof<masterip> <masterport>

主从复制。使用slaveof来让一个Redis实例复制另一个Redis服务器。

a)       Redis复制是异步的;

b)       如果复制链接在相对较小的时间内丢失,Redis的奴隶可以与主服务器进行部分的重新同步。

c)       复制是自动的,不需要用户干预。在网络分区后,奴隶会自动尝试重新连接主人并与他们重新同步。

16.  masterauth<master-password>

如果master是密码保护的(使用下面的“requirepass”配置指令),在启动复制同步进程之前,可以告诉奴隶进行身份验证,否则主人将拒绝奴隶请求。

17.  slave-serve-stale-datayes

当一个奴隶失去与主人的联系,或当复制仍在进行时,奴隶可以采取两种不同的方式:

a)       如果slave-serve-stale-data被设置为“yes”(默认),则该slave仍然会回复客户端请求,可能是由于过时数据,或者如果这是第一次同步,数据集可能是空的。

b)       如果slave-serve-stale-data被设置为“不”,那么slave将会以“与master同步”的错误来回复所有的命令,but toINFO and SLAVEOF。

18.  slave-read-onlyyes

注:只读奴隶不被设计成在互联网上接触不可信的客户。它只是一个防止滥用实例的保护层。

在默认情况下,仍然只读取奴隶的导出,所有的管理命令,例如CONFIG、DEBUG等等。在一定程度上,您可以通过使用“rename-command”来对所有的管理/危险命令进行隐藏,从而提高读取的安全性。

19.  repl-backlog-size1mb

backlog是一个缓冲区

20.  slave-priority100

它被Redis Sentinel所使用,以便在主人不再正确工作的情况下,选择一个奴隶来提升为主人。

一个低优先级的奴隶被认为是更好的晋升机会,例如,如果有三个优先级为10、100、25个哨兵的奴隶将选择优先级为10的,这是最低的。然而,一个特殊的优先级0标志着奴隶不能执行主人的角色,因此,优先级为0的奴隶将永远不会被RedisSentinel选中来提升。

默认情况下,优先级是100。

21.  maxclients10000

设置同时连接客户端的最大数量,默认情况下这个限制设置为10000个客户,一旦达到限制,Redis将关闭所有新的连接,发送错误的最大客户数。

22.  maxmemory<bytes>

将内存使用限制设置为指定的字节数。

如果您有附加的奴隶,建议您为maxmemory设置一个较低的限制,以便在系统上有一些空闲RAM用于输出缓冲区(但如果策略是“no驱逐”,则不需要这样做)。

23.  maxmemory-policynoeviction

MAXMEMORY策略:当达到MAXMEMORY时,Redis将选择要删除的内容。

volatile-lru: 在键中使用近似的LRU结束设置。

allkeys-lru: 使用近似的LRU清除任何键。

volatile-lfu: 在密钥中使用近似的LFU结束设置。

allkeys-lfu: 使用近似的LFU清除任何密钥。

volatile-random: 将一个随机密钥删除,其中有一个过期设置。

allkeys-random: 删除一个随机密钥,任何密钥。

volatile-ttl: 删除最近过期时间的键(小TTL)

noeviction: 不驱逐任何东西,只返回写操作上的错误。

注:LRU的意思是最近使用最少,LFU的意思是最不常用,LRU、LFU和挥发性ttl均采用近似随机算法实现。在上面的任何一个策略中,Redis将返回一个写操作上的错误,当没有合适的键来驱逐时。

默认是: maxmemory-policynoeviction

24.  maxmemory-samples5

LRU、LFU和最小TTL算法不是精确的算法,而是近似算法(为了节省内存),所以你可以对它进行调优,以达到速度或精度。对于默认的Redis将检查5个键并选择最近使用较少的键,您可以使用下面的配置指令来更改示例的大小。

注:默认的5产生足够好的结果。十分接近真实的LRU,但成本更大。3更快,但不太准确。

25.  appendonly yes

只追加模式

aof日志开启  有需要就开启,它会每次写操作都记录一条日志

默认情况下,Redis会异步地转储磁盘上的数据集。这种模式在许多应用程序中都很好,但是对于Redis进程或断电可能会导致几分钟的写入丢失(取决于配置的保存点)。

Append文件是一种替代持久性模式,它提供了更好的持久性。

AOF和RDB持久性可以同时启用,没有问题。

如果在启动Redis上启用了AOF,则会加载AOF,这是具有更好的耐久性保证的文件。

appendfilename “appendonly.aof”

26.  appendfsynceverysec

fsync()调用告诉操作系统在磁盘上实际写入数据,而不是等待输出缓冲区中的更多数据。有些操作系统会在磁盘上刷新数据,有些操作系统会尽快处理。

Redis支持三种不同的模式:

no: 不要fsync,只需让操作系统在需要的时候刷新数据。Faster

always: fsync每次写完后只添加日志。Slow,Safest

everysec: fsync每秒钟一次。Compromise

默认的是“everysec”,因为这通常是速度和数据安全之间的正确折衷。由你理解如果你能放松这个“不”字,让操作系统刷新输出缓冲区时,为了更好的表现(但是如果你可以忍受一些数据丢失的想法考虑默认快照的持久性模式),或相反,使用“always”非常缓慢但比”everysec”更安全一点。

如果不确定,就用“everysec”。

27.  no-appendfsync-on-rewriteno

如果您有延迟问题,请将其转换为”yes”。否则,从持久性的角度来看,设置为”no”是最安全的选择。

28.  auto-aof-rewrite-percentage100

auto-aof-rewrite-min-size64 mb

自动重写附加文件

Redis能够自动地重写日志文件,当AOF日志大小以指定的百分比增长时,隐式地调用BGREWRITEAOF。

工作方式:Redis记得在最近一次重写后的AOF文件的大小(如果在重启后没有重写,那么在启动时AOF的大小就会被使用)。

此基础大小与当前大小比较。如果当前的大小大于指定的百分比,则会触发重写。您还需要为AOF文件指定一个最小的大小来重写,这对于避免重写AOF文件是很有用的,即使增加了百分比,但是它仍然很小。

指定一个百分比为零,以禁用自动的重写功能。

29.  aof-load-truncatedyes

在Redis启动过程中,当AOF数据被加载回内存时,可能会发现AOF文件被截断。

如果将aof-load-truncated设置为yes,将加载一个被截断的AOF文件,而Redis服务器将开始发出日志以通知用户该事件。否则,如果选项被设置为no,服务器会以错误中止并拒绝启动。当选项设置为no时,用户需要在重新启动服务器之前使用“redis-checkaof”工具修复AOF文件。

注意,如果在中间发现AOF文件被损坏,服务器仍然会以错误退出。此选项只适用于Redis将尝试从AOF文件读取更多数据,但不会找到足够的字节。

30.  cluster-enabled yes

开启集群

31.  cluster-config-file nodes-6379.conf

每个集群节点都有一个集群配置文件。它是由Redis节点自动创建和更新的。每个Redis集群节点都需要一个不同的集群配置文件。

注:确保在同一系统中运行的实例没有重叠的集群配置文件名。集群的配置,配置文件首次启动自动生成。

32.  cluster-node-timeout 5000

群集节点超时是指节点在失败状态下必须不可到达的毫秒数。大多数其他内部时间限制是节点超时的倍数。

注:请求超时,设置5秒够了。

33.  cluster-require-full-coverageyes

默认情况下,Redis集群节点如果检测到至少有一个散列槽(没有可用的节点正在服务),就会停止接受查询。这样,如果集群部分宕机(例如,不再覆盖散列槽的范围),那么所有集群最终都将不可用。当所有的插槽再次被覆盖时,它会自动返回。

但是,有时您希望集群的子集继续工作,继续接受仍然覆盖的关键空间部分的查询。为了做到这一点,只需将cluster-require-full-coverage选项设置为no。

34.  slowlog-log-slower-than10000

“Redis慢速日志”是一个记录超过指定执行时间的查询的系统。执行时间不包括I/O操作,比如与客户端,发送应答等等,但就实际执行命令所需的时间(这是唯一阶段命令执行的线程被阻塞,不能同时处理其他请求)。

您可以使用两个参数来配置慢速日志:一个告诉Redis,在微秒内,执行时间超过了命令的执行时间,另一个参数是慢日志的长度(第18条)。当新命令被记录时,最老的命令将从已记录的命令队列中删除。

单位:微秒

35.  slowlog-max-len128

这个长度没有限制。只要意识到它会消耗内存。可以回收利用慢速日志重置的慢速日志。

36.  latency-monitor-threshold0

Redis延迟监控子系统在运行时对不同的操作进行采样,以便收集与Redis实例可能的延迟来源相关的数据。

通过延迟命令,用户可以使用这些信息来打印图表并获取报告。

该系统只记录在一个时间内执行的操作,该操作的时间等于或大于通过延迟监控阈值配置指令所指定的毫秒数。当它的值设置为0时,延迟监视器就关闭了。

默认情况下,延迟监视是禁用的,因为如果您没有延迟问题,并且收集数据具有性能影响,那么在很大的负载下可以度量数据的性能影响。在运行时,如果需要,可以很容易地使用命令”CONFIGSET latency-monitor-threshold <milliseconds>”来启用延迟监视。

37.  hash-max-ziplist-entries512

hash-max-ziplist-value64

Hashes使用内存有效的数据结构进行编码,当它们有少量的条目时,最大的条目不超过给定的阈值。可以使用以下指令来配置这些阈值。

38.  list-max-ziplist-size-2

列表也以一种特殊的方式编码,以节省大量空间。每个内部列表节点允许的条目数可以指定为固定的最大大小或元素的最大数量。对于固定的最大尺寸,使用-5到-1,意思是:

-5:最大大小:64kb -> 不推荐用于正常工作负载

-4:最大尺寸:32kb -> 不推荐

-3:最大尺寸:16kb -> 可能不推荐

-2:最大尺寸:8kb  -> 很好

-1:最大尺寸:4 Kb -> 很好

正数意味着存储到每个列表节点上的元素数量。

最高执行选项通常是-2 (8kb大小)或-1 (4Kb大小),但如果您的用例是惟一的,则根据需要调整设置。

39.  list-compress-depth0

列表也可能被压缩

压缩深度是列表的每个边的quicklist ziplist节点的数量,以排除压缩。列表的头和尾总是为快速的push/pop操作而没有压缩。

设置:

0:禁用所有列表压缩。

1:depth 1的意思是“在1个节点进入列表后,从头部或尾部开始压缩”

So:[head]->node->node->…->node->[tail],[head],[tail]将始终未压缩;内部节点将压缩。

2: [head]->[next]->node->node->…->node->[prev]->[tail]

2在这里的意思是:不要压缩head或head->next或tail->prev或tail,而是压缩它们之间的所有节点。

3:[head]->[next]->[next]->node->node->…->node->[prev]->[prev]->[tail]

40.  set-max-intset-entries512

集合有一个特殊的编码:当一个集合由刚好是在64位有符号整数范围内的基数10中的整数组成。

此配置设置设置了大小的限制。

41.  zset-max-ziplist-entries128

zset-max-ziplist-value64

与散列和列表类似,排序集也是经过特殊编码的,以节省大量空间。

注:此编码仅当排序集的长度和元素低于以下限制时使用。

42.  hll-sparse-max-bytes3000

HyperLogLog稀疏表示字节限制。这个限制包括16个字节的标题。当使用稀疏表示的超loglog跨越这个限制时,它被转换为稠密表示。

注:一个大于16000的值是完全无用的,因为在那个点上,稠密表示的内存更有效。

建议值为3000,以便在不减速的情况下获得空间有效编码的好处,而PFADD是O(N),编码稀疏。当CPU不受关注时,可将值提高到10000,但是空间、数据集由许多具有基数在0 -15000范围内的超loglog组成。

43.  activerehashingyes

Active rehashing每100毫秒使用1毫秒的CPU时间来帮助重散主Redis哈希表(一个映射到值的顶级键)。

默认情况下,每秒钟使用这个毫秒为10次,以便主动地对主字典进行重新处理,在可能的情况下释放内存。

使用“activerehashing no”,如果您有很强的延迟需求,并且在您的环境中,Redis可以不时地以2毫秒的延迟来答复查询,这不是一件好事。

使用“activerehashing yes”如果您没有这样的硬性要求,但希望在可能的情况下尽快释放内存。

44.  client-output-buffer-limitnormal 0 0 0

client-output-buffer-limitslave 256mb 64mb 60

client-output-buffer-limitpubsub 32mb 8mb 60

客户端输出缓冲区的限制可以用来强迫那些由于某些原因而不能快速读取服务器数据的客户断开连接(一个常见的原因是,Pub/Sub客户端不能像发布服务器那样快速地使用消息)。

对于三种不同类型的客户,可以设置不同的限制:

normal : normal clients包括监控客户端

slave : slave clients

pubsub : 客户端订阅了至少一个pubsub通道或模式

每个client-output-buffer-limit指令的语法如下:

client-output-buffer-limit <class> <hardlimit> <soft limit> <soft seconds>

当达到硬限值时,客户端会立即断开连接,或者如果达到了软限制,并且持续达到指定的秒数(持续)。

例如如果硬限制是32字节和软限制是16 mb / 10秒,客户端会立即断开输出缓冲区的大小达到32字节,但也会断开如果客户达到16字节,不断克服了限制10秒钟。

默认情况下,正常的客户机不受限制,因为它们不会在没有请求的情况下接收数据(按push方式),但是在请求之后,所以只有异步客户机可能会创建一个场景,在这个场景中,请求数据的速度比读取的速度要快。相反,对于pubsub和从客户端来说,这是一个默认的限制,因为订阅者和奴隶会以推送的方式接收数据。

无论是强的还是弱的限制都可以通过设置为零来禁用。

45.  hz 10

Redis调用一个内部函数来执行许多后台任务,比如超时关闭客户机连接、清除未请求的过期键等。不是所有的任务都以相同的频率执行,但是Redis检查任务是否按照指定的“hz”值执行。

默认的“hz”设置为10。当Redis空闲时,提高该值将使用更多的CPU,但同时,当有许多键同时到期时,将使Redis更加敏感,并且可以更精确地处理超时。

注:这个范围在1到500之间,但是超过100通常不是一个好主意。大多数用户应该使用默认的10,并且只在需要非常低延迟的环境中提高到100。

46.  aof-rewrite-incremental-fsyncyes

当一个child重新编写AOF文件时,如果启用了该选项,那么这个文件将被fsync-ed每32 MB的数据生成。这是有用的,以便更增量地将文件提交到磁盘,并避免较大的延迟峰值。

47.  活动碎片整理(实验阶段)

Active(在线)碎片整理允许Redis服务器压缩内存中的小分配和数据分配之间的空间,从而允许回收内存。

分段是一个自然的过程,每个分配器都会发生(但是使用Jemalloc,幸运的是)和某些工作负载。通常需要重新启动服务器,以降低碎片化,或者至少要清除所有数据并重新创建。然而,由于OranAgra为Redis4.0实现的这个特性,这个过程可以在运行时以“热”的方式运行,而服务器正在运行。

基本上碎片超过一定水平时(见下面的配置选项)复述,将开始创建新副本的值在连续的内存区域利用特定Jemalloc特性(为了理解如果一个分配导致分裂和分配在一个更好的地方),同时,将旧的数据的副本。这个过程,对所有键重复地重复,将导致碎片返回到正常值。

注:

1)       默认情况下,该特性是禁用的,并且只有在您编译Redis时才会使用Jemalloc的副本,我们使用的是Redis的源代码。这是Linux构建的默认值。

2)       如果没有碎片问题,则不需要启用该特性。

3)       一旦您经历了碎片化,您就可以在需要时启用这个特性,而命令“CONFIG SETactivedefrag yes”。

配置参数能够微调碎片整理过程的行为。如果您不确定它们的含义,那么保留缺省值是一个好主意。

配置:

a)       activedefrag yes

启用活跃碎片整理

b)       active-defrag-ignore-bytes 100mb

最小的碎片浪费开始活动的碎片整理

c)       active-defrag-threshold-lower 10

最小百分比的碎片开始活动的碎片整理

d)       active-defrag-threshold-upper 100

我们使用最大努力的碎片的最大百分比

e)       active-defrag-cycle-min 25

在CPU百分比中对defrag最小的效率

f)        active-defrag-cycle-max 75

在CPU百分比中对defrag最大的效率

点这里可以跳转到人工智能网站

发表评论