update vmBackup

This commit is contained in:
ubuntu 2025-03-31 17:55:31 +08:00
parent aaa782e22c
commit b763ed7d85

View File

@ -19,82 +19,109 @@ if [ ! -d "$BACKUP_DIR" ]; then
mkdir -p "$BACKUP_DIR" mkdir -p "$BACKUP_DIR"
fi fi
# 步骤1: 禁用ES集群分片分配 # 定义函数重新启用ES集群分片分配
echo "禁用ES集群分片分配..." enable_shard_allocation() {
curl -u elastic:your_secure_password -X PUT "http://${ES_HOST}/_cluster/settings" -H 'Content-Type: application/json' -d'{ echo "重新启用ES集群分片分配..."
"persistent": { curl -X PUT "http://${ES_HOST}/_cluster/settings" -H 'Content-Type: application/json' -d'{
"cluster.routing.allocation.enable": "none" "persistent": {
} "cluster.routing.allocation.enable": "all"
}' }
if [ $? -ne 0 ]; then }'
echo "错误: 禁用ES集群分片分配失败" if [ $? -ne 0 ]; then
exit 1 echo "警告: 重新启用ES集群分片分配失败"
fi else
echo "" echo "ES集群分片分配已成功重新启用"
# 步骤2: 停止虚机
echo "停止虚机: $VM_NAME..."
lxc stop "$VM_NAME"
if [ $? -ne 0 ]; then
echo "错误: 无法停止虚机 $VM_NAME"
exit 1
fi
# 步骤3: 管理备份文件保留最近3份
echo "管理备份文件..."
if [ -f "${BACKUP_FILE}_bak1" ]; then
mv "${BACKUP_FILE}_bak1" "${BACKUP_FILE}_bak2"
fi
if [ -f "$BACKUP_FILE" ]; then
mv "$BACKUP_FILE" "${BACKUP_FILE}_bak1"
fi
# 步骤4: 执行备份
echo "开始备份虚机 $VM_NAME$BACKUP_FILE..."
lxc export "$VM_NAME" "$BACKUP_FILE"
if [ $? -ne 0 ]; then
echo "错误: 备份失败"
lxc start "$VM_NAME" # 备份失败时尝试重启虚机
exit 1
fi
# 步骤5: 重启虚机
echo "重启虚机: $VM_NAME..."
lxc start "$VM_NAME"
if [ $? -ne 0 ]; then
echo "错误: 无法启动虚机 $VM_NAME"
exit 1
fi
# 步骤6: 等待节点加入ES集群
echo "等待节点 $NODE_NAME 加入ES集群..."
MAX_WAIT=60 # 最大等待时间(秒)
WAIT_INTERVAL=5 # 检查间隔(秒)
ELAPSED=0
while [ $ELAPSED -lt $MAX_WAIT ]; do
NODE_COUNT=$(curl -s "http://${ES_HOST}/_cat/nodes" | grep -c "$NODE_NAME")
if [ "$NODE_COUNT" -ge 1 ]; then
echo "节点 $NODE_NAME 已加入集群"
break
fi fi
sleep $WAIT_INTERVAL }
ELAPSED=$((ELAPSED + WAIT_INTERVAL))
done
if [ $ELAPSED -ge $MAX_WAIT ]; then
echo "警告: 等待超时,节点 $NODE_NAME 未及时加入集群"
fi
# 步骤7: 重新启用ES集群分片分配 # 定义函数禁用ES集群分片分配
echo "重新启用ES集群分片分配..." disable_shard_allocation() {
curl -X PUT "http://${ES_HOST}/_cluster/settings" -H 'Content-Type: application/json' -d'{ echo "禁用ES集群分片分配..."
"persistent": { curl -u elastic:your_secure_password -X PUT "http://${ES_HOST}/_cluster/settings" -H 'Content-Type: application/json' -d'{
"cluster.routing.allocation.enable": "all" "persistent": {
} "cluster.routing.allocation.enable": "none"
}' }
if [ $? -ne 0 ]; then }'
echo "错误: 重新启用ES集群分片分配失败" if [ $? -ne 0 ]; then
echo "错误: 禁用ES集群分片分配失败"
enable_shard_allocation
exit 1
fi
echo ""
}
# 定义函数:停止虚机
stop_vm() {
echo "停止虚机: $VM_NAME..."
lxc stop "$VM_NAME"
if [ $? -ne 0 ]; then
echo "错误: 无法停止虚机 $VM_NAME"
enable_shard_allocation
exit 1
fi
}
# 定义函数:管理备份文件
manage_backup_files() {
echo "管理备份文件..."
if [ -f "${BACKUP_FILE}_bak1" ]; then
mv "${BACKUP_FILE}_bak1" "${BACKUP_FILE}_bak2"
fi
if [ -f "$BACKUP_FILE" ]; then
mv "$BACKUP_FILE" "${BACKUP_FILE}_bak1"
fi
}
# 定义函数:执行备份
perform_backup() {
echo "开始备份虚机 $VM_NAME$BACKUP_FILE..."
lxc export "$VM_NAME" "$BACKUP_FILE"
if [ $? -ne 0 ]; then
echo "错误: 备份失败"
lxc start "$VM_NAME" # 备份失败时尝试重启虚机
enable_shard_allocation
exit 1
fi
}
# 定义函数:重启虚机
start_vm() {
echo "重启虚机: $VM_NAME..."
lxc start "$VM_NAME"
if [ $? -ne 0 ]; then
echo "错误: 无法启动虚机 $VM_NAME"
enable_shard_allocation
exit 1
fi
}
# 定义函数等待节点加入ES集群
wait_for_node_join() {
echo "等待节点 $NODE_NAME 加入ES集群..."
MAX_WAIT=60 # 最大等待时间(秒)
WAIT_INTERVAL=5 # 检查间隔(秒)
ELAPSED=0
while [ $ELAPSED -lt $MAX_WAIT ]; do
NODE_COUNT=$(curl -s "http://${ES_HOST}/_cat/nodes" | grep -c "$NODE_NAME")
if [ "$NODE_COUNT" -ge 1 ]; then
echo "节点 $NODE_NAME 已加入集群"
return 0
fi
sleep $WAIT_INTERVAL
ELAPSED=$((ELAPSED + WAIT_INTERVAL))
done
echo "警告: 等待超时,节点 $NODE_NAME 未及时加入集群"
enable_shard_allocation
exit 1 exit 1
fi }
echo ""
# 主流程
disable_shard_allocation
stop_vm
manage_backup_files
perform_backup
start_vm
wait_for_node_join
enable_shard_allocation
echo "备份完成!最新备份文件: $BACKUP_FILE" echo "备份完成!最新备份文件: $BACKUP_FILE"