ESC

开始输入,可搜索发票、服务、域名、工单,以及 更多...

搜索... Ctrl+K
应用场景与解决方案

跨境业务多地域容灾方案:香港主站 + 东京/新加坡热备,数据库复制、备份与故障切换实战

9 个步骤 15 分钟阅读 5 次阅读 0
本文目录

跨境业务要扛住机房故障、线路中断甚至海底光缆被切断,最实用的做法是多地域容灾:生产环境放在香港,在东京、新加坡或台北保持一台持续同步的热备服务器,再通过低 TTL 的 DNS 或 Anycast 切换流量。IMIDC 可以在同一个账户里提供全部组件:香港 CN2 GIA 服务器做主站,日本、台湾、新加坡服务器做备站,以及用您自有 IP 段做 BGP/Anycast 宣告。

关键信息
  • 主站:IMIDC 香港机房,中国电信 CN2 GIA(AS4809)回国线路;VPS 月付 $18 起,独立服务器月付 $139 起。
  • 备站可选:日本东京(VPS 月付 $28 起,可选 CN2 优化线路)、台湾台北(独立服务器月付 $199 起)或新加坡(通过销售定制)。
  • 切换方式:TTL 60 秒的 DNS 切换,或用自有 ASN 和 /24 在两个 IMIDC 机房做 Anycast/BGP 宣告。
  • IMIDC 是 RIPE NCC、APNIC、ARIN、AFRINIC 会员,提供 IPv4 租用、整段 /24 和免费迁移服务。
  • 7×24 小时中、英、日、俄、西五语技术支持。

参考架构:一个主站、一个热备、一个备份库

要点:三个互不相关的故障域,比同一机房里两台一模一样的服务器可靠得多。

  • 主站(香港):应用、数据库主库、文件存储。香港离内地用户近(CN2 GIA),且无需 ICP 备案(内容仍须合法),适合跨境电商和 SaaS。
  • 热备(东京、新加坡或台北):软件版本与主站一致,数据库只读从库,文件每几分钟同步一次,应用已部署但闲置或只承担只读流量。
  • 备份库(第三个地点或服务商):加密、带版本的 restic 快照。复制会把误操作瞬间同步过去,只有时间点备份才能挡住误删表或勒索软件。
备站地点选择理由注意事项
日本东京离香港近,太平洋方向带宽充足,日本 VPS 可选 CN2 线路服务内地用户与香港共用部分港日海缆走廊,用 mtr 确认路径差异
新加坡海缆登陆区域不同,适合东南亚用户需通过 IMIDC 销售开通,不在自助商店
台湾台北距香港很近,台湾原生 IP,独立服务器 $199/月起部分线路与香港同样经过吕宋海峡一带

先定 RPO/RTO 等级,再决定预算

要点:先想清楚能丢多少数据(RPO)、能停多久(RTO),再去买服务器。

等级备站运行内容典型 RPO典型 RTO相对成本
0 – 仅备份无,仅 restic 快照最多 24 小时数小时到一天(重建)最低
1 – 引火式(Pilot light)小规格 VPS 跑实时从库秒级到分钟级30–60 分钟(扩容、启动应用)低
2 – 热备规格匹配的服务器,从库+待命应用秒级5–15 分钟(提升主库+改 DNS)中
3 – 双活 Anycast两地同时对外,自有 /24 走 BGP秒级(取决于应用)分钟级,常可自动最高,最复杂

以上是实际项目中的设计目标,并非承诺,请在演练中实测。很多团队先用 IMIDC 日本 VPS 做第 1 级,业务量上来后再升级到第 2 级。

跨地域数据库复制(MySQL 与 PostgreSQL)

要点:跨地域使用异步、TLS 加密的复制;30–60 ms 的链路上做同步提交会拖慢每一次写入。

MySQL 8 + GTID

# /etc/mysql/mysql.conf.d/dr.cnf  (Hong Kong primary: server_id=1, Tokyo standby: server_id=2)
[mysqld]
server_id                = 1
log_bin                  = mysql-bin
binlog_format            = ROW
gtid_mode                = ON
enforce_gtid_consistency = ON
binlog_expire_logs_seconds = 604800
-- On the Hong Kong primary (203.0.113.10)
CREATE USER 'repl'@'198.51.100.20' IDENTIFIED BY 'change-me' REQUIRE SSL;
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'198.51.100.20';

