系统配置
vm.overcommit_memory
Linux系统对内存请求都会分配,以便能运行更多程序。在申请内存后并不会马上使用内存,这种技术就叫做overcommit,如果参数设置为0则Redis会出现告警。
|
|
该参数有三个值可选,Redis建议设置为1并配合maxmemory使用
值 | 描述 |
---|---|
0 | 内核将检查是否有可用内存(包括swap),如果有足够的内存,则申请通过,否则将失败信息返回给应用程序 |
1 | 内核允许超量使用内存直到用完为止 |
2 | 内核保证不会超量使用内存,即不超过swap+50%的RAM值,50%是参数overcommit_ratio控制 |
修改内核参数
|
|
swappiness
swap内存交换空间能够在内存不足时,对部分内存页进行swap操作。但swap空间是由硬盘提供,对于高并发应用程序来说,磁盘IO能力会成为系统瓶颈。Linux并不是完全等到内存不够用时才使用swap,参数swappiness会决定系统使用swap的策略。swappiness取值范围为0~100,值越大说明系统会更积极使用swap,值越低系统就更倾向于物理内存,默认值为60
值 | 描述 |
---|---|
0 | Linux3.5以及以上:宁愿OOM killer也不用swap;Linux3.4以及更早:宁愿swap也不要OOM killer |
1 | Linux3.5以及以上:宁愿swap也不要OOM killer |
60 | 默认值 |
100 | 操作系统会主动地使用swap |
查看swap使用情况
|
|
设置swappiness
|
|
如果Linux > 3.5 ,则设置为1,否则设置为0。但是Redis为高可用环境时,死掉会比阻塞更好,能够及时切换到正常节点上
THP
Linux kernel在2.6.38内核增加了Transparent Huge Pages (THP)特性 ,支持大内存页(2MB)分配,默认开启。当开启时可以降低fork子进程的速度,但fork之后,每个内存页从原来4KB变为2MB,会大幅增加重写期间父进程内存消耗。同时每次写命令引起的复制内存页单位放大了512倍,会拖慢写操作的执行时间,导致大量写操作慢查询。因此,建议关闭该功能。
|
|
NTP
无论是什么数据库环境,都强烈建议配置时间同步,避免集群节点出现时间不一致的情况,增加问题排查日志难度,定时任务异常等情况。日常可以使用NTP服务来作为时间同步,通过crontab定时同步系统时间
ulimit
open files限制单个用户最大文件打开个数。Redis的maxclients默认为10000,加上最大32个文件描述符,因此建议open files设置为至少10032,如果采用默认的4096,减去32个文件描述符,则maxclients仅为4064
|
|
TCP backlog
Redis默认的tcp-backlog为511,可以通过修改配置tcp-backlog进行调整,如果Linux的tcp-backlog小于Redis设置的tcp-backlog,那么在Redis启动时会看到如下日志:
|
|
修改tcp backlog
|
|
Redis安装
解压安装包
|
|
编译安装
|
|
创建数据目录
|
|
参数配置(/etc/redis.conf)
|
|
设置环境变量
|
|
启动数据库实例
|
|
附录
参数详解
参数 | 说明 |
---|---|
daemonize | 是否以后台进程启动 |
databases | 创建database的数量 |
port | 进程对应的端口,默认为6379 |
tcp-keepalive | 指定TCP连接是否为长连接,0则关闭,非0则开启 |
loglevel | Server日志级别:debug调试模式、verbose、notice、warning |
protected-mode | 外网保护模式,禁止外网访问redis,如果要设置为no,需确保数据库不会暴漏在外网,设置为YES的话需要设置bind绑定内网IP或设置实例密码 |
pidfile | 指定pid文件的存放位置 |
logfile | 指定日志文件的存放位置 |
requirepass | 设置redis登录密码 |
maxmemory | 设置redis最大内存大小,单位为byte |
bind | 设置绑定的网口IP,用于接收服务请求 |
hz | Server执行后台任务的频率 |
save | rdb持久化策略,例如save 300 1表示5分钟内至少一个key变更则触发持久化操作,禁用rdb持久化可设置save "" |
rdbcompression | 是否启用rdb文件压缩,默认为yes |
rdbchecksum | 是否对rdb文件使用CRC64校验和 |
stop-writes-on-bgsave-error | 当bgsave持久化写入错误时是否停止 |
dbfilename | 设置rdb文件名称,默认为dump.rdb |
dir | 指定持久化文件的存放位置 |
appendonly | 是否开启AOF持久化 |
appendfilename | 指定AOF持久化文件名称,默认为appendonly.aof |
appendfsync | AOF持久化策略,可选值有always、everysec、no |
no-appendfsync-on-rewrite | 表示rewrite重写AOF时,是否阻塞AOF持久化,no表示会阻塞 |
auto-aof-rewrite-percentage | 触发AOF文件rewrite的增长百分比 |
auto-aof-rewrite-min-size | 触发AOF文件rewrite的大小 |
aof-rewrite-incremental-fsync | AOF rewrite是否采取增量文件同步策略 |
slaveof | 当前为从库时,设置同步主库信息 |
masterauth | 当前为从库时,设置主库的登录密码 |
repl-timeout | 复制超时时间,单位为秒,默认为60 |
slave-server-stale-data | 当前为从库时,在与主库连接断开时,是否继续提供服务 |
slave-read-only | 当前为从库时,只读 |
redis-disable-tcp-nodelay | 主从是否延迟传输 |
slave-priority | 指定slave的优先级,在哨兵模式下,主库宕机,会将优先级最小的提升为master。如果设置为0则永远不会提升为master |
slowlog-log-slower-than | 慢查询日志记录阀值,单位为微秒,超过阀值将被记录到慢查询日志 |
slowlog-max-len | 控制slow log保留多少条记录,超过后将删除最旧的一条记录 |
hash-max-ziplist-entries | hash类型默认采用ziplist结构编码,超过该值则采用hashtable |
hash-max-ziplist-value | ziplist允许条目value值的最大字节数 |
list-max-ziplist-entries | list类型默认采用ziplist结构编码,超过该值则采用linkedlist |
list-max-ziplist-value | ziplist允许条目value值的最大字节数 |
set-max-intset-entries | intset中允许保存的最大条目数,如果达到阀值,才重构为hashtable |
zset-max-ziplist-entries | zset类型默认采用ziplist编码结构,超过阀值将重构为skiplist |
zset-max-ziplist-value | zset允许条目value值的最大字节数 |
activerehashing | 是否开启顶层数据结构得rehash功能 |
client-output-buffer-limit normal | 客户端buffer控制,normal表示普通连接,hard表示最大值,一旦到达立即关闭连接,soft表示容忍值,和seconds配合表示在超过seconds则关闭连接,都设置为0则表示禁用 |
client-output-buffer-limit slave | 客户端buffer控制,slave表示从库连接,hard表示最大值,一旦到达立即关闭连接,soft表示容忍值,和seconds配合表示在超过seconds则关闭连接,都设置为0则表示禁用 |
client-output-buffer-limit pubsub | 客户端buffer控制,pubsub表示pub/sub类型连接,hard表示最大值,一旦到达立即关闭连接,soft表示容忍值,和seconds配合表示在超过seconds则关闭连接,都设置为0则表示禁用 |
rename-command | 重命名指定命令 |