# 第 27 章高可用性、负载平衡和复制
目录
数据库服务器可以协同工作,以便在主服务器出现故障时让第二台服务器快速接管(高可用性),或者允许多台计算机提供相同的数据(负载平衡)。理想情况下,数据库服务器可以无缝协作。仅通过对多台机器的 Web 请求进行负载平衡,就可以很容易地组合为静态网页提供服务的 Web 服务器。事实上,只读数据库服务器也可以相对容易地组合起来。不幸的是,大多数数据库服务器都有读/写混合请求,而读/写服务器更难组合。这是因为尽管只读数据只需要在每台服务器上放置一次,但对任何服务器的写入必须传播到所有服务器,以便将来对这些服务器的读取请求返回一致的结果。
这个同步问题是服务器协同工作的根本难点。因为没有单一的解决方案可以消除同步问题对所有用例的影响,所以有多种解决方案。每个解决方案都以不同的方式解决此问题,并将其对特定工作负载的影响降至最低。
一些解决方案通过只允许一台服务器修改数据来处理同步。可以修改数据的服务器称为读/写,掌握或者基本的服务器。跟踪主服务器更改的服务器称为支持或者中学服务器。在升级为主服务器之前无法连接的备用服务器称为热备服务器,可以接受连接并提供只读查询的服务器称为热备服务器。
一些解决方案是同步的,这意味着在所有服务器都提交事务之前不会认为数据修改事务已提交。这保证了故障转移不会丢失任何数据,并且无论查询哪个服务器,所有负载平衡的服务器都将返回一致的结果。相比之下,异步解决方案允许在提交时间与其传播到其他服务器之间存在一些延迟,从而可能会在切换到备份服务器时丢失某些事务,并且负载平衡服务器可能会返回稍微陈旧的结果。当同步太慢时使用异步通信。
解决方案也可以按其粒度进行分类。一些解决方案只能处理整个数据库服务器,而其他解决方案则允许在每个表或每个数据库级别进行控制。
任何选择都必须考虑性能。通常在功能和性能之间进行权衡。例如,在慢速网络上的完全同步解决方案可能会将性能降低一半以上,而异步解决方案可能对性能的影响最小。
本节的其余部分概述了各种故障转移、复制和负载平衡解决方案。