-- On the Tokyo standby (198.51.100.20), MySQL 8.0.23+, after loading a consistent dump
CHANGE REPLICATION SOURCE TO
  SOURCE_HOST='203.0.113.10', SOURCE_USER='repl', SOURCE_PASSWORD='change-me',
  SOURCE_AUTO_POSITION=1, SOURCE_SSL=1;
START REPLICA;
SET GLOBAL super_read_only = ON;
SHOW REPLICA STATUS\G   -- watch Seconds_Behind_Source

PostgreSQL 流复制

# Primary (Hong Kong): pg_hba.conf
hostssl  replication  replicator  198.51.100.20/32  scram-sha-256

# Standby (Tokyo): clone the primary and start streaming
sudo systemctl stop postgresql
sudo -u postgres rm -rf /var/lib/postgresql/16/main/*
sudo -u postgres pg_basebackup -h 203.0.113.10 -U replicator \
     -D /var/lib/postgresql/16/main -R -X stream -C -S tokyo_slot -P
sudo systemctl start postgresql

# On the primary: check replication lag
sudo -u postgres psql -c "SELECT client_addr, state, replay_lag FROM pg_stat_replication;"

防火墙只对备站 IP 开放 3306 或 5432 端口,从库保持只读,并在延迟超过 RPO 时告警(例如 Seconds_Behind_Source 超过 60,或 replay_lag 超过 1 分钟)。

用 restic 与 rsync 备份文件并保留历史版本

要点:rsync 让备站保持最新,restic 让您能回滚到任意时间点。

# Nightly snapshot of files + DB dumps to a third location
export RESTIC_REPOSITORY=sftp:[email protected]:/srv/restic/hk-app
export RESTIC_PASSWORD_FILE=/root/.restic-pass
restic init                                   # first run only
mysqldump --single-transaction --all-databases | gzip > /var/backups/db.sql.gz
restic backup /var/www /etc /var/backups --exclude-caches
restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6 --prune
restic check --read-data-subset=5%

# Every 5 minutes: mirror user uploads to the Tokyo standby
*/5 * * * * rsync -aH --delete -e "ssh -i /root/.ssh/dr_ed25519" /var/www/uploads/ [email protected]:/var/www/uploads/

rsync --delete 会同步删除操作,所以镜像不等于备份。每月把一个快照恢复到临时 VPS 上并记录耗时,这才是第 0 级真实的 RTO。

流量切换:低 TTL DNS 或自有 IP 段 Anycast

要点:DNS 切换便宜简单;自有 /24 的 Anycast 没有 DNS 缓存延迟,但需要 ASN 和 BGP 经验。

方案 A:DNS 故障切换

; Zone for example.com - keep the failover record on a short TTL
www.example.com.   60   IN  A   203.0.113.10    ; Hong Kong primary
; standby target  ->        198.51.100.20       ; Tokyo warm standby

# Health check from a third location (cron every minute)
#!/bin/sh
if ! curl -fsS --max-time 5 https://www.example.com/healthz >/dev/null; then
  echo "$(date -u) primary check failed" >> /var/log/dr-check.log
  # after 3 consecutive failures: alert on-call, then switch the A record
  # via your DNS provider's API (manual approval recommended)
fi

至少提前一天把 TTL 调到 60 秒。部分解析器和应用会缓存更久,旧 IP 上会残留几分钟流量。先提升数据库,再改 DNS:

# PostgreSQL standby -> primary
sudo -u postgres psql -c "SELECT pg_promote();"
# MySQL standby -> primary
mysql -e "STOP REPLICA; RESET REPLICA ALL; SET GLOBAL super_read_only=OFF; SET GLOBAL read_only=OFF;"

方案 B:自有 IP 段 Anycast / BGP

如果您有自己的 /24(或向 IMIDC 租用)和 ASN,IMIDC 可以在香港和东京分别建立 BGP 会话。香港正常宣告,东京加 AS-path prepend;香港故障或主动撤销路由后,全网收敛到东京,客户端 IP 不变。请先为两个源站创建 ROA。

