如何使用redis-benchmark工具填充Redis集群内存以测试自动扩缩容
针对AWS ElastiCache集群模式Redis填充6GB内存的实操方案
绝大多数redis-benchmark操作集群失败都是因为没有开启集群支持参数,或是键生成规则不合理、单条数据尺寸设置过小导致总写入量达不到目标,可按照以下步骤操作:
一、redis-benchmark 正确执行命令
直接使用以下适配集群模式的写入命令,可精准控制总写入量到6GB左右:
redis-benchmark -h <ElastiCache集群配置端点> -p 6379 --cluster -t set -d 1024 -r 10000000 -n 6291456 -c 32 --threads 4
参数说明:
--cluster:开启集群模式支持,自动处理MOVED重定向-t set:仅执行SET写入操作,不执行其他测试命令-d 1024:每个写入的值大小为1KB-r 10000000:从1000万个随机键中选择写入,避免重复覆盖同一键导致内存不上涨-n 6291456:总写入请求数,按单条键值对约1KB计算总写入量约为6GB,你可以根据实际键的大小微调该值-c 32:并发32个客户端连接,提升写入速度--threads 4:启用4线程执行,适配多数客户端机器配置
如果你的集群开启了TLS加密或者身份验证,需要在命令中补充--tls、-a <访问密码>对应参数。
二、备选写入方案
如果redis-benchmark不符合你的使用习惯,可以使用shell脚本批量写入随机键值对:
# 循环写入600万条1KB左右的随机键值对,总占用约6GB for i in {1..6000000}; do redis-cli -h <ElastiCache集群配置端点> -p 6379 -c SET "test_key_${RANDOM}_${i}" "$(head -c 1024 /dev/urandom | base64)" done
三、ElastiCache专属注意事项
- 必须使用集群模式的连接参数(redis-cli加
-c,redis-benchmark加--cluster),否则只会写入单个分片,无法利用整个集群的存储空间,还可能触发MOVED错误 - 写入前先确认集群的
maxmemory-policy配置,如果是allkeys-lru之类的淘汰策略,写入量超过阈值后会自动淘汰旧键,导致内存上不去,需要临时调整为noeviction,测试完成后改回原有配置 - 写入过程中可以通过CloudWatch的
FreeableMemory指标或者在节点上执行info memory命令实时查看内存使用率,调整写入量到目标阈值
内容的提问来源于stack exchange,提问作者Cythrex
相关产品推荐
相关产品推荐

