diff --git a/vmBackUp.sh b/vmBackUp.sh index cd2ac6b..20fbbac 100755 --- a/vmBackUp.sh +++ b/vmBackUp.sh @@ -19,82 +19,109 @@ if [ ! -d "$BACKUP_DIR" ]; then mkdir -p "$BACKUP_DIR" fi -# 步骤1: 禁用ES集群分片分配 -echo "禁用ES集群分片分配..." -curl -u elastic:your_secure_password -X PUT "http://${ES_HOST}/_cluster/settings" -H 'Content-Type: application/json' -d'{ - "persistent": { - "cluster.routing.allocation.enable": "none" - } -}' -if [ $? -ne 0 ]; then - echo "错误: 禁用ES集群分片分配失败" - exit 1 -fi -echo "" - -# 步骤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 +# 定义函数:重新启用ES集群分片分配 +enable_shard_allocation() { + echo "重新启用ES集群分片分配..." + curl -X PUT "http://${ES_HOST}/_cluster/settings" -H 'Content-Type: application/json' -d'{ + "persistent": { + "cluster.routing.allocation.enable": "all" + } + }' + if [ $? -ne 0 ]; then + echo "警告: 重新启用ES集群分片分配失败" + else + echo "ES集群分片分配已成功重新启用" fi - sleep $WAIT_INTERVAL - ELAPSED=$((ELAPSED + WAIT_INTERVAL)) -done -if [ $ELAPSED -ge $MAX_WAIT ]; then - echo "警告: 等待超时,节点 $NODE_NAME 未及时加入集群" -fi +} -# 步骤7: 重新启用ES集群分片分配 -echo "重新启用ES集群分片分配..." -curl -X PUT "http://${ES_HOST}/_cluster/settings" -H 'Content-Type: application/json' -d'{ - "persistent": { - "cluster.routing.allocation.enable": "all" - } -}' -if [ $? -ne 0 ]; then - echo "错误: 重新启用ES集群分片分配失败" +# 定义函数:禁用ES集群分片分配 +disable_shard_allocation() { + echo "禁用ES集群分片分配..." + curl -u elastic:your_secure_password -X PUT "http://${ES_HOST}/_cluster/settings" -H 'Content-Type: application/json' -d'{ + "persistent": { + "cluster.routing.allocation.enable": "none" + } + }' + 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 -fi -echo "" +} + +# 主流程 +disable_shard_allocation +stop_vm +manage_backup_files +perform_backup +start_vm +wait_for_node_join +enable_shard_allocation echo "备份完成!最新备份文件: $BACKUP_FILE"