update vmBackup
This commit is contained in:
parent
aaa782e22c
commit
b763ed7d85
175
vmBackUp.sh
175
vmBackUp.sh
@ -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"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user