You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 05:55:23