跨账号零流量费备份:用 VPC 对等连接让 Flexus 服务器内网访问另一个账号的 OBS 桶
跨账号零流量费备份:用 VPC 对等连接让 Flexus 服务器内网访问另一个账号的 OBS 桶
一句话总结:账号 A 的 Flexus 应用服务器上的网站和数据库,通过 VPC 对等连接 + VPC 终端节点,走内网备份到账号 B 的 OBS 存储桶里。备份上传本就免费,关键是恢复下载也不花一分钱公网流量费。
一、痛点:你可能也遇到了这个问题
如果你正在用华为云,以下场景大概率会戳中你:
你有一个账号(姑且叫账号 A),在上面买了台 Flexus 应用服务器(L 实例),装了 Ubuntu 系统,跑着宝塔面板,建了好几个网站和数据库。 日常运行没问题,但你心里一直不踏实——万一服务器挂了、数据误删了、被黑了怎么办?必须备份。
你还有另一个账号(账号 B),上面买了个 OBS 标准存储多 AZ 资源包。 资源包已经付过钱了,容量充足,用来存备份再合适不过。
但问题来了:
- 两个资源在不同账号下。账号 A 的服务器想往账号 B 的 OBS 桶里存东西、取东西,默认得走公网。
- 上传到 OBS 走公网是免费的(OBS 公网上行不收费),但从 OBS 下载走公网要收费(公网下行流量按量计费)。备份文件动辄几个 G 甚至几十个 G,每次恢复、迁移、验证备份都要从 OBS 拉数据,这些下行流量费积少成多,账单看着肉疼。
- 资源包只覆盖存储容量和请求次数,不覆盖公网下行流量。你买了资源包以为万事大吉,结果恢复数据时流量费照样另算。
你想要的其实很简单:让账号 A 的 Flexus 服务器和账号 B 的 OBS 桶之间走内网通信,数据传输不经过公网。这样不管是备份上传还是恢复下载,都不产生公网流量费。资源包的容量和请求额度用来兜底,整个备份和恢复过程零额外流量成本。
解决方案就是:VPC 对等连接(VPC Peering)+ VPC 终端节点(VPC Endpoint)。
这篇文章会手把手教你怎么配,每一步都写清楚点哪个按钮、填什么值。
二、方案原理:数据是怎么走内网的
先搞懂原理,后面操作就不慌。
架构图如下:

