关系型数据库通过复制、故障转移机制和集群来确保高可用性。 这些技术协同工作,以最大限度地减少停机时间,并在硬件故障、软件问题或维护期间保持对数据的访问。 通过将数据分布在多个服务器上并自动化恢复过程,关系型数据库可以在单个组件发生故障时继续处理请求。
一个核心方法是复制,其中数据库的副本 (replicas) 保存在单独的服务器上。 主数据库处理写入操作,而副本同步数据更改并处理读取请求。 如果主数据库发生故障,则可以将副本提升以接管,从而确保连续性。 例如,PostgreSQL 使用流复制来保持副本与主数据库同步,而 MySQL 采用半同步复制来确认数据已写入至少一个副本,然后再确认事务。 某些系统(如 SQL Server AlwaysOn 可用性组)允许同步复制,以在故障转移期间实现零数据丢失。 自动化监控工具(例如,PostgreSQL 的 Patroni)检测故障并在无需手动干预的情况下触发故障转移,从而将停机时间缩短到几秒钟。
集群通过将数据库实例分组以充当单个系统来增加另一层。 在集群中,多个节点共享存储或通过分布式共识协议进行协调。 例如,MySQL Group Replication 使用基于 Paxos 的算法来确保所有节点都同意事务顺序,从而允许任何节点在主节点发生故障时处理写入。 负载平衡器将流量分配到各个节点,防止任何单个实例过载。 此外,分区(分片)将数据拆分为存储在不同服务器上的子集,从而限制了单个服务器故障的影响。 像 Amazon RDS 这样的云管理服务会自动执行许多这些过程,并将多区域部署与自动备份相结合,以在中断期间保持可用性。
这些策略通常通过定期备份、增量快照和时间点恢复来补充,以解决数据损坏或人为错误。 虽然没有一个系统能够完全避免停机,但关系型数据库使用这些分层方法在实践中实现 99.9%+ 的正常运行时间。