当前位置: 首页 > news >正文

ETCD 压力测试脚本

#!/bin/bash

# etcd 集群手动性能压测

# 用途:使用基本的 put/get 命令进行性能测试

set -e

ENDPOINTS=""

ETCD_USER=""

ETCD_PASSWORD=""

# 颜色输出

RED='\033[0;31m'

GREEN='\033[0;32m'

YELLOW='\033[1;33m'

BLUE='\033[0;34m'

CYAN='\033[0;36m'

NC='\033[0m'

echo -e "${BLUE}╔════════════════════════════════════════╗${NC}"

echo -e "${BLUE}║ etcd 集群性能压测(手动模式) ║${NC}"

echo -e "${BLUE}╚════════════════════════════════════════╝${NC}"

echo ""

# 检测是否启用了认证

echo -e "${CYAN}检查是否启用认证...${NC}"

if docker exec etcd1 etcdctl --endpoints=${ENDPOINTS} get /test 2>&1 | grep -q "user name is empty"; then

echo -e "${YELLOW}检测到已启用认证${NC}"

AUTH_PARAMS="--user=${ETCD_USER}:${ETCD_PASSWORD}"

else

echo -e "${YELLOW}未启用认证${NC}"

AUTH_PARAMS=""

fi

echo ""

# 测试 1: 写入性能测试

echo -e "${GREEN}═══════════════════════════════════════${NC}"

echo -e "${GREEN}测试 1: 写入性能测试${NC}"

echo -e "${GREEN}═══════════════════════════════════════${NC}"

echo -e "${CYAN}写入 1000 个 key-value 对...${NC}"

START_TIME=$(date +%s.%N)

for i in {1..1000}; do

docker exec etcd1 etcdctl put \

--endpoints=${ENDPOINTS} \

${AUTH_PARAMS} \

/benchmark/test/key${i} "value${i}" > /dev/null 2>&1

# 每 100 个显示一次进度

if [ $((i % 100)) -eq 0 ]; then

echo -ne "\r${YELLOW}进度: ${i}/1000${NC}"

fi

done

END_TIME=$(date +%s.%N)

DURATION=$(echo "$END_TIME - $START_TIME" | bc)

QPS=$(echo "scale=2; 1000 / $DURATION" | bc)

echo -ne "\r"

echo -e "${GREEN}✓ 写入完成${NC}"

echo -e " 总耗时: ${DURATION} 秒"

echo -e " QPS: ${QPS} 次/秒"

echo ""

sleep 1

# 测试 2: 单点读性能测试

echo -e "${GREEN}═══════════════════════════════════════${NC}"

echo -e "${GREEN}测试 2: 单点读性能测试${NC}"

echo -e "${GREEN}═══════════════════════════════════════${NC}"

echo -e "${CYAN}读取 1000 次...${NC}"

START_TIME=$(date +%s.%N)

for i in {1..1000}; do

docker exec etcd1 etcdctl get \

--endpoints=${ENDPOINTS} \

${AUTH_PARAMS} \

/benchmark/test/key${i} > /dev/null 2>&1

if [ $((i % 100)) -eq 0 ]; then

echo -ne "\r${YELLOW}进度: ${i}/1000${NC}"

fi

done

END_TIME=$(date +%s.%N)

DURATION=$(echo "$END_TIME - $START_TIME" | bc)

QPS=$(echo "scale=2; 1000 / $DURATION" | bc)

echo -ne "\r"

echo -e "${GREEN}✓ 读取完成${NC}"

echo -e " 总耗时: ${DURATION} 秒"

echo -e " QPS: ${QPS} 次/秒"

echo ""

sleep 1

# 测试 3: 范围查询性能

echo -e "${GREEN}═══════════════════════════════════════${NC}"

echo -e "${GREEN}测试 3: 范围查询性能测试${NC}"

echo -e "${GREEN}═══════════════════════════════════════${NC}"

echo -e "${CYAN}执行 100 次前缀查询...${NC}"

START_TIME=$(date +%s.%N)

for i in {1..100}; do

docker exec etcd1 etcdctl get \

--endpoints=${ENDPOINTS} \

${AUTH_PARAMS} \

--prefix \

/benchmark/test/ > /dev/null 2>&1

if [ $((i % 10)) -eq 0 ]; then

echo -ne "\r${YELLOW}进度: ${i}/100${NC}"

fi

done

END_TIME=$(date +%s.%N)

DURATION=$(echo "$END_TIME - $START_TIME" | bc)

QPS=$(echo "scale=2; 100 / $DURATION" | bc)

echo -ne "\r"

echo -e "${GREEN}✓ 范围查询完成${NC}"

echo -e " 总耗时: ${DURATION} 秒"

echo -e " QPS: ${QPS} 次/秒"

echo ""

