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