261 lines
7.2 KiB
Bash
Executable File
261 lines
7.2 KiB
Bash
Executable File
#!/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 "$@" |