#!/bin/bash # Consul集群部署脚本 - 遵循最佳变量命名规范 # 此脚本将部署一个完全遵循 config/{environment}/{provider}/{region_or_service}/{key} 格式的Consul集群 set -e # 配置参数 CONSUL_ADDR="${CONSUL_ADDR:-localhost:8500}" ENVIRONMENT="${ENVIRONMENT:-dev}" NOMAD_ADDR="${NOMAD_ADDR:-localhost:4646}" CONSUL_CONFIG_DIR="${CONSUL_CONFIG_DIR:-/root/mgmt/components/consul/configs}" CONSUL_JOBS_DIR="${CONSUL_JOBS_DIR:-/root/mgmt/components/consul/jobs}" echo "开始部署遵循最佳变量命名规范的Consul集群..." echo "Consul地址: $CONSUL_ADDR" echo "Nomad地址: $NOMAD_ADDR" echo "环境: $ENVIRONMENT" # 检查Consul连接 echo "检查Consul连接..." if ! curl -s "$CONSUL_ADDR/v1/status/leader" | grep -q "."; then echo "错误: 无法连接到Consul服务器 $CONSUL_ADDR" exit 1 fi echo "Consul连接成功" # 检查Nomad连接 echo "检查Nomad连接..." if ! curl -s "$NOMAD_ADDR/v1/status/leader" | grep -q "."; then echo "错误: 无法连接到Nomad服务器 $NOMAD_ADDR" exit 1 fi echo "Nomad连接成功" # 步骤1: 设置Consul变量 echo "步骤1: 设置Consul变量..." /root/mgmt/deployment/scripts/setup_consul_cluster_variables.sh # 步骤2: 生成Consul配置文件 echo "步骤2: 生成Consul配置文件..." /root/mgmt/deployment/scripts/generate_consul_config.sh # 步骤3: 停止现有的Consul集群 echo "步骤3: 停止现有的Consul集群..." if nomad job status consul-cluster-simple 2>/dev/null; then nomad job stop consul-cluster-simple echo "已停止现有的consul-cluster-simple作业" fi if nomad job status consul-cluster-dynamic 2>/dev/null; then nomad job stop consul-cluster-dynamic echo "已停止现有的consul-cluster-dynamic作业" fi if nomad job status consul-cluster-kv 2>/dev/null; then nomad job stop consul-cluster-kv echo "已停止现有的consul-cluster-kv作业" fi # 步骤4: 部署新的Consul集群 echo "步骤4: 部署新的Consul集群..." nomad job run $CONSUL_JOBS_DIR/consul-cluster-kv.nomad # 步骤5: 验证部署 echo "步骤5: 验证部署..." sleep 10 # 检查作业状态 if nomad job status consul-cluster-kv | grep -q "running"; then echo "Consul集群作业正在运行" else echo "错误: Consul集群作业未运行" exit 1 fi # 检查Consul集群状态 if curl -s "$CONSUL_ADDR/v1/status/leader" | grep -q "."; then echo "Consul集群leader已选举" else echo "错误: Consul集群leader未选举" exit 1 fi # 检查节点数量 NODE_COUNT=$(curl -s "$CONSUL_ADDR/v1/status/peers" | jq '. | length') if [ "$NODE_COUNT" -eq 3 ]; then echo "Consul集群节点数量正确: $NODE_COUNT" else echo "警告: Consul集群节点数量不正确: $NODE_COUNT (期望: 3)" fi # 步骤6: 验证变量配置 echo "步骤6: 验证变量配置..." # 检查一些关键变量 if curl -s "$CONSUL_ADDR/v1/kv/config/$ENVIRONMENT/consul/cluster/datacenter" | jq -r '.[].Value' | base64 -d | grep -q "dc1"; then echo "Consul数据中心配置正确" else echo "警告: Consul数据中心配置可能不正确" fi if curl -s "$CONSUL_ADDR/v1/kv/config/$ENVIRONMENT/consul/nodes/master/ip" | jq -r '.[].Value' | base64 -d | grep -q "100.117.106.136"; then echo "Consul master节点IP配置正确" else echo "警告: Consul master节点IP配置可能不正确" fi # 步骤7: 显示访问信息 echo "步骤7: 显示访问信息..." echo "Consul UI地址: http://100.117.106.136:8500" echo "Consul API地址: http://100.117.106.136:8500/v1" echo "Nomad UI地址: http://100.117.106.136:4646" echo "Nomad API地址: http://100.117.106.136:4646/v1" echo "Consul集群部署完成!" echo "集群现在完全遵循最佳变量命名规范: config/{environment}/{provider}/{region_or_service}/{key}"