集群压测的前提
测集群要用支持集群路由的压测工具,键分布要覆盖多个槽与多个节点,同时注意 MOVED 重定向带来的额外开销,以及各节点的负载是否均匀。用单机压测工具直打一个节点,测的是那个节点的能力,不是集群的能力。
基本信息
| 工具要求 | 支持集群路由的压测客户端 |
|---|---|
| 键分布 | 覆盖多个槽与多个节点 |
| 观察重点 | 重定向次数与节点间差异 |
| 报告要求 | 给出每个节点的数据 |
典型使用场景
- 集群扩容前的容量验证
- 对比单节点与集群整体的吞吐差异
- 验证键设计是否导致数据倾斜
- 评估 MOVED 重定向对客户端延迟的影响
- 槽迁移期间的性能表现观察
集群压测命令
集群压测命令
memtier_benchmark --cluster-mode -s 127.0.0.1 -p 7000 --ratio=1:9 --clients=40 -n 100000
# 键空间要足够大,覆盖多个槽,避免全部落在同一节点
redis-cli --cluster check 127.0.0.1:7000 # 压测前先确认槽位分布
redis-cli -h node1 -p 7000 INFO stats | grep -E 'instantaneous_ops_per_sec'
redis-cli -h node2 -p 7000 INFO stats | grep -E 'instantaneous_ops_per_sec'
redis-cli -h node1 -p 7000 INFO memory | grep -E 'used_memory_human'观察项与异常表现
| 观察项 | 含义 | 异常表现 |
|---|---|---|
| 每节点吞吐 | 各节点实际处理速率 | 差异大说明数据倾斜 |
| MOVED 与 ASK 次数 | 重定向发生频率 | 偏高说明客户端路由有问题 |
| 集群错误率 | CLUSTERDOWN 或 TRYAGAIN 出现次数 | 非零说明集群状态异常 |
| 键分布 | 键落在多少个槽上 | 键集过小会压出假热点 |
| 节点内存 | 各节点的内存水位 | 倾斜会先打满个别节点 |
| 连接分布 | 连接是否均衡落在各节点 | 集中连一个节点会误判 |
键集太小时,所有键可能落在少数几个槽上,压出来的热点是人为制造的,与真实业务的数据分布无关,结论自然也就不成立。
用单机压测工具直打集群中的一个节点,得到的只是该节点的能力,不能代表集群整体,更不能用来做集群容量规划。
压测期间要同步采集各节点的服务端指标。只拿客户端侧的总吞吐,无法区分是服务端到极限还是客户端路由在拖后腿。