#!/bin/bash # Consul 变量和存储配置脚本 # 用于增强Consul集群功能 set -e # 颜色输出 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' # No Color # 日志函数 log_info() { echo -e "${GREEN}[INFO]${NC} $1" } log_warn() { echo -e "${YELLOW}[WARN]${NC} $1" } log_error() { echo -e "${RED}[ERROR]${NC} $1" } # 默认Consul地址 CONSUL_ADDR=${CONSUL_ADDR:-"http://localhost:8500"} # 检查Consul连接 check_consul() { log_info "检查Consul连接..." if curl -s "${CONSUL_ADDR}/v1/status/leader" > /dev/null; then log_info "Consul连接正常" return 0 else log_error "无法连接到Consul: ${CONSUL_ADDR}" return 1 fi } # 配置Consul变量 setup_variables() { log_info "配置Consul变量..." # 环境变量 ENVIRONMENT=${ENVIRONMENT:-"dev"} # 创建基础配置结构 log_info "创建基础配置结构..." # 应用配置 curl -s -X PUT "${CONSUL_ADDR}/v1/kv/config/${ENVIRONMENT}/app/name" -d "my-application" > /dev/null curl -s -X PUT "${CONSUL_ADDR}/v1/kv/config/${ENVIRONMENT}/app/version" -d "1.0.0" > /dev/null curl -s -X PUT "${CONSUL_ADDR}/v1/kv/config/${ENVIRONMENT}/app/environment" -d "${ENVIRONMENT}" > /dev/null # 数据库配置 curl -s -X PUT "${CONSUL_ADDR}/v1/kv/config/${ENVIRONMENT}/database/host" -d "db.example.com" > /dev/null curl -s -X PUT "${CONSUL_ADDR}/v1/kv/config/${ENVIRONMENT}/database/port" -d "5432" > /dev/null curl -s -X PUT "${CONSUL_ADDR}/v1/kv/config/${ENVIRONMENT}/database/name" -d "myapp_db" > /dev/null # 缓存配置 curl -s -X PUT "${CONSUL_ADDR}/v1/kv/config/${ENVIRONMENT}/cache/host" -d "redis.example.com" > /dev/null curl -s -X PUT "${CONSUL_ADDR}/v1/kv/config/${ENVIRONMENT}/cache/port" -d "6379" > /dev/null # 消息队列配置 curl -s -X PUT "${CONSUL_ADDR}/v1/kv/config/${ENVIRONMENT}/mq/host" -d "mq.example.com" > /dev/null curl -s -X PUT "${CONSUL_ADDR}/v1/kv/config/${ENVIRONMENT}/mq/port" -d "5672" > /dev/null # 特性开关 curl -s -X PUT "${CONSUL_ADDR}/v1/kv/config/${ENVIRONMENT}/features/new_ui" -d "true" > /dev/null curl -s -X PUT "${CONSUL_ADDR}/v1/kv/config/${ENVIRONMENT}/features/advanced_analytics" -d "false" > /dev/null log_info "Consul变量配置完成" } # 配置Consul存储 setup_storage() { log_info "配置Consul存储..." # 创建存储配置 # 注意:这些配置需要在Consul配置文件中启用相应的存储后端 # 持久化存储配置 curl -s -X PUT "${CONSUL_ADDR}/v1/kv/storage/consul/data_dir" -d "/opt/consul/data" > /dev/null curl -s -X PUT "${CONSUL_ADDR}/v1/kv/storage/consul/raft_dir" -d "/opt/consul/raft" > /dev/null # 快照配置 curl -s -X PUT "${CONSUL_ADDR}/v1/kv/storage/consul/snapshot_enabled" -d "true" > /dev/null curl -s -X PUT "${CONSUL_ADDR}/v1/kv/storage/consul/snapshot_interval" -d "24h" > /dev/null curl -s -X PUT "${CONSUL_ADDR}/v1/kv/storage/consul/snapshot_retention" -d "30" > /dev/null # 备份配置 curl -s -X PUT "${CONSUL_ADDR}/v1/kv/storage/consul/backup_enabled" -d "true" > /dev/null curl -s -X PUT "${CONSUL_ADDR}/v1/kv/storage/consul/backup_interval" -d "6h" > /dev/null curl -s -X PUT "${CONSUL_ADDR}/v1/kv/storage/consul/backup_retention" -d "7" > /dev/null # 自动清理配置 curl -s -X PUT "${CONSUL_ADDR}/v1/kv/storage/consul/autopilot/cleanup_dead_servers" -d "true" > /dev/null curl -s -X PUT "${CONSUL_ADDR}/v1/kv/storage/consul/autopilot/last_contact_threshold" -d "200ms" > /dev/null curl -s -X PUT "${CONSUL_ADDR}/v1/kv/storage/consul/autopilot/max_trailing_logs" -d "250" > /dev/null curl -s -X PUT "${CONSUL_ADDR}/v1/kv/storage/consul/autopilot/server_stabilization_time" -d "10s" > /dev/null curl -s -X PUT "${CONSUL_ADDR}/v1/kv/storage/consul/autopilot/redundancy_zone_tag" -d "" > /dev/null curl -s -X PUT "${CONSUL_ADDR}/v1/kv/storage/consul/autopilot/disable_upgrade_migration" -d "false" > /dev/null curl -s -X PUT "${CONSUL_ADDR}/v1/kv/storage/consul/autopilot/upgrade_version_tag" -d "" > /dev/null log_info "Consul存储配置完成" } # 创建Consul配置文件 create_consul_config() { log_info "创建Consul配置文件..." # 创建配置目录 mkdir -p /root/mgmt/components/consul/configs # 创建基础配置文件 cat > /root/mgmt/components/consul/configs/consul.hcl << EOF # Consul 基础配置 data_dir = "/opt/consul/data" raft_dir = "/opt/consul/raft" # 启用UI ui_config { enabled = true } # 数据中心配置 datacenter = "dc1" # 服务器配置 server = true bootstrap_expect = 3 # 客户端地址 client_addr = "0.0.0.0" # 绑定地址 bind_addr = "{{ GetInterfaceIP `eth0` }}" # 广告地址 advertise_addr = "{{ GetInterfaceIP `eth0` }}" # 端口配置 ports { dns = 8600 http = 8500 https = -1 grpc = 8502 grpc_tls = 8503 serf_lan = 8301 serf_wan = 8302 server = 8300 } # 连接其他节点 retry_join = ["100.117.106.136", "100.116.80.94", "100.122.197.112"] # 启用服务发现 enable_service_script = true # 启用脚本检查 enable_script_checks = true # 启用本地脚本检查 enable_local_script_checks = true # 性能调优 performance { raft_multiplier = 1 } # 日志配置 log_level = "INFO" enable_syslog = false log_file = "/var/log/consul/consul.log" # 自动加密 encrypt = "YourEncryptionKeyHere" # 重用端口 reconnect_timeout = "30s" reconnect_timeout_wan = "30s" # 会话TTL session_ttl_min = "10s" # 自动清理 autopilot { cleanup_dead_servers = true last_contact_threshold = "200ms" max_trailing_logs = 250 server_stabilization_time = "10s" redundancy_zone_tag = "" disable_upgrade_migration = false upgrade_version_tag = "" } # 快照配置 snapshot { enabled = true interval = "24h" retain = 30 name = "consul-snapshot-{{.Timestamp}}" } # 备份配置 backup { enabled = true interval = "6h" retain = 7 name = "consul-backup-{{.Timestamp}}" } EOF log_info "Consul配置文件创建完成: /root/mgmt/components/consul/configs/consul.hcl" } # 显示配置 show_config() { log_info "显示Consul变量配置..." echo "==========================================" curl -s "${CONSUL_ADDR}/v1/kv/config/${ENVIRONMENT:-dev}/?recurse" | jq -r '.[] | "\(.Key): \(.Value | @base64d)"' echo "==========================================" log_info "显示Consul存储配置..." echo "==========================================" curl -s "${CONSUL_ADDR}/v1/kv/storage/?recurse" | jq -r '.[] | "\(.Key): \(.Value | @base64d)"' echo "==========================================" } # 主函数 main() { log_info "开始配置Consul变量和存储..." # 检查Consul连接 check_consul # 配置变量 setup_variables # 配置存储 setup_storage # 创建配置文件 create_consul_config # 显示配置 show_config log_info "Consul变量和存储配置完成" # 提示下一步 log_info "下一步操作:" log_info "1. 重启Consul服务以应用新配置" log_info "2. 验证配置是否生效" log_info "3. 根据需要调整配置参数" } # 执行主函数 main "$@"