使用info,cluster info, cluster nodes分析集群现状情况
场景一
集群状态正常情况
info
server服务器信息分析
# Server
redis_version:5.0.6 #Redis 服务器版本
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:490893054031c673
redis_mode:cluster
os:Linux 3.10.0-957.10.1.el7.x86_64 x86_64 #服务器的宿主操作系统
arch_bits:64
multiplexing_api:epoll
atomicvar_api:sync-builtin
gcc_version:4.4.7 #编译 Redis 时所使用的 GCC 版本
process_id:31 #服务器进程的 PID
run_id:f3ce089ce47f1aa63f72ce2c30f6ba2216f5bbac
tcp_port:7100 #监听端口
uptime_in_seconds:179732 #自 Redis 服务器启动以来,经过的秒数
uptime_in_days:2 #自 Redis 服务器启动以来,经过的天数
hz:10
configured_hz:10
lru_clock:10364264
executable:/data/br/base/redis/redis-server
config_file:/data/br/base/redis/redis7100.conf #配置文件目录
注意:可以通过uptime_in_seconds和uptime_in_days参数来判断redis节点最近重启的时间
clients客户端信息分析
# Clients
connected_clients:2 #已连接客户端的数量(不包括通过从属服务器连接的客户端)
client_recent_max_input_buffer:2
client_recent_max_output_buffer:0
blocked_clients:0 #正在等待阻塞命令(BLPOP、BRPOP、BRPOPLPUSH)的客户端的数量
memory内存信息分析
# Memory
used_memory:6373272 #Redis分配的内存总量,即存储的所有数据占用的内存
used_memory_human:6.08M #以可读格式返回使用的内存量
used_memory_rss:23040000 #从系统角度,显示Redis进程占用的物理内存总量
used_memory_rss_human:21.97M #以可读格式返回Redis进程占用的物理内存总量
used_memory_peak:33476408 #内存使用的最大值,表示used_memory峰值
used_memory_peak_human:31.93M #以可读格式返回内存使用的最大值
used_memory_peak_perc:19.04%
used_memory_overhead:6269550
used_memory_startup:5104552
used_memory_dataset:103722
used_memory_dataset_perc:8.18%
allocator_allocated:6654952
allocator_active:7032832
allocator_resident:14790656
total_system_memory:8201052160 #系统总内存
total_system_memory_human:7.64G #以可读格式返回系统总内存
used_memory_lua:37888
used_memory_lua_human:37.00K
used_memory_scripts:0
used_memory_scripts_human:0B
number_of_cached_scripts:0
maxmemory:4294967296
maxmemory_human:4.00G #Redis实例的最大内存配置
maxmemory_policy:allkeys-lru #内存淘汰策略
allocator_frag_ratio:1.06
allocator_frag_bytes:377880
allocator_rss_ratio:2.10
allocator_rss_bytes:7757824
rss_overhead_ratio:1.56
rss_overhead_bytes:8249344
mem_fragmentation_ratio:3.66 #内存碎片率,等价于(used_memory_rss /used_memory)。由于Redis释放了内存块,但内存分配器并没有返回内存给操作系统
mem_fragmentation_bytes:16749928
mem_not_counted_for_evict:0
mem_replication_backlog:1048576
mem_clients_slaves:49694
mem_clients_normal:66616
mem_aof_buffer:0
mem_allocator:jemalloc-5.1.0 #redis使用的内存分配器
active_defrag_running:0
lazyfree_pending_objects:0
注意:
在理想情况下, used_memory_rss 的值应该只比 used_memory 稍微高一点儿。当 rss > used ,且两者的值相差较大时,表示存在(内部或外部的)内存碎片。内存碎片的比率可以通过 mem_fragmentation_ratio 的值看出。当 used > rss 时,表示 Redis 的部分内存被操作系统换出到交换空间了,在这种情况下,操作可能会产生明显的延迟。当 Redis 释放内存时,分配器可能会,也可能不会,将内存返还给操作系统。
# 开启自动清除垃圾碎片功能
activedefrag yes
persistence持久化信息分析
# Persistence
loading:0 #服务器是否正在载入持久化文件
rdb_changes_since_last_save:0 #离最近一次成功生成rdb文件,写入命令的个数,即有多少个写入命令没有持久化
rdb_bgsave_in_progress:0 #服务器是否正在创建rdb文件
rdb_last_save_time:1637639613 #离最近一次成功创建rdb文件的时间戳。当前时间戳 - rdb_last_save_time=多少秒未成功生成rdb文件
rdb_last_bgsave_status:ok #最近一次rdb持久化是否成功
rdb_last_bgsave_time_sec:0 #最近一次成功生成rdb文件耗时秒数
rdb_current_bgsave_time_sec:-1
rdb_last_cow_size:8839168
aof_enabled:1 #是否开启了aof
aof_rewrite_in_progress:0
aof_rewrite_scheduled:0
aof_last_rewrite_time_sec:1 #最近一次aof rewrite耗费的时长
aof_current_rewrite_time_sec:-1
aof_last_bgrewrite_status:ok
aof_last_write_status:ok
aof_last_cow_size:46456832
aof_current_size:16662731
aof_base_size:16662731
aof_pending_rewrite:0
aof_buffer_length:0
aof_rewrite_buffer_length:0
aof_pending_bio_fsync:0
aof_delayed_fsync:0
stats状态信息分析
# Stats
total_connections_received:1863 #连接过的客户端总数
total_commands_processed:1625256 #处理过的命令总数
instantaneous_ops_per_sec:0 #每秒处理的命令数
total_net_input_bytes:5994973921
total_net_output_bytes:5994921934
instantaneous_input_kbps:0.03
instantaneous_output_kbps:0.01
rejected_connections:0 #由于 maxclients 限制而拒绝的连接数量
sync_full:1
sync_partial_ok:0
sync_partial_err:1
expired_keys:0 #key 过期事件的总数
expired_stale_perc:0.00
expired_time_cap_reached_count:0
evicted_keys:0 #由于 maxmemory 限制,而被回收内存的 key 的总数
keyspace_hits:1
keyspace_misses:0
pubsub_channels:0
pubsub_patterns:0
latest_fork_usec:4114
migrate_cached_sockets:0
slave_expires_tracked_keys:0
active_defrag_hits:0
active_defrag_misses:0
active_defrag_key_hits:0
active_defrag_key_misses:0
注意:
total_connections_received 和 total_commands_processed 反映了 Redis 服务器自从启动以来,所有处理过的连接数和命令数。instantaneous_ops_per_sec 反应了 Redis 服务器的忙碌状态。当 rejected_connections 的值不为 0 时,说明应用的连接数过多, 或者 maxclients 配置的太小。
Redis 中的存放和访问情况了。如果 key 在明确的时间周期内被使用,或者旧的 key 将来可能不会被使用,就可以用 Redis 过期时间命令(expire,expireat, pexpire, pexpireat 等)去设置过期时间,这样 Redis 就会在 key 过期时自动删除 key,这个信息可以通过expired_keys 去查看。当内存使用达到设置的最大阀值 maxmemory 时,Redis 则会根据设置的 key 逐出策略,淘汰 Redis 中存储的数据,这个信息可以根据 evicted_keys 查看。
replication复制信息分析
# Replication
role:master #实例的角色,是master or slave
connected_slaves:1 #连接的slave实例个数
slave0:ip=10.241.90.22,port=7200,state=online,offset=5987607162,lag=0
master_replid:94ff75556908ad4786afaddeced3d328f3100911
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:5987607162 #主从同步偏移量,此值如果和上面的offset相同说明主从一致没延迟,与master_replid可被用来标识主实例复制流中的位置。
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:5986558587
repl_backlog_histlen:1048576
其他模块分析
# CPU
used_cpu_sys:436.733866
used_cpu_user:323.262940
used_cpu_sys_children:13.425409
used_cpu_user_children:2.855241
# Cluster
cluster_enabled:1 #集群功能是否已经开启
# Keyspace
db0:keys=2,expires=0,avg_ttl=0 #数据库相关的统计信息
cluster nodes
127.0.0.1:7100> cluster nodes
cc5f16e884261f91d198bc7d88fb5a6065248d8a 10.241.90.22:7200@17200 slave c470ec92c72267b60a3b362845b6f6f54c7b190b 0 1642416719551 4 connected
260205918b2c1cbb26e3dbf68c9ae6062a89f999 10.241.90.2:7200@17200 slave 3b6d2678635dae7c186e8a1f2870510ff8ec936a 0 1642416718545 5 connected
3b6d2678635dae7c186e8a1f2870510ff8ec936a 10.241.40.2:7100@17100 master - 0 1642416718000 5 connected 10923-16383
1dd4d6d5bedb748093c0af5d44dc9da276a3965e 10.241.40.2:7200@17200 slave 90841afd83baeac3447265ed591ff3f14a90fbeb 0 1642416717542 6 connected
90841afd83baeac3447265ed591ff3f14a90fbeb 10.241.90.22:7100@17100 master - 0 1642416716538 3 connected 5461-10922
c470ec92c72267b60a3b362845b6f6f54c7b190b 10.241.90.2:7100@17100 myself,master - 0 1642416713000 1 connected 0-5460
分析:
从命令结果可以看出集群的节点信息,connected表示集群是连接的状态,master是主节点,slave是从节点,myself是当前连接的节点,可以通过slave后面的id来对应master最前面的id来确定哪个节点是哪个主节点的从。
cluster info
127.0.0.1:7100> cluster info
cluster_state:ok #ok状态表示集群可以正常接受查询请求。fail 状态表示,至少有一个哈希槽没有被绑定
cluster_slots_assigned:16384 #已分配到集群节点的哈希槽数量,16384个哈希槽全部被分配到集群节点是集群正常运行的必要条件.
cluster_slots_ok:16384 #哈希槽状态不是FAIL 和 PFAIL 的数量
cluster_slots_pfail:0 #哈希槽状态是 PFAIL的数量。只要哈希槽状态没有被升级到FAIL状态,这些哈希槽仍然可以被正常处理。PFAIL状态表示我们当前不能和节点进行交互,但这种状态只是临时的错误状态
cluster_slots_fail:0 #哈希槽状态是FAIL的数量。如果值不是0,那么集群节点将无法提供查询服务,除非cluster-require-full-coverage被设置为no
cluster_known_nodes:6 #集群中节点数量,包括处于握手状态还没有成为集群正式成员的节点
cluster_size:3 #至少包含一个哈希槽且能够提供服务的master节点数量
cluster_current_epoch:6 #集群本地Current Epoch变量的值
cluster_my_epoch:1 #当前正在使用的节点的Config Epoch值
cluster_stats_messages_ping_sent:340
cluster_stats_messages_pong_sent:359
cluster_stats_messages_sent:699 #通过node-to-node二进制总线发送的消息数量.
cluster_stats_messages_ping_received:354
cluster_stats_messages_pong_received:340
cluster_stats_messages_meet_received:5
cluster_stats_messages_received:699 #通过node-to-node二进制总线接收的消息数量.
场景二
停掉一个从节点情况下,集群状态分析
cluster nodes
127.0.0.1:7100> cluster nodes
cc5f16e884261f91d198bc7d88fb5a6065248d8a 10.241.90.22:7200@17200 slave c470ec92c72267b60a3b362845b6f6f54c7b190b 1642417697044 1642417695000 4 disconnected
260205918b2c1cbb26e3dbf68c9ae6062a89f999 10.241.90.2:7200@17200 slave 3b6d2678635dae7c186e8a1f2870510ff8ec936a 0 1642417723537 5 connected
3b6d2678635dae7c186e8a1f2870510ff8ec936a 10.241.40.2:7100@17100 master - 0 1642417722530 5 connected 10923-16383
1dd4d6d5bedb748093c0af5d44dc9da276a3965e 10.241.40.2:7200@17200 slave 90841afd83baeac3447265ed591ff3f14a90fbeb 0 1642417719510 6 connected
90841afd83baeac3447265ed591ff3f14a90fbeb 10.241.90.22:7100@17100 master - 0 1642417721522 3 connected 5461-10922
c470ec92c72267b60a3b362845b6f6f54c7b190b 10.241.90.2:7100@17100 myself,master - 0 1642417717000 1 connected 0-5460
分析:通过cluster nodes命令可以看到从节点10.241.90.22:7200变成了disconnected
cluster info
127.0.0.1:7100> cluster info
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
cluster_current_epoch:6
cluster_my_epoch:1
cluster_stats_messages_ping_sent:2409
cluster_stats_messages_pong_sent:1179
cluster_stats_messages_sent:3588
cluster_stats_messages_ping_received:1174
cluster_stats_messages_pong_received:1138
cluster_stats_messages_meet_received:5
cluster_stats_messages_received:2317
分析:通过cluster info可以看到集群状态还是OK的状态,表示集群依然可用
场景三
停掉一个从节点情况下,集群状态分析
在停止一个主几点之前,查询key zhuting可以正常查询到它的值,zhuting这个key所在的节点是10.241.90.22:7100。
10.241.40.2:7100> get zhuting
-> Redirected to slot [8894] located at 10.241.90.22:7100
"123"
现在将这个key所在的主节点10.241.90.22:7100停止
cluster nodes
90841afd83baeac3447265ed591ff3f14a90fbeb 10.241.90.22:7100@17100 master - 1642418404759 1642418402652 3 disconnected
3b6d2678635dae7c186e8a1f2870510ff8ec936a 10.241.40.2:7100@17100 master - 0 1642418738735 5 connected 10923-16383
260205918b2c1cbb26e3dbf68c9ae6062a89f999 10.241.90.2:7200@17200 slave 3b6d2678635dae7c186e8a1f2870510ff8ec936a 0 1642418738000 5 connected
1dd4d6d5bedb748093c0af5d44dc9da276a3965e 10.241.40.2:7200@17200 myself,master - 0 1642418735000 7 connected 5461-10922
cc5f16e884261f91d198bc7d88fb5a6065248d8a 10.241.90.22:7200@17200 slave c470ec92c72267b60a3b362845b6f6f54c7b190b 0 1642418737000 4 connected
c470ec92c72267b60a3b362845b6f6f54c7b190b 10.241.90.2:7100@17100 master - 0 1642418736723 1 connected 0-5460
分析:通过cluster nodes命令可以看到主节点10.241.90.22:7100变成了disconnected,但是由于故障转移,它的从节点10.241.40.2:7200变成了master状态
cluster info
127.0.0.1:7100> cluster info
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
cluster_current_epoch:6
cluster_my_epoch:1
cluster_stats_messages_ping_sent:7894
cluster_stats_messages_pong_sent:1841
cluster_stats_messages_sent:9735
cluster_stats_messages_ping_received:1836
cluster_stats_messages_pong_received:1817
cluster_stats_messages_meet_received:5
cluster_stats_messages_received:3658
分析:通过cluster info可以看到集群状态还是OK的状态,表示集群依然可用
127.0.0.1:7100> get zhuting
-> Redirected to slot [8894] located at 10.241.40.2:7200
"123"
10.241.40.2:7200>
再次获取键zhuting的值,能够正常获取到
场景四
停掉一对主从节点情况下,集群状态分析
将一对主从节点10.241.90.22:7100和10.241.40.2:7200都停止
cluster nodes
127.0.0.1:7100> cluster nodes
cc5f16e884261f91d198bc7d88fb5a6065248d8a 10.241.90.22:7200@17200 slave c470ec92c72267b60a3b362845b6f6f54c7b190b 0 1642420651000 4 connected
260205918b2c1cbb26e3dbf68c9ae6062a89f999 10.241.90.2:7200@17200 slave 3b6d2678635dae7c186e8a1f2870510ff8ec936a 0 1642420652984 5 connected
3b6d2678635dae7c186e8a1f2870510ff8ec936a 10.241.40.2:7100@17100 master - 0 1642420653994 5 connected 10923-16383
1dd4d6d5bedb748093c0af5d44dc9da276a3965e 10.241.40.2:7200@17200 master - 1642420560981 1642420556970 7 disconnected 5461-10922
90841afd83baeac3447265ed591ff3f14a90fbeb 10.241.90.22:7100@17100 master,fail - 1642418431382 1642418429076 3 disconnected
c470ec92c72267b60a3b362845b6f6f54c7b190b 10.241.90.2:7100@17100 myself,master - 0 1642420650000 1 connected 0-5460
分析:通过cluster nodes命令可以看到一对主从节点10.241.90.22:7100和10.241.40.2:7200都变成了disconnected
cluster info
127.0.0.1:7100> cluster info
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
cluster_current_epoch:7
cluster_my_epoch:1
cluster_stats_messages_ping_sent:34572
cluster_stats_messages_pong_sent:4023
cluster_stats_messages_fail_sent:4
cluster_stats_messages_auth-ack_sent:1
cluster_stats_messages_sent:38600
cluster_stats_messages_ping_received:4018
cluster_stats_messages_pong_received:4027
cluster_stats_messages_meet_received:5
cluster_stats_messages_fail_received:1
cluster_stats_messages_auth-req_received:1
cluster_stats_messages_received:8052
分析:通过cluster info可以看到集群状态还是OK的状态,表示集群依然可用
127.0.0.1:7100> get zhuting
-> Redirected to slot [8894] located at 10.241.40.2:7200
Could not connect to Redis at 10.241.40.2:7200: Connection refused
Could not connect to Redis at 10.241.40.2:7200: Connection refused
再次获取键zhuting的值,已经不能正常获取到值了
[BONREE bonree@stresskafka01:/data/br/base/redis]$ redis-cli -p 7100 -a Bonree@365 -c
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
127.0.0.1:7100> set zhuting1 123
OK
127.0.0.1:7100> get zhuting1
"123"
可以正常创建新的key和读取不在挂掉那对主从所在槽位的key