Redis配置统计字典
本章将对Redis的系统状态信息(info命令结果)和Redis的所有配置(包括Standalone、Sentinel、Cluster三种模式)做一个全面的梳理,希望本章能够成为Redis配置统计字典,协助大家分析和解决日常开发和运维中遇到的问题,主要内容如下:
□ info系统状态说明。
□ Sentinel配置说明。
□ Cluster配置说明。
1.info系统状态说明
1.1 命令说明
info命令的使用方法有以下三种 :
□ info: 部分Redis系统状态统计信息。
□ info all: 全部Redis系统状态统计信息。
□ info section: 某一块的系统状态统计信息,其中 section可以忽略大小写。
例如,只对Redis的内存相关统计比较感兴趣,可以执行info memory,此时section =memory, 下面是info memory的结果:
127.0.0.1:6379> info memory # Memory used_memory: 5209229784 used_memory_human: 4.85G used_memory_rss: 6255316992 used_memory_peak:5828761544 used_memory_peak_human: 5.43G used_memory_lua: 36864 mem_fragmentation_ratio: 1.20 mem_allocator: jemalloc-3.6.0
在运维的时候发现客户端有些异常,可以执行info clients,如以下信息反映了输出缓冲区存在溢出的情况:
127.0.0.1:6379> info clients # Clients connected_clients:225 client_longest_output_list:245639 client_biggest_input_buf: 0 blocked_clients: 0
info all 命令包含Redis最全的系统状态信息,表14-1是 info all命令涉及的所有 section,其中每个模块名就是我们上面提到的section,例如info Server是查看Redis服务的基本信息。
表14-1 info 命令所有的 section | |
模块名 | 模块含义 |
Server | 服务器信息 |
Clients | 客户端信息 |
Memory | 内存信息 |
Persistence | 持久化信息 |
Stats | 全局统计信息 |
Replication | 复制信息 |
CPU | CPU消耗信息 |
Commandstats | 命令统计信息 |
Cluster | 集群信息 |
Keyspace | 数据库键统计信息 |
1.2 详细说明
下面将对每个模块进行详细说明,为了更加方便解释,我们直接结合线上一个运行的Redis实例进行说明。
1.Server
表14-2是 info Server模块的统计信息,包含了 Redis服务本身的一些信息,例如版本号、运行模式、操作系统的版本、TCP端口等。
表 14-2 info Server 模块统计信息 | ||
属性名 | 属性值 | 属性描述 |
redis version | 3.0.7 | Redis 服务版本 |
redis_git_sha1 | 00000000 | Git SHA1 |
redis_git_dirty | 0 | Git dirty flag |
redis_build_id | 186eba9451cf9390 | Redis build id |
redis_mode | cluster | 运行模式,分为: Cluster 、 Sentinel 、Standalone |
os | Linux2.6.18-274.el5 x 86_64 | Redis 所在机器的操作系统 |
arch_bits | 64 | 架构(32或64位) |
multiplexing api | epoll | Redis 所使用的事件处理机制 |
gcc_version | 4.1.2 | 编译Redis时所使用的GCC版本 |
process_id | 31524 | Redis 服务进程的 PID |
run_id | fd8b97739c469526f 640b8895a5084d669ed151f | Redis 服务的标识符 |
tcp_port | 6384 | 监听端口 |
uptime_in_seconds | 9753347 | 自Redis服务启动以来,运行的秒数 |
uptime_in_days | 112 | 自Redis服务启动以来,运行的天数 |
hz | 10 | serverCron每秒运行次数 |
lru_clock | 16388503 | 以分钟为单位进行自增的时钟 ,用于LRU管理 |
config_file | /opt/cachecloud/conf/ redis-cluster-6384 .conf | Redis 的配置文件 |
2.Client
表14-3是info Clients 模块的统计信息,包含了连接数、阻塞命令连接数、输入输出缓冲区等相关统计信息。
表 14-3 info Clients 模块统计信息 | ||
属性名 | 属性值 | 属性描述 |
connected_clients | 262 | 当前客户端连接数 |
client_longestoutput_list | 0 | 当前所有输出缓冲区中队列对象个数的最大值 |
client_biggest_input_buf | 0 | 当前所有输入缓冲区中占用的最大容量 |
blocked_clients | 0 | 正在等待阻塞命令(例如 BLPOP等)的客户端数量 |
3.Memory
表14-4是 info Memory 模块的统计信息,包含了 Redis 内存使用、系统内存使用、碎片率、内存分配器等相关统计信息。
表 14-4 info Memory 模块统计信息 | ||
属性名 | 属性值 | 属性描述 |
used_memory | 183150904 | Redis分配器分配的内存总量,也就是内部存储的所有数据内存占用量 |
used_memory_human | 174.67M | 以可读的格式返回 used_memory |
used_memory_rss | 428621824 | 从操作系统的角度, Redis 进程占用的物理内存总量 |
used_memory_peak | 522768352 | 内存使用的最大值,表示 used_memory 的峰值 |
used_memory_peak_human | 498.55M | 以可读的格式返回 used_memory_peak |
used_memory_lua | 35840 | Lua引擎所消耗的内存大小 |
mem_fragmentation_ratio | 2.34 | used_memory_rss/used_memory比值,表示内存碎片率 |
mem_allocator | jemalloc-3.6.0 | Redis所使用的内存分配器。默认为: jemalloc |
4.Persistence
表 14-5是 info Persistence 模块的统计信息,包含了RDB和 AOF两种持久化的一些统计信息。
表 14-5 info Persistence 模块统计信息 | ||
属性名 | 属性值 | 属性描述 |
loading | 0 | 是否在加载持久化文件。0否,1是 |
rdb_changes_since_last_save | 53308858 | 自上次RDB后,Redis 数据改动条数 |
rdb_bgsave_in_progress | 0 | 标识RDB的bgsave 操作是否进行中。 0否,1是 |
rdb_last_save_time | 1456376460 | 上次bgsave操作的时间戳 |
rdb_last_bgsave_status | ok | 上次bgsave操作状态 |
rdb_last_bgsave_time_sec | 3 | 上次bgsave操作使用的时间(单位是秒) |
rdb_current_bgsave_time_sec | -1 | 如果bgsave操作正在进行,则记录当前 bgsave 操作使用的时间(单位是秒) |
aof_enabled | 1 | 是否开启了AOF功能。0否,1 是 |
aof_rewrite_in_progress | 0 | 标识AOF的rewrite操作是否在进行中。 0 否,1是 |
aof_rewrite_scheduled | 0 | 标识是否将要在RDB的bgsave 操作结束后执行 AOF rewrite 操作 |
aof_lastrewrite_time_sec | 0 | 上次AOF rewrite 操作使用的时间(单位是秒) |
aof_current_rewrite_time_sec | -1 | 如果rewrite操作正在进行,则记录当前AOF rewrite所使用的时间(单位是秒) |
aof_last_bgrewrite_status | ok | 上次AOF重写操作的状态 |
aof_last_write_status | ok | 上次AOF写磁盘的结果 |
aof_current_size | 186702421 | AOF当前尺寸(单位是字节) |
aof_base_size | 134279710 | AOF上次启动或 rewrite 的尺寸(单位是字节) |
aof_buffer_length | 0 | AOF buffer 的大小 |
aof_rewrite_buffer_length | 0 | AOF rewrite buffer 的大小 |
aof_pending_bio_fsync | 0 | 后台IO队列中等待 fsync任务的个数 |
aof_delayed_fsync | 64 | 延迟的 fsync计数器 |
5.Stats
表 14-6是 info Stats 模块的统计信息,是 Redis的基础统计信息,包含了:连接、命令、网络、过期、同步等很多统计信息。
表 14-6 info Stats 模块统计信息 | ||
属性名 | 属性值 | 属性描述 |
total_connections_received | 495967 | 连接过的客户端总数 |
total_commands_processed | 5139857171 | 执行过的命令总数 |
instantaneous_ops_per_sec | 511 | 每秒处理命令条数 |
total_net_input_bytes | 282961395316 | 输入总网络流量(以字节为单位) |
total_net_output_bytes | 1760503612586 | 输出总网络流量(以字节为单位) |
instantaneous_input_kbps | 28.24 | 每秒输入字节数 |
instantaneous_output_kbps | 234.90 | 每秒输出字节数 |
rejected_connections | 0 | 拒绝的连接个数 |
sync_full | 4 | 主从完全同步成功次数 |
sync_partial_ok | 0 | 主从部分同步成功次数 |
sync_partial_err | 0 | 主从部分同步失败次数 |
expired_keys | 45534039 | 过期的 key 数量 |
evicted_keys | 0 | 剔除(超过了maxmemory后)的key 数量 |
keyspace_hits | 3923837939 | 命中次数 |
keyspace_misses | 1078922155 | 不命中次数 |
pubsub_channels | 0 | 当前使用中的频道数量 |
pubsub_patterns | 0 | 当前使用中的模式数量 |
latest_fork_usec | 16194 | 最近一次fork操作消耗的时间(微秒) |
migrate_cached_sockets | 0 |
记录当前Redis正在进行migrate 操作的目标 Redis个数。 例如RedisA分别向RedisB和C执行 migrate 操作,那么这个值就是2 |
6.Replication
表 14-7是 info Replication 模块的统计信息,包含了 Redis主从复制的一些统计信息,根据主从节点,统计信息也略有不同。
表 14-7 info Replication 模块统计信息 | |||
角色 | 属性名 | 属性值 | 属性描述 |
通用配置 | role | master|slave | 节点的角色 |
主节点 | connected_slaves | 1 | 连接的从节点个数 |
slaveO |
slave0:ip=10.10.xx. 160,port=6382, state =online,offset=426978948465, lag=1 |
连接的从节点信息 | |
master_repl_offset | 426978955146 | 主节点偏移量 | |
从节点 | master_host | 10.10.xx.63 | 主节点ip |
master_port | 6387 | 主节点端口 | |
master_link_status | up | 与主节点的连接状态 | |
master_last_io_seconds_ago | 0 | 主节点最后与从节点的通信时间间隔,单位为秒 | |
master_sync_in__progress | 0 | 从节点是否正在全量同步主节点RDB文件。 | |
slave_repl_offset | 426978956171 | 复制偏移量 | |
slave_priority | 100 | 从节点优先级 | |
slave_read_only | 1 | 从节点是否只读 | |
connected_slaves | 0 | 连接从节点个数 | |
master_repl_offset | 0 | 当前从节点作为其他节点的主节点时的复制偏移量 | |
通用配置 | repl_backlog_active | 1 | 复制缓冲区状态 |
repl_back_log_size | 10000000 | 复制缓冲区尺寸 (单位:字节) | |
repl_backlog_first_byte_offset | 426968955147 | 复制缓冲区起始偏移量,标识当前缓冲区可用范围 | |
repl_backlog_histlen | 10000000 | 标识复制缓冲区已存有效数据长度 |
7.CPU
表 14-8是 info CPU模块的统计信息,包含了 Redis进程和子进程对于CPU消耗的一些统计信息。
表 14-8 info CPU模块统计信息 | ||
属性名 | 属性值 | 属性描述 |
used_cpu_sys | 31957.30 | Redis主进程在内核态所占用的CPU时钟总和 |
used_cpu_user | 72484.27 | Redis主进程在用户态所占用的CPU时钟总和 |
used_cpu_sys_children | 121.49 | Redis子进程在内核态所占用的CPU时钟总和 |
used_cpu_user_children | 195.13 | Redis子进程在用户态所占用的CPU时钟总和 |
8.Commandstat
表 14-9是 info Commands tats模块的统计信息,是 Redis命令统计信息,包含各个命令的命令名、总次数、总耗时、平均耗时。
表 14-9 info Commandstats模块统计信息 | ||
属性名 | 属性值 | 属性描述 |
cmdstat_get | calls=3738730699,usec= 11054972404,usec_per_call=2.96 | get命令调用总次数、总耗时 、平均耗时(单位:微秒) |
cmdstat_set | calls=50174458,usec=323143686,usec_per_call=6.44 |
set命令调用总次数、总耗时,平均耗时(单位:微秒) |
9.Cluster
表 14-10是 info Cluster模块的统计信息,目前只有一个统计信息,标识当前Redis是否为Cluster模式。
表 14-10 info Cluster模块统计信息 | ||
属性名 | 属性值 | 属性描述 |
cluster enabled | 1 | 节点是否为cluster 模式。1 是,0否 |
10.Keyspace
表 14-11 是 info Keyspace模块的统计信息,包含了每个数据库的键值统计信息。
表 14-11 info Keyspace模块统计信息 | ||
属性名 | 属性值 | 属性描述 |
dbO | db0:keys= 106430,expires=56107,avg_ttl=60283952 | 当前数据库key总数,带有过期时间的key总数,平均存活时间 |
2.Sentinel配置说明和分析
Sentinel节点是特殊的Redis节点,有几个特殊的配置,如表14-21所示。
表 14-21 Redis Sentinel节点配置说明 | ||||
参数名 | 含义 | 默认值 | 可选值 |
可否支持sentinel set配置热生效 |
sentinel monitor <master-name> <ip> <port> <quorum> |
定义监控的主节点名、ip、port、主观下线票数 |
sentinel monitor my master 127.0.0.1 6379 2 |
自定义 masterName 实际的 ip:port 票数 |
支持 <quorum> |
sentinel down-after-millisecon ds <master-name> <times> |
Sentinel 判定节点不可达的毫秒数 | Sentinel down-aftermilliseconds mymaster 30 000 | 整数 | 支持 |
sentinel parallel-syncs <master-name> <nums> |
在执行故障转移时,最多有多少个从服务器同时对 新的主服务器进行同步 |
sentinel parallel-syncs mymaster 1 | 大于0,不超过从服务器个数 | 支持 |
sentinel failover-timeout <master-name> <times> |
故障迁移超时时间 | sentinel failover-timeout mymaster 180 000 | 整数 | 支持 |
sentinel auth-pass <master-name><password> |
主节点密码 | 空 | 主节点密码 | 支持 |
sentinel notification-script <master-name> <script-path> |
故障转移期间脚本通知 |
空 | 脚本文件路径 | 支持 |
sentinel client-reconfig-script <master-name> <script-path> |
故障转移成功后脚本通知 |
空 | 脚本文件路径 | 支持 |
3.Cluster配置说明和分析
Cluster节点是特殊的Redis节点,有几个特殊的配置,如表14-22所示。
表 14-22 Redis Cluster配置说明 |
||||
参数名 |
含义 |
默认值 |
可选值 |
可否支持config set配置热生效 |
cluster-node-timeout |
集群节点超时时间(单位:毫秒) |
15000 |
整数 |
可以 |
cluster-migration-barrier |
主从节点切换需要的从节点数最小个数 |
1 |
整数 |
可以 |
cluster-slave-validity-factor |
从节点有效性 判断因子,当从节点与主节点最后通信时间超过(cluster-node-timeout * slave-validity-factor) + repl-ping-slave-period 时,对应从节点不具备故障转移资格,防止断线时间过长的从节点进行故障转移。设置为0 表示从节点永不过期 |
10 |
整数 |
可以 |
cluster-require-full-coverage |
集群是否需要所有的 slot 都分配 给在线节点,才能正常访问 |
yes |
yes|no |
可以 |
cluster-enabled |
是否开启集群模式 |
yes |
yes|no |
不可以 |
cluster-config-file |
集群配置文件名称 |
nodes.conf |
nodes-{port}.conf |
不可以 |