Files
hzdyjs/docs/部署文档/生产环境双机部署方案/部署脚本/verify-minio-cluster.sh
T
2025-11-27 00:02:01 +08:00

141 lines
4.5 KiB
Bash
Executable File

#!/bin/bash
# MinIO集群验证脚本
# 版本: 1.0
# 描述: 验证MinIO集群状态和功能
# 使用方法: ./verify-minio-cluster.sh
# 配置参数
NODE67_IP="172.16.0.67"
NODE68_IP="172.16.0.68"
MINIO_USER="minioadmin"
MINIO_PASSWORD="minioadmin@123456"
# 颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
echo -e "${GREEN}========================================${NC}"
echo -e "${GREEN}MinIO集群验证脚本${NC}"
echo -e "${GREEN}========================================${NC}"
echo ""
# 检查mc命令
if ! command -v mc &> /dev/null; then
echo -e "${YELLOW}MinIO客户端(mc)未安装,正在安装...${NC}"
wget -q https://dl.min.io/client/mc/release/linux-amd64/mc -O /tmp/mc
chmod +x /tmp/mc
sudo mv /tmp/mc /usr/local/bin/mc || mv /tmp/mc ~/mc
if [ -f ~/mc ]; then
export PATH=$PATH:~
echo -e "${GREEN}✓ mc已安装到 ~/mc${NC}"
else
echo -e "${GREEN}✓ mc已安装${NC}"
fi
fi
# 配置集群别名
echo -e "${YELLOW}[1/5] 配置集群别名...${NC}"
mc alias set minio-cluster http://${NODE67_IP}:9000 ${MINIO_USER} ${MINIO_PASSWORD} 2>/dev/null
if [ $? -eq 0 ]; then
echo -e "${GREEN}✓ 集群别名配置成功${NC}"
else
echo -e "${RED}✗ 集群别名配置失败${NC}"
exit 1
fi
echo ""
# 检查集群节点状态
echo -e "${YELLOW}[2/5] 检查集群节点状态...${NC}"
mc admin info minio-cluster 2>/dev/null
if [ $? -eq 0 ]; then
echo -e "${GREEN}✓ 集群节点状态正常${NC}"
else
echo -e "${RED}✗ 无法获取集群节点状态${NC}"
exit 1
fi
echo ""
# 检查集群健康状态
echo -e "${YELLOW}[3/5] 检查集群健康状态...${NC}"
HEAL_OUTPUT=$(mc admin heal minio-cluster --dry-run 2>&1)
if echo "$HEAL_OUTPUT" | grep -q "No healing needed"; then
echo -e "${GREEN}✓ 集群健康状态良好${NC}"
elif echo "$HEAL_OUTPUT" | grep -q "Objects to heal"; then
echo -e "${YELLOW}⚠ 发现需要修复的对象,执行修复...${NC}"
mc admin heal minio-cluster
echo -e "${GREEN}✓ 修复完成${NC}"
else
echo -e "${RED}✗ 无法检查集群健康状态${NC}"
echo "$HEAL_OUTPUT"
fi
echo ""
# 测试存储桶操作
echo -e "${YELLOW}[4/5] 测试存储桶操作...${NC}"
TEST_BUCKET="cluster-test-$(date +%s)"
mc mb minio-cluster/${TEST_BUCKET} 2>/dev/null
if [ $? -eq 0 ]; then
echo -e "${GREEN}✓ 存储桶创建成功: ${TEST_BUCKET}${NC}"
# 测试文件上传
echo "test cluster $(date)" > /tmp/test-cluster.txt
mc cp /tmp/test-cluster.txt minio-cluster/${TEST_BUCKET}/ 2>/dev/null
if [ $? -eq 0 ]; then
echo -e "${GREEN}✓ 文件上传成功${NC}"
# 测试文件下载
mc cp minio-cluster/${TEST_BUCKET}/test-cluster.txt /tmp/test-cluster-download.txt 2>/dev/null
if [ $? -eq 0 ]; then
echo -e "${GREEN}✓ 文件下载成功${NC}"
# 验证文件内容
if diff -q /tmp/test-cluster.txt /tmp/test-cluster-download.txt > /dev/null; then
echo -e "${GREEN}✓ 文件内容验证通过${NC}"
else
echo -e "${RED}✗ 文件内容不一致${NC}"
fi
else
echo -e "${RED}✗ 文件下载失败${NC}"
fi
# 清理测试文件
rm -f /tmp/test-cluster.txt /tmp/test-cluster-download.txt
mc rb --force minio-cluster/${TEST_BUCKET} 2>/dev/null
echo -e "${GREEN}✓ 测试存储桶已清理${NC}"
else
echo -e "${RED}✗ 文件上传失败${NC}"
fi
else
echo -e "${RED}✗ 存储桶创建失败${NC}"
fi
echo ""
# 检查节点连通性
echo -e "${YELLOW}[5/5] 检查节点连通性...${NC}"
if curl -s -o /dev/null -w "%{http_code}" http://${NODE67_IP}:9000/minio/health/live | grep -q "200"; then
echo -e "${GREEN}✓ 67机器节点健康检查通过${NC}"
else
echo -e "${RED}✗ 67机器节点健康检查失败${NC}"
fi
if curl -s -o /dev/null -w "%{http_code}" http://${NODE68_IP}:9000/minio/health/live | grep -q "200"; then
echo -e "${GREEN}✓ 68机器节点健康检查通过${NC}"
else
echo -e "${RED}✗ 68机器节点健康检查失败${NC}"
fi
echo ""
echo -e "${GREEN}========================================${NC}"
echo -e "${GREEN}MinIO集群验证完成!${NC}"
echo -e "${GREEN}========================================${NC}"
echo ""
echo "集群访问信息:"
echo " 67机器控制台: http://${NODE67_IP}:9001"
echo " 68机器控制台: http://${NODE68_IP}:9001"
echo " 集群API端点: http://${NODE67_IP}:9000 或 http://${NODE68_IP}:9000"
echo ""