Files
dsh_shenxian/scripts/push-parallel-47to106.sh
T

38 lines
1.6 KiB
Bash
Raw Normal View History

#!/usr/bin/env bash
. "$(cd "$(dirname "$0")/.." && pwd)/config/load.sh"
# 存量数据并行搬运 47 → 106(4 路并发;瓶颈在源端小文件 IOPS,单流只 ~0.4MB/s)
# 搬完写 /root/push-parallel.done,供后续 cutover 判断
set -uo pipefail
KEY=/root/.ssh/dshworker_ed25519
DST=root@"$DSH_PEER_PUBLIC_IP"
SSHO="-i $KEY -o BatchMode=yes -o StrictHostKeyChecking=accept-new -o Compression=no"
SRC="$DSHS_DATA_ROOT"
LOG=/root/push-parallel.log
: > "$LOG"
ssh -n $SSHO "$DST" "mkdir -p $DSHS_DATA_ROOT"
echo "[$(date +%T)] 目标端就绪" >> "$LOG"
# 按"大小"分组:大用户单开一路,其余合流(每路一个 tar→ssh)
one() { # $1=组名 其余=相对路径列表
local name="$1"; shift
(
cd "$SRC" || exit 1
{ for p in "$@"; do [ -e "$p" ] && echo "$p"; done; } > "/tmp/list-$name.txt"
tar --numeric-owner --files-from="/tmp/list-$name.txt" -cf - \
| ssh $SSHO "$DST" "tar -C "$DSHS_DATA_ROOT" --numeric-owner -xf -"
echo "[$(date +%T)] $name 完成 rc=$?" >> "$LOG"
) &
}
# 组划分(按实际内容:1 个大用户 + 若干小目录)
one g1 "users/4092b965-2f68-4977-9989-68b3966f7df0"
one g2 "users/cce6d1cd-b376-4304-80f0-0e1c58c9ffde" "users/3ec95f69-6a4e-4d16-a415-56aa09396fc5"
one g3 "users/4eaeb26b-9e0c-4c68-9b61-0daf70664ae5" "users/74e8804a-e0c8-4645-84de-90dd3fae6c2b"
one g4 "users/7ba268be-6103-438c-8e6b-609b422ccbca" "users/ca3f36e0-937f-437e-b850-53b8230f20f8" \
"bundled-skills" "business-plugins" "whitelist-cache"
wait
echo "[$(date +%T)] 全部完成" >> "$LOG"
ssh -n $SSHO "$DST" "du -sm $DSHS_DATA_ROOT | cut -f1" >> "$LOG" 2>&1
touch /root/push-parallel.done