数据流向:
- Flexus 服务器(账号 A 的 VPC-A)发出 OBS 请求
- 请求通过 VPC 对等连接 进入账号 B 的 VPC-B
- VPC-B 中的 VPC 终端节点(一个内网 IP)将请求转发给 OBS 服务
- OBS 返回数据,原路返回
关键角色解释:
| 组件 | 作用 | 在哪个账号创建 |
|---|---|---|
| VPC 对等连接 | 把两个账号的 VPC 内网打通 | A 发起,B 接受 |
| VPC 终端节点 (VPCEP) | 在 VPC-B 内提供一个访问 OBS 的内网入口 | 账号 B |
| 路由表规则 | 告诉服务器"去 B 的网段走对等连接" | 两个账号都要配 |
| 安全组规则 | 允许对等连接的流量通过 | 两个账号都要配 |
三、前提条件
开始操作前,确认以下条件满足:
3.1 两个账号在同一区域
VPC 对等连接要求两个 VPC 在同一个区域(比如都在 cn-north-4 北京四)。如果不在同一区域,对等连接建不了,得考虑其他方案(如云连接 CC)。
怎么确认:
- 登录账号 A,看 Flexus 服务器在哪个区域(控制台左上角有区域选择器)
- 登录账号 B,看 OBS 资源包在哪个区域
- 两者必须一致
3.2 两个 VPC 的网段不冲突
VPC 对等连接要求两个 VPC 的 CIDR(网段)不能重叠。比如 VPC-A 是 192.168.0.0/16,VPC-B 就不能也是 192.168.0.0/16,否则路由冲突。
怎么确认:
- 登录账号 A → VPC 控制台 → 找到 Flexus 服务器所在的 VPC → 记下 CIDR
- 登录账号 B → VPC 控制台 → 找到要用的 VPC → 记下 CIDR
- 如果冲突,需要修改其中一个 VPC 的网段(建议改账号 B 的,因为账号 A 的 Flexus 服务器已经在跑了,改网段风险大)
3.3 准备好以下信息
| 信息项 | 从哪里获取 |
|---|---|
| 账号 A 的 VPC ID 和 CIDR | 账号 A → VPC 控制台 |
| 账号 A 的子网 ID 和 CIDR | 账号 A → VPC 控制台 → 子网 |
| 账号 B 的 VPC ID 和 CIDR | 账号 B → VPC 控制台 |
| 账号 B 的子网 ID 和 CIDR | 账号 B → VPC 控制台 → 子网 |
| 账号 B 的项目 ID | 账号 B → 我的凭证 → 项目 ID |
| 账号 B 的 AK/SK | 账号 B → 我的凭证 → 访问密钥 |
| OBS 桶名 | 账号 B → OBS 控制台 |
关于 AK/SK:Flexus 服务器上要用账号 B 的 AK/SK 才能操作账号 B 的 OBS 桶。这是跨账号访问的必要条件。AK/SK 相当于账号 B 的"钥匙",请妥善保管,不要泄露。
四、操作步骤(跟着做就行)
第 1 步:在账号 B 创建 VPC 终端节点(VPCEP)
这一步在账号 B 操作,目的是在 VPC-B 里创建一个访问 OBS 的内网入口。
-
登录账号 B,进入控制台
-
左上角确认区域正确(和 Flexus 服务器同一区域)
-
搜索 VPC 终端节点(或 VPCEP),进入终端节点控制台
-
点击 创建终端节点
填写以下信息:
参数 填什么 说明 终端节点类型 选择 接口型 OBS 用接口型 终端节点服务 选择 com.myhuaweicloud.obs 这是华为云 OBS 的终端节点服务名,在列表里找 OBS 相关的 VPC 选择 VPC-B 就是你要用来和对等连接的那个 VPC 子网 选择 VPC-B 下的子网 选一个子网即可 虚拟私有云 保持默认 — -
点击 立即创建
-
创建完成后,在终端节点列表中找到刚创建的节点,记下它的内网 IP 地址(形如
10.0.x.x)。这个 IP 就是 Flexus 服务器访问 OBS 的内网地址。⚠️ 重要:这个内网 IP 后面要用,务必记下来。我们暂且叫它
VPCEP_IP。 -
配置终端节点的安全组:点击刚创建的终端节点 → 安全组 → 添加规则:
- 方向:入方向
- 协议:TCP
- 端口:443
- 源地址:填账号 A 的 VPC-A 的 CIDR(比如
192.168.0.0/16) - 描述:允许 Flexus 服务器通过对等连接访问
这一步是告诉终端节点:“来自账号 A 那个网段的请求,放行。”
第 2 步:在账号 A 发起 VPC 对等连接
这一步在账号 A 操作,由账号 A 主动向账号 B 的 VPC 发起对等连接请求。
-
登录账号 A,进入控制台
-
搜索 VPC,进入虚拟私有云控制台
-
左侧导航栏找到 对等连接(在"VPC网络"菜单下)
-
点击 创建对等连接
填写以下信息:
参数 填什么 说明 名称 peer-A-to-B(随便起,自己认得就行)— 本端 VPC 选择 Flexus 服务器所在的 VPC-A — 对端 VPC ID 填账号 B 的 VPC ID 从前提条件里准备好的信息中取 对端租户 ID 填账号 B 的项目 ID 不是账号名,是项目 ID(一串字母数字) ⚠️ 对端租户 ID 就是账号 B 的项目 ID,不是账号 ID。在账号 B 的"我的凭证"页面可以看到,形如
0a1b2c3d...。 -
点击 确定
-
创建完成后,对等连接状态会显示 “待接受”。这时候需要账号 B 去接受。
记下这个对等连接的 ID,后面配路由要用。
第 3 步:在账号 B 接受 VPC 对等连接
这一步切回账号 B 操作。
-
登录账号 B,进入 VPC 控制台
-
左侧导航栏找到 对等连接
-
在列表中找到状态为 “待接受” 的那条(就是账号 A 刚发起的)
-
点击 接受
如果看不到待接受的请求,检查:
- 区域是否正确(必须和账号 A 同一区域)
- 对等连接列表是否需要切换筛选条件
-
接受后,状态变为 “已接受”,说明对等连接建立成功。
记下这个对等连接的 ID(和账号 A 看到的是同一个)。
第 4 步:在账号 A 添加路由表规则
对等连接建好了,但服务器还不知道"去账号 B 的网段该走哪条路"。需要在路由表里加一条规则,告诉它"去 B 的网段,走对等连接"。
-
在账号 A,进入 VPC 控制台
-
左侧导航栏 → 路由表
-
找到 VPC-A 的默认路由表,点击进入
-
点击 添加路由
参数 填什么 说明 目的地址 填账号 B 的 VPC-B 的 CIDR 比如 10.0.0.0/16下一跳类型 选择 对等连接 — 下一跳 选择第 2 步创建的对等连接 列表里选 peer-A-to-B -
点击 确定
这条规则的意思是:凡是发往
10.0.0.0/16(账号 B 的网段)的流量,都走对等连接过去。
第 5 步:在账号 B 添加路由表规则
账号 B 这边也要加一条回程路由,告诉 VPC-B “去账号 A 的网段,也走对等连接”。
-
在账号 B,进入 VPC 控制台
-
左侧导航栏 → 路由表
-
找到 VPC-B 的默认路由表,点击进入
-
点击 添加路由
参数 填什么 说明 目的地址 填账号 A 的 VPC-A 的 CIDR 比如 192.168.0.0/16下一跳类型 选择 对等连接 — 下一跳 选择同一个对等连接 列表里选 peer-A-to-B -
点击 确定
⚠️ 路由表必须两边都配。只配一边,请求过去了回不来,等于白搭。
第 6 步:配置安全组
安全组是最后一道门,得把门打开才能通信。
6.1 账号 A 的 Flexus 服务器安全组(出方向)
-
在账号 A,进入 VPC 控制台 → 安全组
-
找到 Flexus 服务器使用的安全组
-
添加出方向规则:
参数 填什么 协议 TCP 端口 443 目的地址 账号 B 的 VPC-B CIDR(如 10.0.0.0/16)一般默认出方向是全部放行的,如果已有"全部放行"规则,这步可以跳过。
6.2 账号 B 的 VPC 终端节点安全组(入方向)
这一步在第 1 步创建终端节点时已经配过了。如果跳过了,现在补上:
- 在账号 B,进入 VPC 终端节点控制台
- 点击刚创建的终端节点 → 安全组
- 确认有这条入方向规则:
- 协议 TCP,端口 443,源地址为 VPC-A 的 CIDR
第 7 步:在 Flexus 服务器上配置 obsutil
前面六步把网络打通了,现在在 Flexus 服务器上配置 OBS 客户端工具,让它走内网访问账号 B 的桶。
7.1 安装 obsutil
SSH 登录到 Flexus 服务器(宝塔面板的终端也行):
# 下载 obsutil(先确认架构)
uname -m
# 如果输出 aarch64,用 arm64 包;如果输出 x86_64,用 amd64 包
cd /tmp
wget https://obs-community.obs.cn-north-1.myhuaweicloud.com/obsutil/current/obsutil_linux_arm64.tar.gz
# 解压
tar -xzvf obsutil_linux_arm64.tar.gz
# 移到统一位置
chmod +x obsutil
mv obsutil /usr/local/bin/
# 验证安装
obsutil version
架构确认:Flexus 服务器 ARM 和 x86 都有可能,看购买时选的规格。如果上面的下载链接不对,去华为云 obsutil 官方文档找对应架构的下载地址。
7.2 配置 obsutil 使用账号 B 的 AK/SK 和内网终端节点
obsutil config -i=<账号B的AK> -k=<账号B的SK> -e=<VPCEP_IP>
把 <VPCEP_IP> 替换为第 1 步记下的 VPC 终端节点内网 IP,比如 10.0.1.123。
⚠️ 这里用的是账号 B 的 AK 和 SK,不是账号 A 的。因为你要操作的是账号 B 的 OBS 桶。
关于 AK/SK 安全:AK/SK 是账号 B 的访问密钥,相当于账号 B 的密码。建议:
- 使用后及时清除命令历史中的明文(
history -c)- 或者将配置写入 obsutil 的配置文件
~/.obsutilconfig,避免命令行明文传递- 不要将 AK/SK 提交到任何代码仓库
7.3 验证连通性
# 列出账号 B 的桶(能列出来说明内网通了)
obsutil ls
如果看到账号 B 的 OBS 桶列表,恭喜,内网通道已经打通!
如果报错,看后面的【常见问题】排查。
第 8 步:测试上传和下载
# 上传一个测试文件
echo "hello backup" > /tmp/test.txt
obsutil cp /tmp/test.txt obs://你的桶名/test.txt
# 下载回来
obsutil cp obs://你的桶名/test.txt /tmp/test_download.txt
# 查看内容
cat /tmp/test_download.txt
能上传能下载,说明全链路正常。
第 9 步:设置自动备份
现在通道通了,可以设置定时备份了。这里提供两种方案,选你喜欢的。
方案一:用宝塔面板自带的备份功能(推荐,最省心)
宝塔面板自带网站和数据库备份功能,支持设置保留最近 N 次备份,防止备份文件无限增长撑爆存储桶。配合 obsutil 上传到 OBS,完整流程如下:
9.1.1 配置宝塔面板的计划任务(本地备份 + 保留份数)
-
登录宝塔面板
-
左侧菜单 → 计划任务
-
添加任务:
- 任务类型:备份网站
- 网站:选择要备份的网站(或选"所有网站")
- 执行周期:每天凌晨 3:00(按需调整)
- 保留份数:填 7(保留最近 7 次备份,旧的自动删除)
- 备份到:服务器磁盘(先备份到本地)
-
再添加一个任务备份数据库:
- 任务类型:备份数据库
- 数据库:选择要备份的数据库(或选"所有数据库")
- 执行周期:每天凌晨 3:05
- 保留份数:填 7
- 备份到:服务器磁盘
宝塔的备份文件默认存放在
/www/backup/site/(网站)和/www/backup/database/(数据库)。
9.1.2 配置 obsutil 上传脚本(本地备份 → OBS 内网上传)
宝塔面板保留最近 N 份在本地,我们再写一个脚本把这些备份上传到 OBS:
sudo mkdir -p /opt/backup
sudo vim /opt/backup/sync_to_obs.sh
脚本内容:
#!/bin/bash
# ============================================
# 将宝塔面板本地备份同步到 OBS(走内网,零流量费)
# ============================================
OBS_BUCKET="你的桶名" # ← 改成你的桶名
SITE_DIR="/www/backup/site" # 宝塔网站备份目录
DB_DIR="/www/backup/database" # 宝塔数据库备份目录
echo "[$(date)] 开始同步备份到 OBS..."
# 上传网站备份
if [ -d "$SITE_DIR" ]; then
obsutil cp "$SITE_DIR" "obs://${OBS_BUCKET}/site/" -r -f -flat
echo "[$(date)] 网站备份已同步"
fi
# 上传数据库备份
if [ -d "$DB_DIR" ]; then
obsutil cp "$DB_DIR" "obs://${OBS_BUCKET}/database/" -r -f -flat
echo "[$(date)] 数据库备份已同步"
fi
echo "[$(date)] 同步完成!"
-flat参数:不加这个参数 obsutil 会把本地完整路径结构上传到 OBS,导致桶里路径很深。加了-flat只保留文件名,桶里更干净。
9.1.3 在宝塔面板添加同步任务
- 宝塔面板 → 计划任务 → 添加任务
- 任务类型:Shell 脚本
- 任务名称:同步备份到 OBS
- 执行周期:每天凌晨 3:30(比备份任务晚一点,等备份完成)
- 脚本内容:
/opt/backup/sync_to_obs.sh
9.1.4 配置 OBS 桶生命周期规则(防止桶被撑爆)
虽然宝塔本地只保留最近 N 份,但 OBS 桶里如果不清理,文件会一直累积。有两种处理方式:
-
方式一(推荐):在账号 B 的 OBS 控制台配置生命周期规则,自动删除超过 X 天的对象
- 进入 OBS 控制台 → 点击桶名 → 基础配置 → 生命周期规则
- 添加规则:对象前缀
site/,过期天数 30 天 → 自动删除 - 再添加规则:对象前缀
database/,过期天数 30 天 → 自动删除
-
方式二:在同步脚本中加 obsutil 删除命令,只保留 OBS 上最近 N 份(实现稍复杂,推荐用方式一)
💡 宝塔本地保留份数 + OBS 生命周期规则 = 双保险:本地保留最近 7 份用于快速恢复,OBS 上保留 30 天用于长期容灾,互不冲突。
方案二:纯命令行备份脚本(不依赖宝塔面板功能)
如果你不想用宝塔面板的备份功能,或者想完全自己控制,可以用以下脚本:
sudo mkdir -p /opt/backup
sudo vim /opt/backup/backup_to_obs.sh
脚本内容(根据实际情况修改):
#!/bin/bash
# ============================================
# 网站和数据库备份到 OBS(走内网,零流量费)
# ============================================
BACKUP_DIR="/tmp/backup_$(date +%Y%m%d_%H%M%S)"
OBS_BUCKET="你的桶名" # ← 改成你的桶名
WEBSITE_DIR="/www/wwwroot" # ← 宝塔默认网站目录,按实际改
MYSQL_USER="root"
MYSQL_PASS="你的数据库密码" # ← 改成实际密码
DATABASES="db1 db2 db3" # ← 改成要备份的数据库名,空格分隔
KEEP_DAYS=30 # OBS 上保留天数
mkdir -p "$BACKUP_DIR"
echo "[$(date)] 开始备份..."
# 1. 备份网站文件
echo "[$(date)] 备份网站文件..."
tar -czf "$BACKUP_DIR/websites.tar.gz" -C "$WEBSITE_DIR" .
# 2. 备份数据库
for db in $DATABASES; do
echo "[$(date)] 备份数据库: $db"
mysqldump -u"$MYSQL_USER" -p"$MYSQL_PASS" --single-transaction "$db" > "$BACKUP_DIR/${db}.sql"
done
# 3. 打包并上传到 OBS(走内网终端节点)
ARCHIVE="/tmp/backup_$(date +%Y%m%d_%H%M%S).tar.gz"
tar -czf "$ARCHIVE" -C /tmp "$(basename $BACKUP_DIR)"
echo "[$(date)] 上传到 OBS..."
obsutil cp "$ARCHIVE" "obs://${OBS_BUCKET}/backup/$(date +%Y/%m/%d)/$(basename $ARCHIVE)"
# 4. 清理临时文件
rm -rf "$BACKUP_DIR" "$ARCHIVE"
echo "[$(date)] 备份完成!"
设置定时任务(crontab 或宝塔计划任务均可):
sudo chmod +x /opt/backup/backup_to_obs.sh
# crontab 方式:每天凌晨 3 点
sudo crontab -e
# 添加:
0 3 * * * /opt/backup/backup_to_obs.sh >> /var/log/obs_backup.log 2>&1
同样需要在 OBS 桶上配置生命周期规则自动清理旧备份(见方案一 9.1.4)。
第 10 步:验证备份确实走的是内网
这一步很重要,确认你确实没走公网、没产生下行流量费。
# 在 Flexus 服务器上,查看 obsutil 配置
cat ~/.obsutilconfig
# 确认 endpoint 是内网 IP(第 1 步记下的 VPCEP_IP),而不是公网域名
# 如果 endpoint 显示的是类似 obs.cn-north-4.myhuaweicloud.com 这样的公网域名,
# 说明没走内网,需要重新配置
另外,可以在华为云控制台验证:
- 登录账号 B → VPC 终端节点控制台 → 查看终端节点的监控指标
- 如果有请求量,说明流量确实走了终端节点(内网)
- 登录账号 B → 费用中心 → 流量账单 → 确认没有产生 OBS 公网下行流量
五、常见问题排查
Q1:obsutil ls 报错,连不上 OBS
排查步骤:
-
检查网络连通性:在 Flexus 服务器上 ping 终端节点的内网 IP
ping <VPCEP_IP>- 如果 ping 不通,说明对等连接或路由有问题,回到第 4-5 步检查路由表
- 如果能 ping 通,继续下一步
-
检查对等连接状态:在两个账号的 VPC 控制台确认对等连接状态都是"已接受"
-
检查路由表:确认两边都添加了路由规则,且目的地址和下一跳都正确
-
检查安全组:确认终端节点的安全组入方向允许了 VPC-A 的网段访问 443 端口
-
检查 obsutil 配置:
cat ~/.obsutilconfig确认
endpoint是终端节点的内网 IP,不是公网域名
Q2:对等连接创建后,账号 B 看不到待接受的请求
原因:最可能是区域不一致。
解决:登录账号 B,确认左上角选的区域和账号 A 一致。对等连接是区域级资源,必须在同一区域才能看到。
Q3:Flexus 服务器找不到自己的 VPC 信息
解决:
- 登录账号 A → Flexus 应用服务器控制台
- 点击你的服务器实例 → 详情
- 在网络信息中可以看到 VPC 名称和子网
- 然后去 VPC 控制台,用这个 VPC 名称找到 VPC ID 和 CIDR
Flexus 服务器的 VPC 是自动创建的,默认名称可能类似
vpc-default-xxxx。
Q4:两个 VPC 网段冲突了怎么办
解决方案:
- 方案一(推荐):在账号 B 新建一个 VPC,使用不冲突的网段(比如 VPC-A 是
192.168.0.0/16,VPC-B 就用10.0.0.0/16),然后在这个新 VPC 里创建终端节点 - 方案二:修改账号 B 现有 VPC 的子网 CIDR(VPC 的 CIDR 不能改,但可以新建子网)
Q5:上传大文件很慢
排查:
-
确认走的是内网(内网带宽通常远大于公网带宽)
-
obsutil 默认是单线程,大文件可以用分段上传:
obsutil cp /path/to/bigfile obs://桶名/bigfile -f -r -u -j 10-j 10表示 10 个并发线程,可以加快速度。
Q6:需要从 OBS 桶下载文件到 Flexus 服务器,怎么操作?
这正是这个方案的核心价值所在——恢复下载也走内网,不花公网下行流量费:
# 下载单个文件
obsutil cp obs://你的桶名/backup/2024/01/15/backup_xxx.tar.gz /tmp/
# 下载整个目录
obsutil cp obs://你的桶名/backup/ /tmp/restore/ -r -f
# 恢复网站
tar -xzvf /tmp/restore/backup_xxx.tar.gz -C /www/wwwroot/
# 恢复数据库
mysql -u root -p 数据库名 < /tmp/restore/db1.sql
全程内网传输,不花一分钱公网下行流量费。
六、费用说明:到底省了什么
先说清楚 OBS 公网流量的收费规则:
| 流量方向 | 走公网的费用 | 走内网的费用 |
|---|---|---|
| 上行(上传到 OBS) | 免费 | 免费 |
| 下行(从 OBS 下载) | 按量收费(约 0.5 元/GB) | 免费 |
⚠️ 注意:OBS 公网上行(上传)本身是免费的。真正花钱的是下行(下载)。如果你只是备份上传、从不下载恢复,走公网也不花钱。但现实中你不可能永远不恢复数据——验证备份是否有效、迁移服务器、灾难恢复,都需要从 OBS 下载,这些下行流量就是费用来源。
本方案的费用对比:
| 费用项 | 走公网(传统方案) | 走内网(本方案) |
|---|---|---|
| OBS 存储容量 | 资源包覆盖 ✅ | 资源包覆盖 ✅ |
| OBS 请求次数 | 资源包覆盖 ✅ | 资源包覆盖 ✅ |
| OBS 上行流量(备份上传) | 免费 ✅ | 免费 ✅ |
| OBS 下行流量(恢复下载) | 按量收费 ❌ 每月可能几十到几百元 | 免费 ✅ |
| VPC 对等连接 | — | 免费 ✅ 同区域内对等连接免费 |
| VPC 终端节点 | — | 小额费用 ⚠️ 按小时计费,约 0.01 元/小时 |
结论:
- 如果你只是偶尔备份、从不下载恢复——走公网也不花钱,不需要本方案
- 如果你需要定期从 OBS 下载文件(恢复、验证、迁移)——本方案能省掉全部公网下行流量费,每月可能省几十到几百元
- VPC 终端节点有一个很小的按小时计费费用(每月大约几块钱),相比下行流量费可以忽略不计
- 对等连接本身在同区域内是免费的
💡 提示:VPC 终端节点的具体价格请以华为云控制台显示为准,不同区域可能略有差异。可以在创建终端节点时查看价格说明。
七、安全注意事项
-
AK/SK 保管:账号 B 的 AK/SK 存储在 Flexus 服务器上,确保服务器本身安全——及时更新系统补丁、设置防火墙、禁用不必要的端口
-
OBS 桶权限:确保桶的访问策略合理,不要设成公共读写
-
备份加密:如果备份数据敏感,可以在上传前用 gpg 加密:
gpg -c backup.tar.gz # 会提示输入密码 obsutil cp backup.tar.gz.gpg obs://桶名/backup/ -
定期清理旧备份:避免 OBS 存储费用超出资源包额度
- 推荐用 OBS 生命周期规则自动清理(见第 9 步方案一 9.1.4)
- 或在脚本中加入 obsutil 删除命令
八、方案扩展
8.1 如果两个账号不在同一区域
VPC 对等连接只支持同区域。如果跨区域,可以用**云连接(Cloud Connection, CC)**替代,原理类似但配置不同。
8.2 如果不止两个账号
VPC 对等连接是点对点的。如果有 3 个以上账号需要互通,建议用企业路由器(ER),它支持多 VPC 互联,配置更简洁。
8.3 如果 Flexus 服务器有多台
多台 Flexus 服务器在同一 VPC 内,共享同一条对等连接,不需要每台都配。只需要在每台服务器上配置 obsutil 指向同一个终端节点 IP 即可。
8.4 用 OBS 生命周期 + 多 AZ 实现更可靠的备份
在账号 B 的 OBS 桶上配置:
- 多 AZ 存储:数据跨可用区冗余,单 AZ 故障不丢数据(你的资源包就是多 AZ 的)
- 生命周期规则:30 天后转为低频访问存储,90 天后删除,控制存储成本
- 版本管理:开启后,同名文件多次上传会保留历史版本,误覆盖也能恢复
九、完整操作清单(速查表)
按顺序做完这 10 步,就搞定了:
| 步骤 | 在哪操作 | 做什么 | 关键产出 |
|---|---|---|---|
| 1 | 账号 B | 创建 VPC 终端节点(接口型,选 OBS) | 终端节点内网 IP |
| 2 | 账号 A | 发起 VPC 对等连接 | 对等连接 ID |
| 3 | 账号 B | 接受对等连接 | 状态变为"已接受" |
| 4 | 账号 A | 添加路由表规则(目的=B网段,下一跳=对等连接) | — |
| 5 | 账号 B | 添加路由表规则(目的=A网段,下一跳=对等连接) | — |
| 6 | 两边 | 配置安全组(放行 443 端口) | — |
| 7 | Flexus 服务器 | 安装 obsutil,配置 B 的 AK/SK + 终端节点 IP | obsutil 可用 |
| 8 | Flexus 服务器 | 测试上传下载 | 验证通过 |
| 9 | Flexus 服务器 | 设置自动备份(宝塔面板自带备份 + obsutil 同步,或纯脚本) | 自动备份运行 |
| 10 | 控制台 | 验证走的是内网,无公网下行流量费 | 确认省钱 |
十、总结
这个方案的核心思路很简单:用 VPC 对等连接打通两个账号的内网,用 VPC 终端节点把 OBS 服务"拉"到内网里,让 Flexus 服务器通过内网 IP 访问 OBS,从而绕开公网下行流量费。
需要澄清一个常见误解:OBS 公网上传(备份)本来就是免费的,真正花钱的是公网下载(恢复)。所以如果你只是备份从不恢复,走公网也不花钱。但现实中你一定需要下载——验证备份、迁移数据、灾难恢复——这些下行流量才是费用大头。本方案的价值在于让下载也走内网,彻底消除下行流量费。
实际操作中容易踩的坑主要集中在三个地方:
- 路由表两边都要配——这是最容易漏的一步,只配一边会导致单向通,请求过去回不来
- 终端节点的安全组要放行对端网段——终端节点有自己的安全组,不是 VPC 的安全组,容易搞混
- obsutil 的 endpoint 要填内网 IP——如果填了公网域名,就白配了,还是走公网
备份策略上,推荐用宝塔面板自带的备份功能(可以设置保留最近 N 份,防止本地磁盘和 OBS 桶被撑爆),再配合 obsutil 同步到 OBS 和 OBS 生命周期规则自动清理旧文件,形成"本地快速恢复 + OBS 长期容灾"的双保险。
一旦配好,后续的备份和恢复操作和普通 obsutil 用法完全一样,只是数据走的路从公网变成了内网。你买的 OBS 资源包覆盖了存储和请求费用,对等连接同区域免费,终端节点只有每月几块钱的小额费用——相比公网下行流量费,省下的钱足够再买好几个资源包了。
希望这篇文章能帮到有同样需求的朋友。如果在操作中遇到问题,参考第五节的常见问题排查,大部分坑都在那里了。
- 点赞
- 收藏
- 关注作者
评论(0)