使用info,cluster info, cluster nodes分析集群现状情况
场景一
集群状态正常情况
info
server服务器信息分析
# Serverredis_version:5.0.6 #Redis 服务器版本redis_git_sha1:00000000redis_git_dirty:0redis_build_id:490893054031c673redis_mode:clusteros:Linux 3.10.0-957.10.1.el7.x86_64 x86_64 #服务器的宿主操作系统arch_bits:64multiplexing_api:epollatomicvar_api:sync-builtingcc_version:4.4.7 #编译 Redis 时所使用的 GCC 版本process_id:31 #服务器进程的 PIDrun_id:f3ce089ce47f1aa63f72ce2c30f6ba2216f5bbactcp_port:7100 #监听端口uptime_in_seconds:179732 #自 Redis 服务器启动以来,经过的秒数uptime_in_days:2 #自 Redis 服务器启动以来,经过的天数hz:10configured_hz:10lru_clock:10364264executable:/data/br/base/redis/redis-serverconfig_file:/data/br/base/redis/redis7100.conf #配置文件目录
注意:可以通过uptime_in_seconds和uptime_in_days参数来判断redis节点最近重启的时间
clients客户端信息分析
# Clientsconnected_clients:2 #已连接客户端的数量(不包括通过从属服务器连接的客户端)client_recent_max_input_buffer:2client_recent_max_output_buffer:0blocked_clients:0 #正在等待阻塞命令(BLPOP、BRPOP、BRPOPLPUSH)的客户端的数量
memory内存信息分析
# Memoryused_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:6269550used_memory_startup:5104552used_memory_dataset:103722used_memory_dataset_perc:8.18%allocator_allocated:6654952allocator_active:7032832allocator_resident:14790656total_system_memory:8201052160 #系统总内存total_system_memory_human:7.64G #以可读格式返回系统总内存used_memory_lua:37888used_memory_lua_human:37.00Kused_memory_scripts:0used_memory_scripts_human:0Bnumber_of_cached_scripts:0maxmemory:4294967296maxmemory_human:4.00G #Redis实例的最大内存配置maxmemory_policy:allkeys-lru #内存淘汰策略allocator_frag_ratio:1.06allocator_frag_bytes:377880allocator_rss_ratio:2.10allocator_rss_bytes:7757824rss_overhead_ratio:1.56rss_overhead_bytes:8249344mem_fragmentation_ratio:3.66 #内存碎片率,等价于(used_memory_rss /used_memory)。由于Redis释放了内存块,但内存分配器并没有返回内存给操作系统mem_fragmentation_bytes:16749928mem_not_counted_for_evict:0mem_replication_backlog:1048576mem_clients_slaves:49694mem_clients_normal:66616mem_aof_buffer:0mem_allocator:jemalloc-5.1.0 #redis使用的内存分配器active_defrag_running:0lazyfree_pending_objects:0
注意:
在理想情况下, used_memory_rss 的值应该只比 used_memory 稍微高一点儿。当 rss > used ,且两者的值相差较大时,表示存在(内部或外部的)内存碎片。内存碎片的比率可以通过 mem_fragmentation_ratio 的值看出。当 used > rss 时,表示 Redis 的部分内存被操作系统换出到交换空间了,在这种情况下,操作可能会产生明显的延迟。当 Redis 释放内存时,分配器可能会,也可能不会,将内存返还给操作系统。
# 开启自动清除垃圾碎片功能activedefrag yes
persistence持久化信息分析
# Persistenceloading: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:-1rdb_last_cow_size:8839168aof_enabled:1 #是否开启了aofaof_rewrite_in_progress:0aof_rewrite_scheduled:0aof_last_rewrite_time_sec:1 #最近一次aof rewrite耗费的时长aof_current_rewrite_time_sec:-1aof_last_bgrewrite_status:okaof_last_write_status:okaof_last_cow_size:46456832aof_current_size:16662731aof_base_size:16662731aof_pending_rewrite:0aof_buffer_length:0aof_rewrite_buffer_length:0aof_pending_bio_fsync:0aof_delayed_fsync:0
stats状态信息分析
# Statstotal_connections_received:1863 #连接过的客户端总数total_commands_processed:1625256 #处理过的命令总数instantaneous_ops_per_sec:0 #每秒处理的命令数total_net_input_bytes:5994973921total_net_output_bytes:5994921934instantaneous_input_kbps:0.03instantaneous_output_kbps:0.01rejected_connections:0 #由于 maxclients 限制而拒绝的连接数量sync_full:1sync_partial_ok:0sync_partial_err:1expired_keys:0 #key 过期事件的总数expired_stale_perc:0.00expired_time_cap_reached_count:0evicted_keys:0 #由于 maxmemory 限制,而被回收内存的 key 的总数keyspace_hits:1keyspace_misses:0pubsub_channels:0pubsub_patterns:0latest_fork_usec:4114migrate_cached_sockets:0slave_expires_tracked_keys:0active_defrag_hits:0active_defrag_misses:0active_defrag_key_hits:0active_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复制信息分析
# Replicationrole:master #实例的角色,是master or slaveconnected_slaves:1 #连接的slave实例个数slave0:ip=10.241.90.22,port=7200,state=online,offset=5987607162,lag=0master_replid:94ff75556908ad4786afaddeced3d328f3100911master_replid2:0000000000000000000000000000000000000000master_repl_offset:5987607162 #主从同步偏移量,此值如果和上面的offset相同说明主从一致没延迟,与master_replid可被用来标识主实例复制流中的位置。second_repl_offset:-1repl_backlog_active:1repl_backlog_size:1048576repl_backlog_first_byte_offset:5986558587repl_backlog_histlen:1048576
其他模块分析
# CPUused_cpu_sys:436.733866used_cpu_user:323.262940used_cpu_sys_children:13.425409used_cpu_user_children:2.855241# Clustercluster_enabled:1 #集群功能是否已经开启# Keyspacedb0:keys=2,expires=0,avg_ttl=0 #数据库相关的统计信息
cluster nodes
127.0.0.1:7100> cluster nodescc5f16e884261f91d198bc7d88fb5a6065248d8a 10.241.90.22:7200@17200 slave c470ec92c72267b60a3b362845b6f6f54c7b190b 0 1642416719551 4 connected260205918b2c1cbb26e3dbf68c9ae6062a89f999 10.241.90.2:7200@17200 slave 3b6d2678635dae7c186e8a1f2870510ff8ec936a 0 1642416718545 5 connected3b6d2678635dae7c186e8a1f2870510ff8ec936a 10.241.40.2:7100@17100 master - 0 1642416718000 5 connected 10923-163831dd4d6d5bedb748093c0af5d44dc9da276a3965e 10.241.40.2:7200@17200 slave 90841afd83baeac3447265ed591ff3f14a90fbeb 0 1642416717542 6 connected90841afd83baeac3447265ed591ff3f14a90fbeb 10.241.90.22:7100@17100 master - 0 1642416716538 3 connected 5461-10922c470ec92c72267b60a3b362845b6f6f54c7b190b 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 infocluster_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被设置为nocluster_known_nodes:6 #集群中节点数量,包括处于握手状态还没有成为集群正式成员的节点cluster_size:3 #至少包含一个哈希槽且能够提供服务的master节点数量cluster_current_epoch:6 #集群本地Current Epoch变量的值cluster_my_epoch:1 #当前正在使用的节点的Config Epoch值cluster_stats_messages_ping_sent:340cluster_stats_messages_pong_sent:359cluster_stats_messages_sent:699 #通过node-to-node二进制总线发送的消息数量.cluster_stats_messages_ping_received:354cluster_stats_messages_pong_received:340cluster_stats_messages_meet_received:5cluster_stats_messages_received:699 #通过node-to-node二进制总线接收的消息数量.
场景二
停掉一个从节点情况下,集群状态分析
cluster nodes
127.0.0.1:7100> cluster nodescc5f16e884261f91d198bc7d88fb5a6065248d8a 10.241.90.22:7200@17200 slave c470ec92c72267b60a3b362845b6f6f54c7b190b 1642417697044 1642417695000 4 disconnected260205918b2c1cbb26e3dbf68c9ae6062a89f999 10.241.90.2:7200@17200 slave 3b6d2678635dae7c186e8a1f2870510ff8ec936a 0 1642417723537 5 connected3b6d2678635dae7c186e8a1f2870510ff8ec936a 10.241.40.2:7100@17100 master - 0 1642417722530 5 connected 10923-163831dd4d6d5bedb748093c0af5d44dc9da276a3965e 10.241.40.2:7200@17200 slave 90841afd83baeac3447265ed591ff3f14a90fbeb 0 1642417719510 6 connected90841afd83baeac3447265ed591ff3f14a90fbeb 10.241.90.22:7100@17100 master - 0 1642417721522 3 connected 5461-10922c470ec92c72267b60a3b362845b6f6f54c7b190b 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 infocluster_state:okcluster_slots_assigned:16384cluster_slots_ok:16384cluster_slots_pfail:0cluster_slots_fail:0cluster_known_nodes:6cluster_size:3cluster_current_epoch:6cluster_my_epoch:1cluster_stats_messages_ping_sent:2409cluster_stats_messages_pong_sent:1179cluster_stats_messages_sent:3588cluster_stats_messages_ping_received:1174cluster_stats_messages_pong_received:1138cluster_stats_messages_meet_received:5cluster_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 disconnected3b6d2678635dae7c186e8a1f2870510ff8ec936a 10.241.40.2:7100@17100 master - 0 1642418738735 5 connected 10923-16383260205918b2c1cbb26e3dbf68c9ae6062a89f999 10.241.90.2:7200@17200 slave 3b6d2678635dae7c186e8a1f2870510ff8ec936a 0 1642418738000 5 connected1dd4d6d5bedb748093c0af5d44dc9da276a3965e 10.241.40.2:7200@17200 myself,master - 0 1642418735000 7 connected 5461-10922cc5f16e884261f91d198bc7d88fb5a6065248d8a 10.241.90.22:7200@17200 slave c470ec92c72267b60a3b362845b6f6f54c7b190b 0 1642418737000 4 connectedc470ec92c72267b60a3b362845b6f6f54c7b190b 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 infocluster_state:okcluster_slots_assigned:16384cluster_slots_ok:16384cluster_slots_pfail:0cluster_slots_fail:0cluster_known_nodes:6cluster_size:3cluster_current_epoch:6cluster_my_epoch:1cluster_stats_messages_ping_sent:7894cluster_stats_messages_pong_sent:1841cluster_stats_messages_sent:9735cluster_stats_messages_ping_received:1836cluster_stats_messages_pong_received:1817cluster_stats_messages_meet_received:5cluster_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 nodescc5f16e884261f91d198bc7d88fb5a6065248d8a 10.241.90.22:7200@17200 slave c470ec92c72267b60a3b362845b6f6f54c7b190b 0 1642420651000 4 connected260205918b2c1cbb26e3dbf68c9ae6062a89f999 10.241.90.2:7200@17200 slave 3b6d2678635dae7c186e8a1f2870510ff8ec936a 0 1642420652984 5 connected3b6d2678635dae7c186e8a1f2870510ff8ec936a 10.241.40.2:7100@17100 master - 0 1642420653994 5 connected 10923-163831dd4d6d5bedb748093c0af5d44dc9da276a3965e 10.241.40.2:7200@17200 master - 1642420560981 1642420556970 7 disconnected 5461-1092290841afd83baeac3447265ed591ff3f14a90fbeb 10.241.90.22:7100@17100 master,fail - 1642418431382 1642418429076 3 disconnectedc470ec92c72267b60a3b362845b6f6f54c7b190b 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 infocluster_state:okcluster_slots_assigned:16384cluster_slots_ok:16384cluster_slots_pfail:0cluster_slots_fail:0cluster_known_nodes:6cluster_size:3cluster_current_epoch:7cluster_my_epoch:1cluster_stats_messages_ping_sent:34572cluster_stats_messages_pong_sent:4023cluster_stats_messages_fail_sent:4cluster_stats_messages_auth-ack_sent:1cluster_stats_messages_sent:38600cluster_stats_messages_ping_received:4018cluster_stats_messages_pong_received:4027cluster_stats_messages_meet_received:5cluster_stats_messages_fail_received:1cluster_stats_messages_auth-req_received:1cluster_stats_messages_received:8052
分析:通过cluster info可以看到集群状态还是OK的状态,表示集群依然可用
127.0.0.1:7100> get zhuting-> Redirected to slot [8894] located at 10.241.40.2:7200Could not connect to Redis at 10.241.40.2:7200: Connection refusedCould 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 -cWarning: Using a password with '-a' or '-u' option on the command line interface may not be safe.127.0.0.1:7100> set zhuting1 123OK127.0.0.1:7100> get zhuting1"123"
可以正常创建新的key和读取不在挂掉那对主从所在槽位的key
