104 lines
3.0 KiB
Bash
Executable File
104 lines
3.0 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Consul 集群部署脚本
|
|
# 使用 Ansible 在物理机上部署 Consul 集群
|
|
|
|
set -e
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
|
INVENTORY_FILE="$PROJECT_ROOT/configuration/inventories/production/consul-cluster.ini"
|
|
PLAYBOOK_FILE="$PROJECT_ROOT/configuration/playbooks/applications/consul-cluster.yml"
|
|
|
|
echo "=== Consul 集群部署脚本 ==="
|
|
echo "项目根目录: $PROJECT_ROOT"
|
|
echo "清单文件: $INVENTORY_FILE"
|
|
echo "Playbook: $PLAYBOOK_FILE"
|
|
echo
|
|
|
|
# 检查必要文件
|
|
if [[ ! -f "$INVENTORY_FILE" ]]; then
|
|
echo "错误: 清单文件不存在: $INVENTORY_FILE"
|
|
exit 1
|
|
fi
|
|
|
|
if [[ ! -f "$PLAYBOOK_FILE" ]]; then
|
|
echo "错误: Playbook 文件不存在: $PLAYBOOK_FILE"
|
|
exit 1
|
|
fi
|
|
|
|
# 生成 Consul 加密密钥(如果需要)
|
|
echo "1. 检查 Consul 加密密钥..."
|
|
if grep -q "YOUR_BASE64_ENCRYPT_KEY_HERE" "$INVENTORY_FILE"; then
|
|
echo "需要生成 Consul 加密密钥..."
|
|
|
|
# 尝试使用已安装的 consul 生成密钥
|
|
if command -v consul &> /dev/null; then
|
|
ENCRYPT_KEY=$(consul keygen)
|
|
echo "生成的加密密钥: $ENCRYPT_KEY"
|
|
|
|
# 替换清单文件中的占位符
|
|
sed -i "s/YOUR_BASE64_ENCRYPT_KEY_HERE/$ENCRYPT_KEY/" "$INVENTORY_FILE"
|
|
echo "已更新清单文件中的加密密钥"
|
|
else
|
|
echo "警告: 未找到 consul 命令,请手动生成加密密钥并更新清单文件"
|
|
echo "可以使用以下命令生成: consul keygen"
|
|
echo "或者使用在线工具生成 32 字节的 base64 编码密钥"
|
|
fi
|
|
fi
|
|
|
|
# 测试连接
|
|
echo
|
|
echo "2. 测试目标主机连接..."
|
|
ansible -i "$INVENTORY_FILE" consul_cluster -m ping
|
|
|
|
if [[ $? -ne 0 ]]; then
|
|
echo "错误: 无法连接到目标主机,请检查清单文件中的连接信息"
|
|
exit 1
|
|
fi
|
|
|
|
# 显示部署信息
|
|
echo
|
|
echo "3. 部署信息:"
|
|
echo "目标主机:"
|
|
ansible -i "$INVENTORY_FILE" consul_cluster --list-hosts
|
|
|
|
echo
|
|
echo "Consul 版本: $(grep consul_version "$INVENTORY_FILE" | cut -d'=' -f2)"
|
|
echo "数据中心: $(grep consul_datacenter "$INVENTORY_FILE" | cut -d'=' -f2)"
|
|
|
|
# 确认部署
|
|
echo
|
|
read -p "确认部署 Consul 集群到上述主机? (y/N): " confirm
|
|
if [[ $confirm != "y" && $confirm != "Y" ]]; then
|
|
echo "部署已取消"
|
|
exit 0
|
|
fi
|
|
|
|
# 执行部署
|
|
echo
|
|
echo "4. 开始部署 Consul 集群..."
|
|
ansible-playbook -i "$INVENTORY_FILE" "$PLAYBOOK_FILE" -v
|
|
|
|
if [[ $? -eq 0 ]]; then
|
|
echo
|
|
echo "=== 部署完成 ==="
|
|
echo
|
|
echo "验证集群状态:"
|
|
echo "1. 检查服务状态:"
|
|
echo " ansible -i $INVENTORY_FILE consul_cluster -m shell -a 'systemctl status consul'"
|
|
echo
|
|
echo "2. 检查集群成员:"
|
|
echo " ansible -i $INVENTORY_FILE consul_cluster -m shell -a 'consul members'"
|
|
echo
|
|
echo "3. 访问 Web UI:"
|
|
echo " - Master: http://master:8500"
|
|
echo " - Ash3c: http://ash3c:8500"
|
|
echo
|
|
echo "4. 检查集群领导者:"
|
|
echo " curl http://master:8500/v1/status/leader"
|
|
echo
|
|
else
|
|
echo "部署失败,请检查错误信息"
|
|
exit 1
|
|
fi |