sleep 1

# 测试 4: 删除性能

echo -e "${GREEN}═══════════════════════════════════════${NC}"

echo -e "${GREEN}测试 4: 删除性能测试${NC}"

echo -e "${GREEN}═══════════════════════════════════════${NC}"

echo -e "${CYAN}删除 1000 个 key...${NC}"

START_TIME=$(date +%s.%N)

for i in {1..1000}; do

docker exec etcd1 etcdctl del \

--endpoints=${ENDPOINTS} \

${AUTH_PARAMS} \

/benchmark/test/key${i} > /dev/null 2>&1

if [ $((i % 100)) -eq 0 ]; then

echo -ne "\r${YELLOW}进度: ${i}/1000${NC}"

fi

done

END_TIME=$(date +%s.%N)

DURATION=$(echo "$END_TIME - $START_TIME" | bc)

QPS=$(echo "scale=2; 1000 / $DURATION" | bc)

echo -ne "\r"

echo -e "${GREEN}✓ 删除完成${NC}"

echo -e " 总耗时: ${DURATION} 秒"

echo -e " QPS: ${QPS} 次/秒"

echo ""

# 显示集群状态

echo -e "${GREEN}═══════════════════════════════════════${NC}"

echo -e "${GREEN}测试完成 - 集群状态${NC}"

echo -e "${GREEN}═══════════════════════════════════════${NC}"

echo ""

echo -e "${CYAN}集群健康:${NC}"

docker exec etcd1 etcdctl --endpoints=${ENDPOINTS} ${AUTH_PARAMS} endpoint health

echo ""

echo -e "${CYAN}集群状态:${NC}"

docker exec etcd1 etcdctl --endpoints=${ENDPOINTS} ${AUTH_PARAMS} endpoint status -w table

echo ""

echo -e "${CYAN}数据库大小:${NC}"

docker exec etcd1 etcdctl --endpoints=${ENDPOINTS} ${AUTH_PARAMS} endpoint status --write-out=json | \

jq -r '.[] | "\(.Endpoint): \(.Status.dbSize / 1024 / 1024 | floor)MB"' 2>/dev/null || \

docker exec etcd1 etcdctl --endpoints=${ENDPOINTS} ${AUTH_PARAMS} endpoint status

echo ""

echo -e "${GREEN}════════════════════════════════════════${NC}"

echo -e "${GREEN}所有测试完成!${NC}"

echo -e "${GREEN}════════════════════════════════════════${NC}"


http://www.dtcms.com/a/577137.html

相关文章:

  • kali的下载和安装【ISO安装】
  • 从标签到数据流:BarTender让“可追溯”更简单
  • 零基础学AI大模型之Embedding与LLM大模型对比全解析
  • 7.游戏逆向-pxxx-TUObjectArray分析
  • web214-web220
  • 通州北苑网站建设程序开发的基本步骤是什么?
  • 专题:2025中国制造业出海与出海品牌社媒影响力洞察报告|附300+份报告PDF、数据、绘图模板汇总下载
  • 【 C/C++ 算法】入门动态规划 ----- 简单多状态 dp 问题》打家劫舍 和 股票买卖问题
  • (114页PPT)华为FusionCloud私有云最佳实践RegionTypeII(附下载方式)
  • 赤壁专业建站公司学做卤味视频网站
  • 3d光学轮廓仪如何局部测量标准台阶?
  • 【数据集+完整源码】水稻病害数据集,yolov8水稻病害检测数据集 6715 张,目标检测水稻识别算法实战训推教程
  • 3D Gaussian Splatting:渲染流程
  • 云原生LVS+Keepalived高可用方案(二)
  • IBM VO 面试经验分享|一场更像“聊天”的正式考核
  • 用单位的服务器做网站关键词优化网站
  • C语言基础开发入门系列(八)C语言指针的理解与实战
  • 如何绑定网站域名解析电商网站模板html
  • 【机器视觉通用检测框架】基于VS2019 C#+VisionPro9.0开发的视觉框架软件,全套源码,开箱即用
  • 智慧交通管理新范式 基于深度学习的城市交通车型识别AI监控系统 车型识别 停车场车型分类系统 高速路车型识别算法
  • pnpm 安装依赖后 仍然启动报的问题
  • 【河北政务服务网-注册_登录安全分析报告】
  • 深入理解 package.json:前端项目的 “身份证“
  • 【辽宁政务服务网-注册_登录安全分析报告】
  • 免费正能量励志网站建设网站要多久到账
  • 新乡市红旗区建设局网站网页制作素材网有哪些
  • 用车申请车辆管理小程序开发
  • 单片机.RS485
  • 从单模型到多域自由转换:StarGAN的公式与多域图像生成魔法
  • 人工智能在全球多领域的应用潜力及当前技术面临的挑战