关于Redis集群info memory、集群监控及RedisInsight-v2自动化的问询
Elasticache Redis集群内存监控相关问题解答
集群配置与背景
我的Elasticache集群配置如下:
Node type: cache.r5.xlarge Shards: 15 Number of nodes: 30 reserved-memory-percent: 25
cache.r5.xlarge型号节点内存为26.32 GiB,计算可得集群总内存应为 26.32 * 30 * 0.75 = 592.2 GiB。
在RedisInsight-v2中执行info memory命令,得到结果maxmemory_human:19.74G,经计算19.74 * 30 = 592.2 GiB。
问题解答
1. info memory是否仅返回单个节点的状态?
是的,info memory命令仅返回当前连接节点的内存状态。你看到的maxmemory_human:19.74G就是单节点的可用最大内存(26.32GiB * 0.75 ≈19.74GiB),乘以30个节点后与集群总内存计算值一致,也验证了这一点。
2. 如何获取所有节点的内存状态以监控集群整体使用情况?
有三种常用方式:
- ElastiCache控制台:在集群详情页可查看每个节点的实时内存数据,或切换到「监控」面板,查看聚合后的内存指标(如
FreeableMemory、DatabaseMemoryUsagePercentage),直接了解集群整体内存趋势。 - Redis CLI遍历节点:先通过
redis-cli --cluster check <集群端点>:<端口>获取所有节点的IP和端口,再逐个连接每个节点执行info memory,提取used_memory_human和maxmemory_human数据,手动或脚本汇总。 - CloudWatch指标:ElastiCache会自动将节点内存指标上报到CloudWatch,可查询
CacheNodes维度下的UsedMemory和MaxMemory指标,通过聚合函数(如Sum)计算集群总已用和总最大内存,还能设置告警规则。
3. 如何以命令行方式实现内存使用对比的自动化?
RedisInsight-v2没有原生的命令行批量处理功能,推荐用以下方案实现自动化:
方案一:Redis CLI + 脚本(Bash/Python)
编写脚本遍历所有节点,批量执行info memory并汇总计算,这里提供Bash脚本示例:
# 替换为你的集群端点和端口 CLUSTER_ENDPOINT="your-cluster-endpoint" CLUSTER_PORT=6379 # 获取所有节点列表(格式:ip:port) NODES=$(redis-cli --cluster check ${CLUSTER_ENDPOINT}:${CLUSTER_PORT} | grep "node" | awk '{print $2}') TOTAL_USED=0 TOTAL_MAX=0 # 遍历每个节点收集内存数据 for NODE in $NODES; do NODE_IP=${NODE%%:*} NODE_PORT=${NODE##*:} # 获取数值型内存数据(避免字符串单位处理问题) USED=$(redis-cli -h $NODE_IP -p $NODE_PORT info memory | grep ^used_memory: | awk -F: '{print $2}') MAX=$(redis-cli -h $NODE_IP -p $NODE_PORT info memory | grep ^maxmemory: | awk -F: '{print $2}') TOTAL_USED=$((TOTAL_USED + USED)) TOTAL_MAX=$((TOTAL_MAX + MAX)) done # 转换为GiB并计算使用率 TOTAL_USED_GB=$(echo "scale=2; $TOTAL_USED / 1024 / 1024 / 1024" | bc) TOTAL_MAX_GB=$(echo "scale=2; $TOTAL_MAX / 1024 / 1024 / 1024" | bc) USAGE_PERCENT=$(echo "scale=2; ($TOTAL_USED / $TOTAL_MAX) * 100" | bc) # 输出结果 echo "=== 集群内存使用统计 ===" echo "总已用内存: ${TOTAL_USED_GB} GiB" echo "总最大内存: ${TOTAL_MAX_GB} GiB" echo "内存使用率: ${USAGE_PERCENT}%"
将脚本保存为redis_cluster_memory.sh,赋予执行权限后即可定期运行(比如通过Cron)。
方案二:RedisInsight REST API(可选)
若需基于RedisInsight实现,可启用其内置REST API(在设置中开启),通过API接口获取所有节点的内存数据,再在脚本中解析返回结果并计算。这种步骤相对繁琐,不如Redis CLI方案直接高效。
内容的提问来源于stack exchange,提问作者ca9163d9
相关产品推荐
相关产品推荐

