health-check.sh 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. #!/bin/bash
  2. # 健康检查脚本
  3. # 用途:检查所有服务的健康状态
  4. set -e
  5. REDIS_PASSWORD="Hzdyjs@123456"
  6. MYSQL_PASSWORD="Hzdyjs@Root@123456"
  7. echo "=========================================="
  8. echo "系统健康检查"
  9. echo "时间: $(date '+%Y-%m-%d %H:%M:%S')"
  10. echo "=========================================="
  11. # 1. 检查系统资源
  12. echo "[1/8] 检查系统资源..."
  13. echo "CPU使用率: $(top -bn1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk '{print 100 - $1}')%"
  14. echo "内存使用: $(free -h | awk '/^Mem:/ {print $3 "/" $2}')"
  15. echo "磁盘使用: $(df -h / | awk 'NR==2 {print $3 "/" $2 " (" $5 ")"}')"
  16. # 2. 检查MySQL主从状态
  17. echo ""
  18. echo "[2/8] 检查MySQL主从状态..."
  19. if systemctl is-active --quiet mysqld; then
  20. echo "✓ MySQL服务运行中"
  21. mysql -u root -p"$MYSQL_PASSWORD" -e "SHOW SLAVE STATUS\G" 2>/dev/null | grep -E "Slave_IO_Running|Slave_SQL_Running" || echo " (主库模式)"
  22. else
  23. echo "✗ MySQL服务未运行"
  24. fi
  25. # 3. 检查Redis主从状态
  26. echo ""
  27. echo "[3/8] 检查Redis主从状态..."
  28. if systemctl is-active --quiet redis; then
  29. echo "✓ Redis服务运行中"
  30. redis-cli -a "$REDIS_PASSWORD" INFO replication 2>/dev/null | grep -E "role|master_host|master_link_status" || echo " (无法连接)"
  31. else
  32. echo "✗ Redis服务未运行"
  33. fi
  34. # 4. 检查后端服务
  35. echo ""
  36. echo "[4/8] 检查后端服务..."
  37. BACKEND_PORTS=(8080 8081)
  38. for port in "${BACKEND_PORTS[@]}"; do
  39. if curl -sf http://127.0.0.1:$port/health > /dev/null 2>&1; then
  40. echo "✓ 后端服务 $port 健康"
  41. else
  42. echo "✗ 后端服务 $port 异常"
  43. fi
  44. done
  45. # 5. 检查Nginx
  46. echo ""
  47. echo "[5/8] 检查Nginx..."
  48. if systemctl is-active --quiet nginx; then
  49. echo "✓ Nginx服务运行中"
  50. if curl -sf http://127.0.0.1/health > /dev/null 2>&1; then
  51. echo "✓ Nginx健康检查通过"
  52. else
  53. echo "✗ Nginx健康检查失败"
  54. fi
  55. else
  56. echo "✗ Nginx服务未运行"
  57. fi
  58. # 6. 检查MinIO
  59. echo ""
  60. echo "[6/8] 检查MinIO..."
  61. if docker ps | grep -q minio; then
  62. echo "✓ MinIO容器运行中"
  63. if curl -sf http://127.0.0.1:9000/minio/health/live > /dev/null 2>&1; then
  64. echo "✓ MinIO健康检查通过"
  65. else
  66. echo "✗ MinIO健康检查失败"
  67. fi
  68. else
  69. echo "✗ MinIO容器未运行"
  70. fi
  71. # 7. 检查网络连通性
  72. echo ""
  73. echo "[7/8] 检查网络连通性..."
  74. PEER_IP="172.16.0.67"
  75. if [ "$(hostname -I | awk '{print $1}')" = "$PEER_IP" ]; then
  76. PEER_IP="172.16.0.68"
  77. fi
  78. if ping -c 1 -W 2 "$PEER_IP" > /dev/null 2>&1; then
  79. echo "✓ 对端机器 $PEER_IP 网络连通"
  80. else
  81. echo "✗ 对端机器 $PEER_IP 网络不通"
  82. fi
  83. # 8. 检查磁盘空间
  84. echo ""
  85. echo "[8/8] 检查磁盘空间..."
  86. DISK_USAGE=$(df -h / | awk 'NR==2 {print $5}' | sed 's/%//')
  87. if [ "$DISK_USAGE" -lt 80 ]; then
  88. echo "✓ 磁盘使用率: ${DISK_USAGE}% (正常)"
  89. elif [ "$DISK_USAGE" -lt 90 ]; then
  90. echo "⚠ 磁盘使用率: ${DISK_USAGE}% (警告)"
  91. else
  92. echo "✗ 磁盘使用率: ${DISK_USAGE}% (危险)"
  93. fi
  94. echo ""
  95. echo "=========================================="
  96. echo "健康检查完成"
  97. echo "=========================================="