开始输入,可搜索发票、服务、域名、工单,以及 更多...
跨境业务要扛住机房故障、线路中断甚至海底光缆被切断,最实用的做法是多地域容灾:生产环境放在香港,在东京、新加坡或台北保持一台持续同步的热备服务器,再通过低 TTL 的 DNS 或 Anycast 切换流量。IMIDC 可以在同一个账户里提供全部组件:香港 CN2 GIA 服务器做主站,日本、台湾、新加坡服务器做备站,以及用您自有 IP 段做 BGP/Anycast 宣告。
要点:三个互不相关的故障域,比同一机房里两台一模一样的服务器可靠得多。
| 备站地点 | 选择理由 | 注意事项 |
|---|---|---|
| 日本东京 | 离香港近,太平洋方向带宽充足,日本 VPS 可选 CN2 线路服务内地用户 | 与香港共用部分港日海缆走廊,用 mtr 确认路径差异 |
| 新加坡 | 海缆登陆区域不同,适合东南亚用户 | 需通过 IMIDC 销售开通,不在自助商店 |
| 台湾台北 | 距香港很近,台湾原生 IP,独立服务器 $199/月起 | 部分线路与香港同样经过吕宋海峡一带 |
要点:先想清楚能丢多少数据(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 级。
要点:跨地域使用异步、TLS 加密的复制;30–60 ms 的链路上做同步提交会拖慢每一次写入。
# /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
# 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 分钟)。
要点: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。
要点:DNS 切换便宜简单;自有 /24 的 Anycast 没有 DNS 缓存延迟,但需要 ASN 和 BGP 经验。
; 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;"
如果您有自己的 /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 测试到主要客户地区的路径,出故障时才知道"正常"是什么样。
要点:没演练过的备站只是愿望,不是方案。
要点:按"停机一小时的损失"选择等级。
需要新加坡节点、VPS 与独立服务器混合架构,或迁移现有服务器?IMIDC 销售可提供定制配置,并支持免费迁移。
IMIDC 在香港、东京、新加坡和台北都有机房,主站和备站可以在同一账户下开通和获得支持。香港使用中国电信 CN2 GIA 线路,新加坡通过销售定制开通。
DNS 切换对任何 IP 都适用、易于运维,但缓存会让切换延迟一到数分钟。自有 /24 的 Anycast 保持 IP 不变、靠 BGP 收敛,但需要 ASN、ROA 和 BGP 知识;IMIDC 可提供 BGP 会话并出租 IPv4 地址。
不能。复制会在几秒内把删除和损坏同步到备库。请在第三个地点保留带版本、加密的快照(如 restic),并定期做恢复测试。
至少不共用电网、大楼或同一条台风路径,最好海缆登陆点也不同。香港配东京或新加坡是常见组合,决定前用 mtr 看一下真实路径。
主站可选 香港独立服务器 或 香港 CN2 GIA VPS,备站可选 日本 VPS 或 台湾独立服务器。自有 IP 的 Anycast 请看 BGP/Anycast;新加坡节点或定制容灾方案请联系 IMIDC 销售 或 提交工单。