← 返回首页
🛡️

灾备架构设计

📂 architecture ⏱ 1 min 185 words

灾备架构设计

RPO 与 RTO 指标

灾备设计的核心指标是 RPO(恢复点目标)和 RTO(恢复时间目标):

不同业务场景对 RPO/RTO 的要求差异很大,需要根据业务影响程度制定合理的灾备策略。

┌─────────────────────────────────────────────────────────────┐
│                     灾备策略矩阵                              │
├─────────────┬─────────────┬─────────────┬─────────────────────┤
│   策略       │   RPO       │   RTO       │   成本               │
├─────────────┼─────────────┼─────────────┼─────────────────────┤
│   冷备       │   24h       │   数小时     │   低                │
│   温备       │   数小时     │   数十分钟   │   中                │
│   热备       │   接近 0     │   数秒       │   高                │
│   双活       │   0         │   0         │   很高              │
└─────────────┴─────────────┴─────────────┴─────────────────────┘

冷备方案

冷备是最简单的灾备方案,定期将数据备份到异地存储,灾难发生时手动恢复服务。

#!/bin/bash
# 数据库冷备脚本示例
BACKUP_DIR="/backup/$(date +%Y%m%d)"
REMOTE_HOST="dr-backup.example.com"

# 创建本地备份
pg_dump -Fc -f "${BACKUP_DIR}/db.dump" mydb

# 压缩备份文件
tar -czf "${BACKUP_DIR}.tar.gz" "${BACKUP_DIR}"

# 传输到异地备份服务器
rsync -avz "${BACKUP_DIR}.tar.gz" "${REMOTE_HOST}:/backup/"

# 清理本地临时文件
rm -rf "${BACKUP_DIR}" "${BACKUP_DIR}.tar.gz"

热备与自动切换

热备方案需要实时同步数据,并在主系统故障时自动切换到备用系统。

// 热备自动切换控制器
@Component
public class FailoverController {
    
    private volatile boolean primaryActive = true;
    private final ConnectionPool primaryPool;
    private final ConnectionPool standbyPool;
    
    public Connection getConnection() {
        if (primaryActive) {
            try {
                return primaryPool.getConnection();
            } catch (Exception e) {
                log.warn("主库连接失败,切换到备库");
                primaryActive = false;
            }
        }
        return standbyPool.getConnection();
    }
    
    @Scheduled(fixedRate = 5000)
    public void healthCheck() {
        boolean primaryHealthy = checkPrimaryHealth();
        boolean standbyHealthy = checkStandbyHealth();
        
        if (!primaryActive && primaryHealthy && standbyHealthy) {
            // 主库恢复,考虑切回
            log.info("主库恢复健康,准备切回");
            primaryActive = true;
        }
    }
}

灾备演练

灾备方案的有效性需要通过定期演练验证。演练应覆盖数据恢复、服务切换、数据一致性验证等环节,并记录演练过程中发现的问题。