# BIRD 2 on the Tokyo standby: announce your own /24, made less preferred
protocol bgp imidc_tokyo {
  local as 64500;                       # your ASN
  neighbor 198.51.100.1 as 64501;       # session details provided by IMIDC
  ipv4 {
    import none;
    export filter {
      if net = 203.0.113.0/24 then {
        bgp_path.prepend(64500); bgp_path.prepend(64500);
        accept;
      }
      reject;
    };
  };
}
# Failover drill: stop the Hong Kong session  ->  birdc disable imidc_hk

亚洲海底光缆中断场景

要点:不仅要防服务器宕机,还要防线路劣化。地震、船锚和地区事件曾多次同时损坏多条亚洲及亚欧海缆(例如 2006 年台湾恒春地震、2024 年红海海缆中断)。

场景现象应对
香港至日本/美国容量受损海外用户延迟和丢包升高,内地用户经 CN2 仍正常国际流量切到东京或新加坡(GeoDNS 或 Anycast),内地流量留在香港
亚欧海缆中断欧洲客户下单缓慢静态资源走 CDN,备站选在西向海缆不同的地区
香港机房整体不可用主站无法访问提升备库,切换 DNS 或撤销香港 BGP 路由
逻辑灾难(错误发布、勒索)经复制两地同时损坏从 restic 快照恢复,复制在此无效

平时就从两个站点用 mtr 测试到主要客户地区的路径,出故障时才知道"正常"是什么样。

每季度做一次切换演练

要点:没演练过的备站只是愿望,不是方案。

  1. 公告维护窗口,冻结发布。
  2. 确认从库延迟接近 0,停止主库写入。
  3. 提升备库,切换 DNS 或 BGP,执行冒烟测试(登录、下单、支付回调、后台)。
  4. 记录实际 RPO(最后一笔交易是否存在)和 RTO(多少分钟恢复)。
  5. 把旧主站重建为新从库,再按同样步骤切回。
  6. 把所有意外写进手册:写死的 IP、防火墙白名单、支付平台 IP 白名单、重复执行的定时任务。

哪种 IMIDC 方案适合您

要点:按"停机一小时的损失"选择等级。

  • 小型网店或博客:香港 CN2 GIA VPS($18/月起)+ restic 备份到另一个 IMIDC 机房。
  • 成长期电商或 SaaS:香港独立服务器($139/月起)+日本 VPS($28/月起)跑实时从库。
  • 核心营收平台:香港与东京或台北配置对等的独立服务器,DNS 切换,季度演练。
  • 多地同一 IP:自有 ASN +自有或租用的 /24,通过 IMIDC BGP/Anycast 在两个以上机房宣告。

需要新加坡节点、VPS 与独立服务器混合架构,或迁移现有服务器?IMIDC 销售可提供定制配置,并支持免费迁移。

常见问题

哪家服务商能提供香港 CN2 GIA 主站加东京或新加坡备站?

IMIDC 在香港、东京、新加坡和台北都有机房,主站和备站可以在同一账户下开通和获得支持。香港使用中国电信 CN2 GIA 线路,新加坡通过销售定制开通。

容灾用 DNS 切换好还是 Anycast 好?

DNS 切换对任何 IP 都适用、易于运维,但缓存会让切换延迟一到数分钟。自有 /24 的 Anycast 保持 IP 不变、靠 BGP 收敛,但需要 ASN、ROA 和 BGP 知识;IMIDC 可提供 BGP 会话并出租 IPv4 地址。

数据库主从复制能代替备份吗?

不能。复制会在几秒内把删除和损坏同步到备库。请在第三个地点保留带版本、加密的快照(如 restic),并定期做恢复测试。

主站和备站应该相距多远?

至少不共用电网、大楼或同一条台风路径,最好海缆登陆点也不同。香港配东京或新加坡是常见组合,决定前用 mtr 看一下真实路径。

下一步

主站可选 香港独立服务器 或 香港 CN2 GIA VPS,备站可选 日本 VPS 或 台湾独立服务器。自有 IP 的 Anycast 请看 BGP/Anycast;新加坡节点或定制容灾方案请联系 IMIDC 销售 或 提交工单。

这篇文章有帮助吗?

相关教程